From 264285f094019afcef4beb48085bcb1631746e34 Mon Sep 17 00:00:00 2001 From: lxf Date: Wed, 19 Nov 2014 10:45:28 +0800 Subject: [PATCH 001/128] add common_function --- php/common_function.php | 30 ++++++++++++++++++++++++++++++ php/readme.md | 7 ++++--- 2 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 php/common_function.php diff --git a/php/common_function.php b/php/common_function.php new file mode 100644 index 0000000..8608b5e --- /dev/null +++ b/php/common_function.php @@ -0,0 +1,30 @@ + + * @date : 2014-11-19 + */ + +/* + * 生成指定长度的随机字符串(包含大写英文字母, 小写英文字母, 数字) + * @demo :生成4位随机数的demo,randomStr(4); 结果:12RT + * + * @author: web + * @date : 2014-11-19 + * @param : [int] - $length - 需要生成的字符串的长度 + * @return: [string] - 指定长度包含大小写英文字母 和 数字 的随机字符串 + */ +function randomStr($length) +{ + //生成一个包含 大写英文字母, 小写英文字母, 数字 的数组 + $arr = array_merge(range(0, 9), range('a', 'z'), range('A', 'Z')); + $str = ''; + $arr_len = count($arr); + for ($i = 0; $i < $length; $i++) + { + $rand = mt_rand(0, $arr_len-1); + $str.=$arr[$rand]; + } + return $str; +} diff --git a/php/readme.md b/php/readme.md index bf8bbe2..d841f86 100644 --- a/php/readme.md +++ b/php/readme.md @@ -1,3 +1,4 @@ -ckeditor_demo -- 在线编辑器的demo
-excel_demo -- php操作excel-demo(导出excel和读取excel)
-excel_demo -- php发送email-demo +ckeditor_demo -- 在线编辑器的demo
+excel_demo -- php操作excel-demo(导出excel和读取excel)
+email_demo -- php发送email-demo
+common_function.php -- 重用函数汇总
From 326f16618c3114328bc3cfd0771cb9ad5176c7f0 Mon Sep 17 00:00:00 2001 From: lxf Date: Wed, 19 Nov 2014 10:46:55 +0800 Subject: [PATCH 002/128] edit php readme --- php/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/readme.md b/php/readme.md index d841f86..d84614d 100644 --- a/php/readme.md +++ b/php/readme.md @@ -1,4 +1,4 @@ ckeditor_demo -- 在线编辑器的demo
excel_demo -- php操作excel-demo(导出excel和读取excel)
email_demo -- php发送email-demo
-common_function.php -- 重用函数汇总
+common_function.php -- 公共函数汇总
From 8e11229c0742a381e5ac9f7181813a1bfed6810b Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Tue, 23 Dec 2014 15:26:43 +0800 Subject: [PATCH 003/128] =?UTF-8?q?=E7=94=9F=E6=88=90=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E7=A0=81demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- php/qrcode_demo/img/123456.png | Bin 0 -> 364 bytes php/qrcode_demo/index.php | 21 + php/qrcode_demo/library/phpqrcode.php | 3312 +++++++++++++++++++++++++ 3 files changed, 3333 insertions(+) create mode 100755 php/qrcode_demo/img/123456.png create mode 100755 php/qrcode_demo/index.php create mode 100755 php/qrcode_demo/library/phpqrcode.php diff --git a/php/qrcode_demo/img/123456.png b/php/qrcode_demo/img/123456.png new file mode 100755 index 0000000000000000000000000000000000000000..0cc7446703c4ae05d6f85d12728ad3e56fcea046 GIT binary patch literal 364 zcmV-y0h9iTP)jF=9DMK zef+qErqm%l^Q5owU`Ct11Wxy=A5ZIyRR%UD`tUV*kEj2-U_AlrMgXy|$fE-Q0000< KMNUMnLSTY@^P;c- literal 0 HcmV?d00001 diff --git a/php/qrcode_demo/index.php b/php/qrcode_demo/index.php new file mode 100755 index 0000000..fca573c --- /dev/null +++ b/php/qrcode_demo/index.php @@ -0,0 +1,21 @@ +'; +echo $str; diff --git a/php/qrcode_demo/library/phpqrcode.php b/php/qrcode_demo/library/phpqrcode.php new file mode 100755 index 0000000..80adb9d --- /dev/null +++ b/php/qrcode_demo/library/phpqrcode.php @@ -0,0 +1,3312 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* + * Version: 1.1.4 + * Build: 2010100721 + */ + + + +//---- qrconst.php ----------------------------- + + + + + +/* + * PHP QR Code encoder + * + * Common constants + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + define('QR_MODE_NUL', -1); + define('QR_MODE_NUM', 0); + define('QR_MODE_AN', 1); + define('QR_MODE_8', 2); + define('QR_MODE_KANJI', 3); + define('QR_MODE_STRUCTURE', 4); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function set(&$srctab, $x, $y, $repl, $replLen = false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + } + } + + + +//---- merged_config.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Config file, tuned-up for merged verion + */ + + define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there + define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true + define('QR_LOG_DIR', false); // default error logs dir + + define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false + + define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images + + + + +//---- qrtools.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Toolset, handy and debug utilites. + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + + + + +//---- qrspec.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * QR Code specifications + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QRSPEC_VERSION_MAX', 40); + define('QRSPEC_WIDTH_MAX', 177); + + define('QRCAP_WIDTH', 0); + define('QRCAP_WORDS', 1); + define('QRCAP_REMINDER', 2); + define('QRCAP_EC', 3); + + class QRspec { + + public static $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), + array( 29, 70, 7, array( 15, 26, 36, 44)), + array( 33, 100, 7, array( 20, 36, 52, 64)), + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), + array( 45, 196, 0, array( 40, 72, 108, 130)), + array( 49, 242, 0, array( 48, 88, 132, 156)), + array( 53, 292, 0, array( 60, 110, 160, 192)), + array( 57, 346, 0, array( 72, 130, 192, 224)), //10 + array( 61, 404, 0, array( 80, 150, 224, 264)), + array( 65, 466, 0, array( 96, 176, 260, 308)), + array( 69, 532, 0, array( 104, 198, 288, 352)), + array( 73, 581, 3, array( 120, 216, 320, 384)), + array( 77, 655, 3, array( 132, 240, 360, 432)), //15 + array( 81, 733, 3, array( 144, 280, 408, 480)), + array( 85, 815, 3, array( 168, 308, 448, 532)), + array( 89, 901, 3, array( 180, 338, 504, 588)), + array( 93, 991, 3, array( 196, 364, 546, 650)), + array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 + array(101, 1156, 4, array( 224, 442, 644, 750)), + array(105, 1258, 4, array( 252, 476, 690, 816)), + array(109, 1364, 4, array( 270, 504, 750, 900)), + array(113, 1474, 4, array( 300, 560, 810, 960)), + array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), + array(125, 1828, 4, array( 360, 700, 1020, 1200)), + array(129, 1921, 3, array( 390, 728, 1050, 1260)), + array(133, 2051, 3, array( 420, 784, 1140, 1350)), + array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), + array(145, 2465, 3, array( 510, 924, 1350, 1620)), + array(149, 2611, 3, array( 540, 980, 1440, 1710)), + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function getMinimumVersion($size, $level) + { + + for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { + $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; + if($words >= $size) + return $i; + } + + return -1; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function getEccSpec($version, $level, array &$spec) + { + if (count($spec) < 5) { + $spec = array(0,0,0,0,0); + } + + $b1 = self::$eccTable[$version][$level][0]; + $b2 = self::$eccTable[$version][$level][1]; + $data = self::getDataLength($version, $level); + $ecc = self::getECCLength($version, $level); + + if($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); + } + + if($w * $w - 3 == 1) { + $x = self::$alignmentPattern[$version][0]; + $y = self::$alignmentPattern[$version][0]; + self::putAlignmentMarker($frame, $x, $y); + return; + } + + $cx = self::$alignmentPattern[$version][0]; + for($x=1; $x<$w - 1; $x++) { + self::putAlignmentMarker($frame, 6, $cx); + self::putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + + $cy = self::$alignmentPattern[$version][0]; + for($y=0; $y<$w-1; $y++) { + $cx = self::$alignmentPattern[$version][0]; + for($x=0; $x<$w-1; $x++) { + self::putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $yOffset = $width - 7; + + for($y=0; $y<7; $y++) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + $yOffset++; + } + + $setPattern = str_repeat("\xc0", 8); + + QRstr::set($frame, 0, 7, $setPattern); + QRstr::set($frame, $width-8, 7, $setPattern); + QRstr::set($frame, 0, $width - 8, $setPattern); + + // Format info + $setPattern = str_repeat("\x84", 9); + QRstr::set($frame, 0, 8, $setPattern); + QRstr::set($frame, $width - 8, 8, $setPattern, 8); + + $yOffset = $width - 8; + + for($y=0; $y<8; $y++,$yOffset++) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + + // Timing pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + if($version >= 7) { + $vinf = self::getVersionPattern($version); + + $v = $vinf; + + for($x=0; $x<6; $x++) { + for($y=0; $y<3; $y++) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + + $v = $vinf; + for($y=0; $y<6; $y++) { + for($x=0; $x<3; $x++) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


        '; + echo join("
        ", $frame); + echo '






'; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
", $frame); + echo "
"; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + if(!isset(self::$frames[$version])) { + + $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + self::$frames[$version] = self::unserial(file_get_contents($fileName)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } + + + +//---- qrimage.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + $col[0] = ImageColorAllocate($base_image,255,255,255); + $col[1] = ImageColorAllocate($base_image,0,0,0); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } + + + +//---- qrinput.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input encoding class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __construct($mode, $size, $data, $bstream = null) + { + $setData = array_slice($data, 0, $size); + + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); + } + + if(!QRinput::check($mode, $size, $setData)) { + throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $words = (int)($this->size / 3); + $bs = new QRbitstream(); + + $val = 0x1; + $bs->appendNum(4, $val); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; + $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; + $val += (ord($this->data[$i*3+2]) - ord('0')); + $bs->appendNum(10, $val); + } + + if($this->size - $words * 3 == 1) { + $val = ord($this->data[$words*3]) - ord('0'); + $bs->appendNum(4, $val); + } else if($this->size - $words * 3 == 2) { + $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; + $val += (ord($this->data[$words*3+1]) - ord('0')); + $bs->appendNum(7, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $words = (int)($this->size / 2); + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x02); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; + $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); + + $bs->appendNum(11, $val); + } + + if($this->size & 1) { + $val = QRinput::lookAnTable(ord($this->data[$words * 2])); + $bs->appendNum(6, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x4); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); + + for($i=0; $i<$this->size; $i++) { + $bs->appendNum(8, ord($this->data[$i])); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $bs = new QRbitrtream(); + + $bs->appendNum(4, 0x8); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); + + for($i=0; $i<$this->size; $i+=2) { + $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); + if($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x03); + $bs->appendNum(4, ord($this->data[1]) - 1); + $bs->appendNum(4, ord($this->data[0]) - 1); + $bs->appendNum(8, ord($this->data[2])); + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + unset($this->bstream); + $words = QRspec::maximumWords($this->mode, $version); + + if($this->size > $words) { + + $st1 = new QRinputItem($this->mode, $words, $this->data); + $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); + + $st1->encodeBitStream($version); + $st2->encodeBitStream($version); + + $this->bstream = new QRbitstream(); + $this->bstream->append($st1->bstream); + $this->bstream->append($st2->bstream); + + unset($st1); + unset($st2); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __construct($version = 0, $level = QR_ECLEVEL_L) + { + if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { + throw new Exception('Invalid version no'); + return NULL; + } + + $this->version = $version; + $this->level = $level; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 0; + + foreach($this->items as $item) { + if($item->mode != QR_MODE_STRUCTURE) { + for($i=$item->size-1; $i>=0; $i--) { + $parity ^= $item->data[$i]; + } + } + } + + return $parity; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function checkModeKanji($size, $data) + { + if($size & 1) + return false; + + for($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if( $val < 0x8140 + || ($val > 0x9ffc && $val < 0xe040) + || $val > 0xebbf) { + return false; + } + } + + return true; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($prev); + $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + + return $version; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + + + + +//---- qrbitstream.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Bitstream class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } + + + + +//---- qrsplit.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input splitting classes + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } + + + +//---- qrrscode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Reed-Solomon error correction support + * + * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + * (libfec is released under the GNU Lesser General Public License.) + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } + + + +//---- qrmask.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Masking + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } + + + + +//---- qrencode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Main encoder classes. + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } + + From bd15f90cc489c0fc9df61cac7dd8d17376cfbbbf Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Tue, 23 Dec 2014 15:27:20 +0800 Subject: [PATCH 004/128] =?UTF-8?q?jiathis=E5=88=86=E4=BA=ABdemo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- php/jiathis_demo/details_page.html | 28 ++++++++++++++++++++++++++++ php/jiathis_demo/list_page.html | 28 ++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100755 php/jiathis_demo/details_page.html create mode 100755 php/jiathis_demo/list_page.html diff --git a/php/jiathis_demo/details_page.html b/php/jiathis_demo/details_page.html new file mode 100755 index 0000000..772e71d --- /dev/null +++ b/php/jiathis_demo/details_page.html @@ -0,0 +1,28 @@ + + + +详情页底部分享jiathis + + + +
+ + + +
+ + + + + \ No newline at end of file diff --git a/php/jiathis_demo/list_page.html b/php/jiathis_demo/list_page.html new file mode 100755 index 0000000..c5a87e0 --- /dev/null +++ b/php/jiathis_demo/list_page.html @@ -0,0 +1,28 @@ + + + +列表页分享jiathis> + + + +
+分享 + +
+ + + + + + \ No newline at end of file From b8b2dbdd26e74d641e51cabdabd85f928ff27ce7 Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Wed, 24 Dec 2014 10:27:46 +0800 Subject: [PATCH 005/128] Update readme.md --- php/readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/php/readme.md b/php/readme.md index d84614d..bbb724f 100644 --- a/php/readme.md +++ b/php/readme.md @@ -1,4 +1,6 @@ ckeditor_demo -- 在线编辑器的demo
excel_demo -- php操作excel-demo(导出excel和读取excel)
email_demo -- php发送email-demo
+jiathis_demo -- JS的jiathis分享插件 +qrcode_demo -- php二维码生成 common_function.php -- 公共函数汇总
From 90e11b304c263fdf41947a6a79f87a23f49a979b Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Wed, 24 Dec 2014 10:28:09 +0800 Subject: [PATCH 006/128] Update readme.md --- php/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/php/readme.md b/php/readme.md index bbb724f..398371e 100644 --- a/php/readme.md +++ b/php/readme.md @@ -1,6 +1,6 @@ ckeditor_demo -- 在线编辑器的demo
excel_demo -- php操作excel-demo(导出excel和读取excel)
email_demo -- php发送email-demo
-jiathis_demo -- JS的jiathis分享插件 -qrcode_demo -- php二维码生成 +jiathis_demo -- JS的jiathis分享插件
+qrcode_demo -- php二维码生成
common_function.php -- 公共函数汇总
From 1ad575509cfc2640457b2903994b542449665adc Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Wed, 24 Dec 2014 10:28:38 +0800 Subject: [PATCH 007/128] Update readme.md --- php/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/readme.md b/php/readme.md index 398371e..e30bf97 100644 --- a/php/readme.md +++ b/php/readme.md @@ -2,5 +2,5 @@ ckeditor_demo -- 在线编辑器的demo
excel_demo -- php操作excel-demo(导出excel和读取excel)
email_demo -- php发送email-demo
jiathis_demo -- JS的jiathis分享插件
-qrcode_demo -- php二维码生成
+qrcode_demo -- php二维码生成插件
common_function.php -- 公共函数汇总
From 20e3314e5cec50ca651a79c1bdf452cbbe11e305 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 25 Dec 2014 09:59:10 +0800 Subject: [PATCH 008/128] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- php/jiathis_demo/details_page.html | 16 ++++++------ php/jiathis_demo/list_page_one.html | 28 ++++++++++++++++++++ php/jiathis_demo/list_page_two.html | 39 ++++++++++++++++++++++++++++ php/qrcode_demo/img/123456.png | Bin 364 -> 363 bytes php/qrcode_demo/index.php | 10 +++---- 5 files changed, 80 insertions(+), 13 deletions(-) create mode 100755 php/jiathis_demo/list_page_one.html create mode 100755 php/jiathis_demo/list_page_two.html diff --git a/php/jiathis_demo/details_page.html b/php/jiathis_demo/details_page.html index 772e71d..c6a7a7a 100755 --- a/php/jiathis_demo/details_page.html +++ b/php/jiathis_demo/details_page.html @@ -12,14 +12,14 @@ diff --git a/php/jiathis_demo/list_page_one.html b/php/jiathis_demo/list_page_one.html new file mode 100755 index 0000000..fbbb0fd --- /dev/null +++ b/php/jiathis_demo/list_page_one.html @@ -0,0 +1,28 @@ + + + +单页面单组分享代码块 JIATHIS> + + + +
+分享 + +
+ + + + + + \ No newline at end of file diff --git a/php/jiathis_demo/list_page_two.html b/php/jiathis_demo/list_page_two.html new file mode 100755 index 0000000..afbc872 --- /dev/null +++ b/php/jiathis_demo/list_page_two.html @@ -0,0 +1,39 @@ + + + +单个页面添加多组分享代码块 JIATHIS + + +
+
+ 分享 + +
+
+ +
+
+ 分享 + +
+
+ + + + + \ No newline at end of file diff --git a/php/qrcode_demo/img/123456.png b/php/qrcode_demo/img/123456.png index 0cc7446703c4ae05d6f85d12728ad3e56fcea046..d36e0244a5e39871b1cd6d524c25c446dcd4eac2 100755 GIT binary patch delta 318 zcmV-E0m1(40_y^hHh&;VL_t(YiS3p>4udcZgEJYRDIV8B*M667ZLdt4wO*yudeOWhny*kC z5BD8v8PCIO3=Hb^O;Y8(>IB-fvm%iErl^n8BkjlWRO%vy!+%^v6HwyPEugefbx*23F(W2o}3?SSTddpbnqrfa0Z3?GQ$I?BultnS=I5`M5jLOkX7HzVb#OkZ( z%#$c$=$C@}F6t^0Dn$%3V%Doof4vkgZJ##mv%6-g)c2Vw)pzyGrpb48@Nqxu%c6ek zMQ!%jFjR_+kvFzLv%;r#1wpQI?rIio^=*B9t@`Jw-?1qiKM{#a|Mr7+1KRfOk|cGs QH~;_u07*qoM6N<$g1ly&P5=M^ delta 319 zcmV-F0l@z20_*~iHh&>WL_t(YiS3m;4udcdL>IYm$q{^$a4{q-aWS}wkKocpl+BDS z@*ypYgp@6ec{J-`JS+0Ai&n3ykNz%LW^6UuQao!;D)P=z$J17$NS9?_$J2Txpnor=4gS@c5f!JU!%1ZT z&~'; echo $str; From 3d7a80bf5ce9984966367c31ca06946b55b10559 Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Thu, 25 Dec 2014 10:35:37 +0800 Subject: [PATCH 009/128] =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- php/jiathis_demo/list_page.html | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100755 php/jiathis_demo/list_page.html diff --git a/php/jiathis_demo/list_page.html b/php/jiathis_demo/list_page.html deleted file mode 100755 index c5a87e0..0000000 --- a/php/jiathis_demo/list_page.html +++ /dev/null @@ -1,28 +0,0 @@ - - - -列表页分享jiathis> - - - -
-分享 - -
- - - - - - \ No newline at end of file From 4193ae7c0ef6a9cbcf3a1e0fedc68a9e0e0a63fe Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Thu, 25 Dec 2014 10:44:44 +0800 Subject: [PATCH 010/128] update --- php/jiathis_demo/details_page.html | 28 - php/jiathis_demo/list_page_one.html | 28 - php/jiathis_demo/list_page_two.html | 39 - php/qrcode_demo/img/123456.png | Bin 363 -> 0 bytes php/qrcode_demo/index.php | 21 - php/qrcode_demo/library/phpqrcode.php | 3312 ------------------------- 6 files changed, 3428 deletions(-) delete mode 100755 php/jiathis_demo/details_page.html delete mode 100755 php/jiathis_demo/list_page_one.html delete mode 100755 php/jiathis_demo/list_page_two.html delete mode 100755 php/qrcode_demo/img/123456.png delete mode 100755 php/qrcode_demo/index.php delete mode 100755 php/qrcode_demo/library/phpqrcode.php diff --git a/php/jiathis_demo/details_page.html b/php/jiathis_demo/details_page.html deleted file mode 100755 index c6a7a7a..0000000 --- a/php/jiathis_demo/details_page.html +++ /dev/null @@ -1,28 +0,0 @@ - - - -详情页底部分享jiathis - - - -
- - - -
- - - - - \ No newline at end of file diff --git a/php/jiathis_demo/list_page_one.html b/php/jiathis_demo/list_page_one.html deleted file mode 100755 index fbbb0fd..0000000 --- a/php/jiathis_demo/list_page_one.html +++ /dev/null @@ -1,28 +0,0 @@ - - - -单页面单组分享代码块 JIATHIS> - - - -
-分享 - -
- - - - - - \ No newline at end of file diff --git a/php/jiathis_demo/list_page_two.html b/php/jiathis_demo/list_page_two.html deleted file mode 100755 index afbc872..0000000 --- a/php/jiathis_demo/list_page_two.html +++ /dev/null @@ -1,39 +0,0 @@ - - - -单个页面添加多组分享代码块 JIATHIS - - -
-
- 分享 - -
-
- -
-
- 分享 - -
-
- - - - - \ No newline at end of file diff --git a/php/qrcode_demo/img/123456.png b/php/qrcode_demo/img/123456.png deleted file mode 100755 index d36e0244a5e39871b1cd6d524c25c446dcd4eac2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmV-x0hIoUP))F~mR54kCa1Q5#fsA2NLD;52b59@jzFewS`-uS}Y?UZvA|(Yzv>uTUHh_Z?~( z&%LP{1TtpL4;?gakv{7}@to_2KXe7EB zWGvC5;Zh7B+!T7tSm&d_EE;VJr%=bzJ++iYG3hut2sVt$(M=X@vYEu{tLMyO8@qQb_3e>?UE#Qv^W3&002ov JPDHLkV1k?xrFZ}U diff --git a/php/qrcode_demo/index.php b/php/qrcode_demo/index.php deleted file mode 100755 index 588a2e1..0000000 --- a/php/qrcode_demo/index.php +++ /dev/null @@ -1,21 +0,0 @@ -'; -echo $str; diff --git a/php/qrcode_demo/library/phpqrcode.php b/php/qrcode_demo/library/phpqrcode.php deleted file mode 100755 index 80adb9d..0000000 --- a/php/qrcode_demo/library/phpqrcode.php +++ /dev/null @@ -1,3312 +0,0 @@ - - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -/* - * Version: 1.1.4 - * Build: 2010100721 - */ - - - -//---- qrconst.php ----------------------------- - - - - - -/* - * PHP QR Code encoder - * - * Common constants - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - // Encoding modes - - define('QR_MODE_NUL', -1); - define('QR_MODE_NUM', 0); - define('QR_MODE_AN', 1); - define('QR_MODE_8', 2); - define('QR_MODE_KANJI', 3); - define('QR_MODE_STRUCTURE', 4); - - // Levels of error correction. - - define('QR_ECLEVEL_L', 0); - define('QR_ECLEVEL_M', 1); - define('QR_ECLEVEL_Q', 2); - define('QR_ECLEVEL_H', 3); - - // Supported output formats - - define('QR_FORMAT_TEXT', 0); - define('QR_FORMAT_PNG', 1); - - class qrstr { - public static function set(&$srctab, $x, $y, $repl, $replLen = false) { - $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); - } - } - - - -//---- merged_config.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Config file, tuned-up for merged verion - */ - - define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there - define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true - define('QR_LOG_DIR', false); // default error logs dir - - define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code - define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly - define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false - - define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images - - - - -//---- qrtools.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Toolset, handy and debug utilites. - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRtools { - - //---------------------------------------------------------------------- - public static function binarize($frame) - { - $len = count($frame); - foreach ($frame as &$frameLine) { - - for($i=0; $i<$len; $i++) { - $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; - } - } - - return $frame; - } - - //---------------------------------------------------------------------- - public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') - { - $barcode_array = array(); - - if (!is_array($mode)) - $mode = explode(',', $mode); - - $eccLevel = 'L'; - - if (count($mode) > 1) { - $eccLevel = $mode[1]; - } - - $qrTab = QRcode::text($code, false, $eccLevel); - $size = count($qrTab); - - $barcode_array['num_rows'] = $size; - $barcode_array['num_cols'] = $size; - $barcode_array['bcode'] = array(); - - foreach ($qrTab as $line) { - $arrAdd = array(); - foreach(str_split($line) as $char) - $arrAdd[] = ($char=='1')?1:0; - $barcode_array['bcode'][] = $arrAdd; - } - - return $barcode_array; - } - - //---------------------------------------------------------------------- - public static function clearCache() - { - self::$frames = array(); - } - - //---------------------------------------------------------------------- - public static function buildCache() - { - QRtools::markTime('before_build_cache'); - - $mask = new QRmask(); - for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { - $frame = QRspec::newFrame($a); - if (QR_IMAGE) { - $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; - QRimage::png(self::binarize($frame), $fileName, 1, 0); - } - - $width = count($frame); - $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); - for ($maskNo=0; $maskNo<8; $maskNo++) - $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); - } - - QRtools::markTime('after_build_cache'); - } - - //---------------------------------------------------------------------- - public static function log($outfile, $err) - { - if (QR_LOG_DIR !== false) { - if ($err != '') { - if ($outfile !== false) { - file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); - } else { - file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); - } - } - } - } - - //---------------------------------------------------------------------- - public static function dumpMask($frame) - { - $width = count($frame); - for($y=0;$y<$width;$y++) { - for($x=0;$x<$width;$x++) { - echo ord($frame[$y][$x]).','; - } - } - } - - //---------------------------------------------------------------------- - public static function markTime($markerId) - { - list($usec, $sec) = explode(" ", microtime()); - $time = ((float)$usec + (float)$sec); - - if (!isset($GLOBALS['qr_time_bench'])) - $GLOBALS['qr_time_bench'] = array(); - - $GLOBALS['qr_time_bench'][$markerId] = $time; - } - - //---------------------------------------------------------------------- - public static function timeBenchmark() - { - self::markTime('finish'); - - $lastTime = 0; - $startTime = 0; - $p = 0; - - echo ' - - '; - - foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { - if ($p > 0) { - echo ''; - } else { - $startTime = $thisTime; - } - - $p++; - $lastTime = $thisTime; - } - - echo ' - - -
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; - } - - } - - //########################################################################## - - QRtools::markTime('start'); - - - - -//---- qrspec.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * QR Code specifications - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * The following data / specifications are taken from - * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) - * or - * "Automatic identification and data capture techniques -- - * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QRSPEC_VERSION_MAX', 40); - define('QRSPEC_WIDTH_MAX', 177); - - define('QRCAP_WIDTH', 0); - define('QRCAP_WORDS', 1); - define('QRCAP_REMINDER', 2); - define('QRCAP_EC', 3); - - class QRspec { - - public static $capacity = array( - array( 0, 0, 0, array( 0, 0, 0, 0)), - array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 - array( 25, 44, 7, array( 10, 16, 22, 28)), - array( 29, 70, 7, array( 15, 26, 36, 44)), - array( 33, 100, 7, array( 20, 36, 52, 64)), - array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 - array( 41, 172, 7, array( 36, 64, 96, 112)), - array( 45, 196, 0, array( 40, 72, 108, 130)), - array( 49, 242, 0, array( 48, 88, 132, 156)), - array( 53, 292, 0, array( 60, 110, 160, 192)), - array( 57, 346, 0, array( 72, 130, 192, 224)), //10 - array( 61, 404, 0, array( 80, 150, 224, 264)), - array( 65, 466, 0, array( 96, 176, 260, 308)), - array( 69, 532, 0, array( 104, 198, 288, 352)), - array( 73, 581, 3, array( 120, 216, 320, 384)), - array( 77, 655, 3, array( 132, 240, 360, 432)), //15 - array( 81, 733, 3, array( 144, 280, 408, 480)), - array( 85, 815, 3, array( 168, 308, 448, 532)), - array( 89, 901, 3, array( 180, 338, 504, 588)), - array( 93, 991, 3, array( 196, 364, 546, 650)), - array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 - array(101, 1156, 4, array( 224, 442, 644, 750)), - array(105, 1258, 4, array( 252, 476, 690, 816)), - array(109, 1364, 4, array( 270, 504, 750, 900)), - array(113, 1474, 4, array( 300, 560, 810, 960)), - array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 - array(121, 1706, 4, array( 336, 644, 952, 1110)), - array(125, 1828, 4, array( 360, 700, 1020, 1200)), - array(129, 1921, 3, array( 390, 728, 1050, 1260)), - array(133, 2051, 3, array( 420, 784, 1140, 1350)), - array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 - array(141, 2323, 3, array( 480, 868, 1290, 1530)), - array(145, 2465, 3, array( 510, 924, 1350, 1620)), - array(149, 2611, 3, array( 540, 980, 1440, 1710)), - array(153, 2761, 3, array( 570, 1036, 1530, 1800)), - array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 - array(161, 3034, 0, array( 600, 1120, 1680, 1980)), - array(165, 3196, 0, array( 630, 1204, 1770, 2100)), - array(169, 3362, 0, array( 660, 1260, 1860, 2220)), - array(173, 3532, 0, array( 720, 1316, 1950, 2310)), - array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 - ); - - //---------------------------------------------------------------------- - public static function getDataLength($version, $level) - { - return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; - } - - //---------------------------------------------------------------------- - public static function getECCLength($version, $level) - { - return self::$capacity[$version][QRCAP_EC][$level]; - } - - //---------------------------------------------------------------------- - public static function getWidth($version) - { - return self::$capacity[$version][QRCAP_WIDTH]; - } - - //---------------------------------------------------------------------- - public static function getRemainder($version) - { - return self::$capacity[$version][QRCAP_REMINDER]; - } - - //---------------------------------------------------------------------- - public static function getMinimumVersion($size, $level) - { - - for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { - $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; - if($words >= $size) - return $i; - } - - return -1; - } - - //###################################################################### - - public static $lengthTableBits = array( - array(10, 12, 14), - array( 9, 11, 13), - array( 8, 16, 16), - array( 8, 10, 12) - ); - - //---------------------------------------------------------------------- - public static function lengthIndicator($mode, $version) - { - if ($mode == QR_MODE_STRUCTURE) - return 0; - - if ($version <= 9) { - $l = 0; - } else if ($version <= 26) { - $l = 1; - } else { - $l = 2; - } - - return self::$lengthTableBits[$mode][$l]; - } - - //---------------------------------------------------------------------- - public static function maximumWords($mode, $version) - { - if($mode == QR_MODE_STRUCTURE) - return 3; - - if($version <= 9) { - $l = 0; - } else if($version <= 26) { - $l = 1; - } else { - $l = 2; - } - - $bits = self::$lengthTableBits[$mode][$l]; - $words = (1 << $bits) - 1; - - if($mode == QR_MODE_KANJI) { - $words *= 2; // the number of bytes is required - } - - return $words; - } - - // Error correction code ----------------------------------------------- - // Table of the error correction code (Reed-Solomon block) - // See Table 12-16 (pp.30-36), JIS X0510:2004. - - public static $eccTable = array( - array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), - array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 - array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), - array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), - array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), - array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 - array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), - array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), - array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), - array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), - array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 - array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), - array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), - array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), - array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), - array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 - array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), - array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), - array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), - array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), - array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 - array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), - array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), - array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), - array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), - array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 - array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), - array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), - array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), - array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), - array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 - array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), - array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), - array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), - array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), - array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 - array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), - array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), - array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), - array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), - array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 - ); - - //---------------------------------------------------------------------- - // CACHEABLE!!! - - public static function getEccSpec($version, $level, array &$spec) - { - if (count($spec) < 5) { - $spec = array(0,0,0,0,0); - } - - $b1 = self::$eccTable[$version][$level][0]; - $b2 = self::$eccTable[$version][$level][1]; - $data = self::getDataLength($version, $level); - $ecc = self::getECCLength($version, $level); - - if($b2 == 0) { - $spec[0] = $b1; - $spec[1] = (int)($data / $b1); - $spec[2] = (int)($ecc / $b1); - $spec[3] = 0; - $spec[4] = 0; - } else { - $spec[0] = $b1; - $spec[1] = (int)($data / ($b1 + $b2)); - $spec[2] = (int)($ecc / ($b1 + $b2)); - $spec[3] = $b2; - $spec[4] = $spec[1] + 1; - } - } - - // Alignment pattern --------------------------------------------------- - - // Positions of alignment patterns. - // This array includes only the second and the third position of the - // alignment patterns. Rest of them can be calculated from the distance - // between them. - - // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. - - public static $alignmentPattern = array( - array( 0, 0), - array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 - array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 - array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 - array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 - array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 - array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 - array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 - array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 - ); - - - /** -------------------------------------------------------------------- - * Put an alignment marker. - * @param frame - * @param width - * @param ox,oy center coordinate of the pattern - */ - public static function putAlignmentMarker(array &$frame, $ox, $oy) - { - $finder = array( - "\xa1\xa1\xa1\xa1\xa1", - "\xa1\xa0\xa0\xa0\xa1", - "\xa1\xa0\xa1\xa0\xa1", - "\xa1\xa0\xa0\xa0\xa1", - "\xa1\xa1\xa1\xa1\xa1" - ); - - $yStart = $oy-2; - $xStart = $ox-2; - - for($y=0; $y<5; $y++) { - QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); - } - } - - //---------------------------------------------------------------------- - public static function putAlignmentPattern($version, &$frame, $width) - { - if($version < 2) - return; - - $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; - if($d < 0) { - $w = 2; - } else { - $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); - } - - if($w * $w - 3 == 1) { - $x = self::$alignmentPattern[$version][0]; - $y = self::$alignmentPattern[$version][0]; - self::putAlignmentMarker($frame, $x, $y); - return; - } - - $cx = self::$alignmentPattern[$version][0]; - for($x=1; $x<$w - 1; $x++) { - self::putAlignmentMarker($frame, 6, $cx); - self::putAlignmentMarker($frame, $cx, 6); - $cx += $d; - } - - $cy = self::$alignmentPattern[$version][0]; - for($y=0; $y<$w-1; $y++) { - $cx = self::$alignmentPattern[$version][0]; - for($x=0; $x<$w-1; $x++) { - self::putAlignmentMarker($frame, $cx, $cy); - $cx += $d; - } - $cy += $d; - } - } - - // Version information pattern ----------------------------------------- - - // Version information pattern (BCH coded). - // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. - - // size: [QRSPEC_VERSION_MAX - 6] - - public static $versionPattern = array( - 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, - 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, - 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, - 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, - 0x27541, 0x28c69 - ); - - //---------------------------------------------------------------------- - public static function getVersionPattern($version) - { - if($version < 7 || $version > QRSPEC_VERSION_MAX) - return 0; - - return self::$versionPattern[$version -7]; - } - - // Format information -------------------------------------------------- - // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) - - public static $formatInfo = array( - array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), - array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), - array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), - array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) - ); - - public static function getFormatInfo($mask, $level) - { - if($mask < 0 || $mask > 7) - return 0; - - if($level < 0 || $level > 3) - return 0; - - return self::$formatInfo[$level][$mask]; - } - - // Frame --------------------------------------------------------------- - // Cache of initial frames. - - public static $frames = array(); - - /** -------------------------------------------------------------------- - * Put a finder pattern. - * @param frame - * @param width - * @param ox,oy upper-left coordinate of the pattern - */ - public static function putFinderPattern(&$frame, $ox, $oy) - { - $finder = array( - "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", - "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", - "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" - ); - - for($y=0; $y<7; $y++) { - QRstr::set($frame, $ox, $oy+$y, $finder[$y]); - } - } - - //---------------------------------------------------------------------- - public static function createFrame($version) - { - $width = self::$capacity[$version][QRCAP_WIDTH]; - $frameLine = str_repeat ("\0", $width); - $frame = array_fill(0, $width, $frameLine); - - // Finder pattern - self::putFinderPattern($frame, 0, 0); - self::putFinderPattern($frame, $width - 7, 0); - self::putFinderPattern($frame, 0, $width - 7); - - // Separator - $yOffset = $width - 7; - - for($y=0; $y<7; $y++) { - $frame[$y][7] = "\xc0"; - $frame[$y][$width - 8] = "\xc0"; - $frame[$yOffset][7] = "\xc0"; - $yOffset++; - } - - $setPattern = str_repeat("\xc0", 8); - - QRstr::set($frame, 0, 7, $setPattern); - QRstr::set($frame, $width-8, 7, $setPattern); - QRstr::set($frame, 0, $width - 8, $setPattern); - - // Format info - $setPattern = str_repeat("\x84", 9); - QRstr::set($frame, 0, 8, $setPattern); - QRstr::set($frame, $width - 8, 8, $setPattern, 8); - - $yOffset = $width - 8; - - for($y=0; $y<8; $y++,$yOffset++) { - $frame[$y][8] = "\x84"; - $frame[$yOffset][8] = "\x84"; - } - - // Timing pattern - - for($i=1; $i<$width-15; $i++) { - $frame[6][7+$i] = chr(0x90 | ($i & 1)); - $frame[7+$i][6] = chr(0x90 | ($i & 1)); - } - - // Alignment pattern - self::putAlignmentPattern($version, $frame, $width); - - // Version information - if($version >= 7) { - $vinf = self::getVersionPattern($version); - - $v = $vinf; - - for($x=0; $x<6; $x++) { - for($y=0; $y<3; $y++) { - $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); - $v = $v >> 1; - } - } - - $v = $vinf; - for($y=0; $y<6; $y++) { - for($x=0; $x<3; $x++) { - $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); - $v = $v >> 1; - } - } - } - - // and a little bit... - $frame[$width - 8][8] = "\x81"; - - return $frame; - } - - //---------------------------------------------------------------------- - public static function debug($frame, $binary_mode = false) - { - if ($binary_mode) { - - foreach ($frame as &$frameLine) { - $frameLine = join('  ', explode('0', $frameLine)); - $frameLine = join('██', explode('1', $frameLine)); - } - - ?> - -


        '; - echo join("
        ", $frame); - echo '






'; - - } else { - - foreach ($frame as &$frameLine) { - $frameLine = join(' ', explode("\xc0", $frameLine)); - $frameLine = join('', explode("\xc1", $frameLine)); - $frameLine = join(' ', explode("\xa0", $frameLine)); - $frameLine = join('', explode("\xa1", $frameLine)); - $frameLine = join('', explode("\x84", $frameLine)); //format 0 - $frameLine = join('', explode("\x85", $frameLine)); //format 1 - $frameLine = join('', explode("\x81", $frameLine)); //special bit - $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 - $frameLine = join('', explode("\x91", $frameLine)); //clock 1 - $frameLine = join(' ', explode("\x88", $frameLine)); //version - $frameLine = join('', explode("\x89", $frameLine)); //version - $frameLine = join('♦', explode("\x01", $frameLine)); - $frameLine = join('⋅', explode("\0", $frameLine)); - } - - ?> - - "; - echo join("
", $frame); - echo "
"; - - } - } - - //---------------------------------------------------------------------- - public static function serial($frame) - { - return gzcompress(join("\n", $frame), 9); - } - - //---------------------------------------------------------------------- - public static function unserial($code) - { - return explode("\n", gzuncompress($code)); - } - - //---------------------------------------------------------------------- - public static function newFrame($version) - { - if($version < 1 || $version > QRSPEC_VERSION_MAX) - return null; - - if(!isset(self::$frames[$version])) { - - $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; - - if (QR_CACHEABLE) { - if (file_exists($fileName)) { - self::$frames[$version] = self::unserial(file_get_contents($fileName)); - } else { - self::$frames[$version] = self::createFrame($version); - file_put_contents($fileName, self::serial(self::$frames[$version])); - } - } else { - self::$frames[$version] = self::createFrame($version); - } - } - - if(is_null(self::$frames[$version])) - return null; - - return self::$frames[$version]; - } - - //---------------------------------------------------------------------- - public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } - public static function rsBlockNum1($spec) { return $spec[0]; } - public static function rsDataCodes1($spec) { return $spec[1]; } - public static function rsEccCodes1($spec) { return $spec[2]; } - public static function rsBlockNum2($spec) { return $spec[3]; } - public static function rsDataCodes2($spec) { return $spec[4]; } - public static function rsEccCodes2($spec) { return $spec[2]; } - public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } - public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } - - } - - - -//---- qrimage.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Image output of code using GD2 - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QR_IMAGE', true); - - class QRimage { - - //---------------------------------------------------------------------- - public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) - { - $image = self::image($frame, $pixelPerPoint, $outerFrame); - - if ($filename === false) { - Header("Content-type: image/png"); - ImagePng($image); - } else { - if($saveandprint===TRUE){ - ImagePng($image, $filename); - header("Content-type: image/png"); - ImagePng($image); - }else{ - ImagePng($image, $filename); - } - } - - ImageDestroy($image); - } - - //---------------------------------------------------------------------- - public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) - { - $image = self::image($frame, $pixelPerPoint, $outerFrame); - - if ($filename === false) { - Header("Content-type: image/jpeg"); - ImageJpeg($image, null, $q); - } else { - ImageJpeg($image, $filename, $q); - } - - ImageDestroy($image); - } - - //---------------------------------------------------------------------- - private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - $base_image =ImageCreate($imgW, $imgH); - - $col[0] = ImageColorAllocate($base_image,255,255,255); - $col[1] = ImageColorAllocate($base_image,0,0,0); - - imagefill($base_image, 0, 0, $col[0]); - - for($y=0; $y<$h; $y++) { - for($x=0; $x<$w; $x++) { - if ($frame[$y][$x] == '1') { - ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); - } - } - } - - $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); - ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); - ImageDestroy($base_image); - - return $target_image; - } - } - - - -//---- qrinput.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Input encoding class - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('STRUCTURE_HEADER_BITS', 20); - define('MAX_STRUCTURED_SYMBOLS', 16); - - class QRinputItem { - - public $mode; - public $size; - public $data; - public $bstream; - - public function __construct($mode, $size, $data, $bstream = null) - { - $setData = array_slice($data, 0, $size); - - if (count($setData) < $size) { - $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); - } - - if(!QRinput::check($mode, $size, $setData)) { - throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); - return null; - } - - $this->mode = $mode; - $this->size = $size; - $this->data = $setData; - $this->bstream = $bstream; - } - - //---------------------------------------------------------------------- - public function encodeModeNum($version) - { - try { - - $words = (int)($this->size / 3); - $bs = new QRbitstream(); - - $val = 0x1; - $bs->appendNum(4, $val); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); - - for($i=0; $i<$words; $i++) { - $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; - $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; - $val += (ord($this->data[$i*3+2]) - ord('0')); - $bs->appendNum(10, $val); - } - - if($this->size - $words * 3 == 1) { - $val = ord($this->data[$words*3]) - ord('0'); - $bs->appendNum(4, $val); - } else if($this->size - $words * 3 == 2) { - $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; - $val += (ord($this->data[$words*3+1]) - ord('0')); - $bs->appendNum(7, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeAn($version) - { - try { - $words = (int)($this->size / 2); - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x02); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); - - for($i=0; $i<$words; $i++) { - $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; - $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); - - $bs->appendNum(11, $val); - } - - if($this->size & 1) { - $val = QRinput::lookAnTable(ord($this->data[$words * 2])); - $bs->appendNum(6, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeMode8($version) - { - try { - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x4); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); - - for($i=0; $i<$this->size; $i++) { - $bs->appendNum(8, ord($this->data[$i])); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeKanji($version) - { - try { - - $bs = new QRbitrtream(); - - $bs->appendNum(4, 0x8); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); - - for($i=0; $i<$this->size; $i+=2) { - $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); - if($val <= 0x9ffc) { - $val -= 0x8140; - } else { - $val -= 0xc140; - } - - $h = ($val >> 8) * 0xc0; - $val = ($val & 0xff) + $h; - - $bs->appendNum(13, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeStructure() - { - try { - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x03); - $bs->appendNum(4, ord($this->data[1]) - 1); - $bs->appendNum(4, ord($this->data[0]) - 1); - $bs->appendNum(8, ord($this->data[2])); - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function estimateBitStreamSizeOfEntry($version) - { - $bits = 0; - - if($version == 0) - $version = 1; - - switch($this->mode) { - case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; - case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; - case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; - case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; - case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; - default: - return 0; - } - - $l = QRspec::lengthIndicator($this->mode, $version); - $m = 1 << $l; - $num = (int)(($this->size + $m - 1) / $m); - - $bits += $num * (4 + $l); - - return $bits; - } - - //---------------------------------------------------------------------- - public function encodeBitStream($version) - { - try { - - unset($this->bstream); - $words = QRspec::maximumWords($this->mode, $version); - - if($this->size > $words) { - - $st1 = new QRinputItem($this->mode, $words, $this->data); - $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); - - $st1->encodeBitStream($version); - $st2->encodeBitStream($version); - - $this->bstream = new QRbitstream(); - $this->bstream->append($st1->bstream); - $this->bstream->append($st2->bstream); - - unset($st1); - unset($st2); - - } else { - - $ret = 0; - - switch($this->mode) { - case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; - case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; - case QR_MODE_8: $ret = $this->encodeMode8($version); break; - case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; - case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; - - default: - break; - } - - if($ret < 0) - return -1; - } - - return $this->bstream->size(); - - } catch (Exception $e) { - return -1; - } - } - }; - - //########################################################################## - - class QRinput { - - public $items; - - private $version; - private $level; - - //---------------------------------------------------------------------- - public function __construct($version = 0, $level = QR_ECLEVEL_L) - { - if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { - throw new Exception('Invalid version no'); - return NULL; - } - - $this->version = $version; - $this->level = $level; - } - - //---------------------------------------------------------------------- - public function getVersion() - { - return $this->version; - } - - //---------------------------------------------------------------------- - public function setVersion($version) - { - if($version < 0 || $version > QRSPEC_VERSION_MAX) { - throw new Exception('Invalid version no'); - return -1; - } - - $this->version = $version; - - return 0; - } - - //---------------------------------------------------------------------- - public function getErrorCorrectionLevel() - { - return $this->level; - } - - //---------------------------------------------------------------------- - public function setErrorCorrectionLevel($level) - { - if($level > QR_ECLEVEL_H) { - throw new Exception('Invalid ECLEVEL'); - return -1; - } - - $this->level = $level; - - return 0; - } - - //---------------------------------------------------------------------- - public function appendEntry(QRinputItem $entry) - { - $this->items[] = $entry; - } - - //---------------------------------------------------------------------- - public function append($mode, $size, $data) - { - try { - $entry = new QRinputItem($mode, $size, $data); - $this->items[] = $entry; - return 0; - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - - public function insertStructuredAppendHeader($size, $index, $parity) - { - if( $size > MAX_STRUCTURED_SYMBOLS ) { - throw new Exception('insertStructuredAppendHeader wrong size'); - } - - if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { - throw new Exception('insertStructuredAppendHeader wrong index'); - } - - $buf = array($size, $index, $parity); - - try { - $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); - array_unshift($this->items, $entry); - return 0; - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function calcParity() - { - $parity = 0; - - foreach($this->items as $item) { - if($item->mode != QR_MODE_STRUCTURE) { - for($i=$item->size-1; $i>=0; $i--) { - $parity ^= $item->data[$i]; - } - } - } - - return $parity; - } - - //---------------------------------------------------------------------- - public static function checkModeNum($size, $data) - { - for($i=0; $i<$size; $i++) { - if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ - return false; - } - } - - return true; - } - - //---------------------------------------------------------------------- - public static function estimateBitsModeNum($size) - { - $w = (int)$size / 3; - $bits = $w * 10; - - switch($size - $w * 3) { - case 1: - $bits += 4; - break; - case 2: - $bits += 7; - break; - default: - break; - } - - return $bits; - } - - //---------------------------------------------------------------------- - public static $anTable = array( - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, - -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - ); - - //---------------------------------------------------------------------- - public static function lookAnTable($c) - { - return (($c > 127)?-1:self::$anTable[$c]); - } - - //---------------------------------------------------------------------- - public static function checkModeAn($size, $data) - { - for($i=0; $i<$size; $i++) { - if (self::lookAnTable(ord($data[$i])) == -1) { - return false; - } - } - - return true; - } - - //---------------------------------------------------------------------- - public static function estimateBitsModeAn($size) - { - $w = (int)($size / 2); - $bits = $w * 11; - - if($size & 1) { - $bits += 6; - } - - return $bits; - } - - //---------------------------------------------------------------------- - public static function estimateBitsMode8($size) - { - return $size * 8; - } - - //---------------------------------------------------------------------- - public function estimateBitsModeKanji($size) - { - return (int)(($size / 2) * 13); - } - - //---------------------------------------------------------------------- - public static function checkModeKanji($size, $data) - { - if($size & 1) - return false; - - for($i=0; $i<$size; $i+=2) { - $val = (ord($data[$i]) << 8) | ord($data[$i+1]); - if( $val < 0x8140 - || ($val > 0x9ffc && $val < 0xe040) - || $val > 0xebbf) { - return false; - } - } - - return true; - } - - /*********************************************************************** - * Validation - **********************************************************************/ - - public static function check($mode, $size, $data) - { - if($size <= 0) - return false; - - switch($mode) { - case QR_MODE_NUM: return self::checkModeNum($size, $data); break; - case QR_MODE_AN: return self::checkModeAn($size, $data); break; - case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; - case QR_MODE_8: return true; break; - case QR_MODE_STRUCTURE: return true; break; - - default: - break; - } - - return false; - } - - - //---------------------------------------------------------------------- - public function estimateBitStreamSize($version) - { - $bits = 0; - - foreach($this->items as $item) { - $bits += $item->estimateBitStreamSizeOfEntry($version); - } - - return $bits; - } - - //---------------------------------------------------------------------- - public function estimateVersion() - { - $version = 0; - $prev = 0; - do { - $prev = $version; - $bits = $this->estimateBitStreamSize($prev); - $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); - if ($version < 0) { - return -1; - } - } while ($version > $prev); - - return $version; - } - - //---------------------------------------------------------------------- - public static function lengthOfCode($mode, $version, $bits) - { - $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); - switch($mode) { - case QR_MODE_NUM: - $chunks = (int)($payload / 10); - $remain = $payload - $chunks * 10; - $size = $chunks * 3; - if($remain >= 7) { - $size += 2; - } else if($remain >= 4) { - $size += 1; - } - break; - case QR_MODE_AN: - $chunks = (int)($payload / 11); - $remain = $payload - $chunks * 11; - $size = $chunks * 2; - if($remain >= 6) - $size++; - break; - case QR_MODE_8: - $size = (int)($payload / 8); - break; - case QR_MODE_KANJI: - $size = (int)(($payload / 13) * 2); - break; - case QR_MODE_STRUCTURE: - $size = (int)($payload / 8); - break; - default: - $size = 0; - break; - } - - $maxsize = QRspec::maximumWords($mode, $version); - if($size < 0) $size = 0; - if($size > $maxsize) $size = $maxsize; - - return $size; - } - - //---------------------------------------------------------------------- - public function createBitStream() - { - $total = 0; - - foreach($this->items as $item) { - $bits = $item->encodeBitStream($this->version); - - if($bits < 0) - return -1; - - $total += $bits; - } - - return $total; - } - - //---------------------------------------------------------------------- - public function convertData() - { - $ver = $this->estimateVersion(); - if($ver > $this->getVersion()) { - $this->setVersion($ver); - } - - for(;;) { - $bits = $this->createBitStream(); - - if($bits < 0) - return -1; - - $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); - if($ver < 0) { - throw new Exception('WRONG VERSION'); - return -1; - } else if($ver > $this->getVersion()) { - $this->setVersion($ver); - } else { - break; - } - } - - return 0; - } - - //---------------------------------------------------------------------- - public function appendPaddingBit(&$bstream) - { - $bits = $bstream->size(); - $maxwords = QRspec::getDataLength($this->version, $this->level); - $maxbits = $maxwords * 8; - - if ($maxbits == $bits) { - return 0; - } - - if ($maxbits - $bits < 5) { - return $bstream->appendNum($maxbits - $bits, 0); - } - - $bits += 4; - $words = (int)(($bits + 7) / 8); - - $padding = new QRbitstream(); - $ret = $padding->appendNum($words * 8 - $bits + 4, 0); - - if($ret < 0) - return $ret; - - $padlen = $maxwords - $words; - - if($padlen > 0) { - - $padbuf = array(); - for($i=0; $i<$padlen; $i++) { - $padbuf[$i] = ($i&1)?0x11:0xec; - } - - $ret = $padding->appendBytes($padlen, $padbuf); - - if($ret < 0) - return $ret; - - } - - $ret = $bstream->append($padding); - - return $ret; - } - - //---------------------------------------------------------------------- - public function mergeBitStream() - { - if($this->convertData() < 0) { - return null; - } - - $bstream = new QRbitstream(); - - foreach($this->items as $item) { - $ret = $bstream->append($item->bstream); - if($ret < 0) { - return null; - } - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function getBitStream() - { - - $bstream = $this->mergeBitStream(); - - if($bstream == null) { - return null; - } - - $ret = $this->appendPaddingBit($bstream); - if($ret < 0) { - return null; - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function getByteStream() - { - $bstream = $this->getBitStream(); - if($bstream == null) { - return null; - } - - return $bstream->toByte(); - } - } - - - - - - -//---- qrbitstream.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Bitstream class - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRbitstream { - - public $data = array(); - - //---------------------------------------------------------------------- - public function size() - { - return count($this->data); - } - - //---------------------------------------------------------------------- - public function allocate($setLength) - { - $this->data = array_fill(0, $setLength, 0); - return 0; - } - - //---------------------------------------------------------------------- - public static function newFromNum($bits, $num) - { - $bstream = new QRbitstream(); - $bstream->allocate($bits); - - $mask = 1 << ($bits - 1); - for($i=0; $i<$bits; $i++) { - if($num & $mask) { - $bstream->data[$i] = 1; - } else { - $bstream->data[$i] = 0; - } - $mask = $mask >> 1; - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public static function newFromBytes($size, $data) - { - $bstream = new QRbitstream(); - $bstream->allocate($size * 8); - $p=0; - - for($i=0; $i<$size; $i++) { - $mask = 0x80; - for($j=0; $j<8; $j++) { - if($data[$i] & $mask) { - $bstream->data[$p] = 1; - } else { - $bstream->data[$p] = 0; - } - $p++; - $mask = $mask >> 1; - } - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function append(QRbitstream $arg) - { - if (is_null($arg)) { - return -1; - } - - if($arg->size() == 0) { - return 0; - } - - if($this->size() == 0) { - $this->data = $arg->data; - return 0; - } - - $this->data = array_values(array_merge($this->data, $arg->data)); - - return 0; - } - - //---------------------------------------------------------------------- - public function appendNum($bits, $num) - { - if ($bits == 0) - return 0; - - $b = QRbitstream::newFromNum($bits, $num); - - if(is_null($b)) - return -1; - - $ret = $this->append($b); - unset($b); - - return $ret; - } - - //---------------------------------------------------------------------- - public function appendBytes($size, $data) - { - if ($size == 0) - return 0; - - $b = QRbitstream::newFromBytes($size, $data); - - if(is_null($b)) - return -1; - - $ret = $this->append($b); - unset($b); - - return $ret; - } - - //---------------------------------------------------------------------- - public function toByte() - { - - $size = $this->size(); - - if($size == 0) { - return array(); - } - - $data = array_fill(0, (int)(($size + 7) / 8), 0); - $bytes = (int)($size / 8); - - $p = 0; - - for($i=0; $i<$bytes; $i++) { - $v = 0; - for($j=0; $j<8; $j++) { - $v = $v << 1; - $v |= $this->data[$p]; - $p++; - } - $data[$i] = $v; - } - - if($size & 7) { - $v = 0; - for($j=0; $j<($size & 7); $j++) { - $v = $v << 1; - $v |= $this->data[$p]; - $p++; - } - $data[$bytes] = $v; - } - - return $data; - } - - } - - - - -//---- qrsplit.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Input splitting classes - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * The following data / specifications are taken from - * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) - * or - * "Automatic identification and data capture techniques -- - * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - class QRsplit { - - public $dataStr = ''; - public $input; - public $modeHint; - - //---------------------------------------------------------------------- - public function __construct($dataStr, $input, $modeHint) - { - $this->dataStr = $dataStr; - $this->input = $input; - $this->modeHint = $modeHint; - } - - //---------------------------------------------------------------------- - public static function isdigitat($str, $pos) - { - if ($pos >= strlen($str)) - return false; - - return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); - } - - //---------------------------------------------------------------------- - public static function isalnumat($str, $pos) - { - if ($pos >= strlen($str)) - return false; - - return (QRinput::lookAnTable(ord($str[$pos])) >= 0); - } - - //---------------------------------------------------------------------- - public function identifyMode($pos) - { - if ($pos >= strlen($this->dataStr)) - return QR_MODE_NUL; - - $c = $this->dataStr[$pos]; - - if(self::isdigitat($this->dataStr, $pos)) { - return QR_MODE_NUM; - } else if(self::isalnumat($this->dataStr, $pos)) { - return QR_MODE_AN; - } else if($this->modeHint == QR_MODE_KANJI) { - - if ($pos+1 < strlen($this->dataStr)) - { - $d = $this->dataStr[$pos+1]; - $word = (ord($c) << 8) | ord($d); - if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { - return QR_MODE_KANJI; - } - } - } - - return QR_MODE_8; - } - - //---------------------------------------------------------------------- - public function eatNum() - { - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 0; - while(self::isdigitat($this->dataStr, $p)) { - $p++; - } - - $run = $p; - $mode = $this->identifyMode($p); - - if($mode == QR_MODE_8) { - $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln - + QRinput::estimateBitsMode8(1) // + 4 + l8 - - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 - if($dif > 0) { - return $this->eat8(); - } - } - if($mode == QR_MODE_AN) { - $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln - + QRinput::estimateBitsModeAn(1) // + 4 + la - - QRinput::estimateBitsModeAn($run + 1);// - 4 - la - if($dif > 0) { - return $this->eatAn(); - } - } - - $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function eatAn() - { - $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 0; - - while(self::isalnumat($this->dataStr, $p)) { - if(self::isdigitat($this->dataStr, $p)) { - $q = $p; - while(self::isdigitat($this->dataStr, $q)) { - $q++; - } - - $dif = QRinput::estimateBitsModeAn($p) // + 4 + la - + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln - - QRinput::estimateBitsModeAn($q); // - 4 - la - - if($dif < 0) { - break; - } else { - $p = $q; - } - } else { - $p++; - } - } - - $run = $p; - - if(!self::isalnumat($this->dataStr, $p)) { - $dif = QRinput::estimateBitsModeAn($run) + 4 + $la - + QRinput::estimateBitsMode8(1) // + 4 + l8 - - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 - if($dif > 0) { - return $this->eat8(); - } - } - - $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function eatKanji() - { - $p = 0; - - while($this->identifyMode($p) == QR_MODE_KANJI) { - $p += 2; - } - - $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function eat8() - { - $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 1; - $dataStrLen = strlen($this->dataStr); - - while($p < $dataStrLen) { - - $mode = $this->identifyMode($p); - if($mode == QR_MODE_KANJI) { - break; - } - if($mode == QR_MODE_NUM) { - $q = $p; - while(self::isdigitat($this->dataStr, $q)) { - $q++; - } - $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 - + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln - - QRinput::estimateBitsMode8($q); // - 4 - l8 - if($dif < 0) { - break; - } else { - $p = $q; - } - } else if($mode == QR_MODE_AN) { - $q = $p; - while(self::isalnumat($this->dataStr, $q)) { - $q++; - } - $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 - + QRinput::estimateBitsModeAn($q - $p) + 4 + $la - - QRinput::estimateBitsMode8($q); // - 4 - l8 - if($dif < 0) { - break; - } else { - $p = $q; - } - } else { - $p++; - } - } - - $run = $p; - $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); - - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function splitString() - { - while (strlen($this->dataStr) > 0) - { - if($this->dataStr == '') - return 0; - - $mode = $this->identifyMode(0); - - switch ($mode) { - case QR_MODE_NUM: $length = $this->eatNum(); break; - case QR_MODE_AN: $length = $this->eatAn(); break; - case QR_MODE_KANJI: - if ($hint == QR_MODE_KANJI) - $length = $this->eatKanji(); - else $length = $this->eat8(); - break; - default: $length = $this->eat8(); break; - - } - - if($length == 0) return 0; - if($length < 0) return -1; - - $this->dataStr = substr($this->dataStr, $length); - } - } - - //---------------------------------------------------------------------- - public function toUpper() - { - $stringLen = strlen($this->dataStr); - $p = 0; - - while ($p<$stringLen) { - $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); - if($mode == QR_MODE_KANJI) { - $p += 2; - } else { - if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { - $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); - } - $p++; - } - } - - return $this->dataStr; - } - - //---------------------------------------------------------------------- - public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) - { - if(is_null($string) || $string == '\0' || $string == '') { - throw new Exception('empty string!!!'); - } - - $split = new QRsplit($string, $input, $modeHint); - - if(!$casesensitive) - $split->toUpper(); - - return $split->splitString(); - } - } - - - -//---- qrrscode.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Reed-Solomon error correction support - * - * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q - * (libfec is released under the GNU Lesser General Public License.) - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRrsItem { - - public $mm; // Bits per symbol - public $nn; // Symbols per block (= (1<= $this->nn) { - $x -= $this->nn; - $x = ($x >> $this->mm) + ($x & $this->nn); - } - - return $x; - } - - //---------------------------------------------------------------------- - public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) - { - // Common code for intializing a Reed-Solomon control block (char or int symbols) - // Copyright 2004 Phil Karn, KA9Q - // May be used under the terms of the GNU Lesser General Public License (LGPL) - - $rs = null; - - // Check parameter ranges - if($symsize < 0 || $symsize > 8) return $rs; - if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; - if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; - if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! - if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding - - $rs = new QRrsItem(); - $rs->mm = $symsize; - $rs->nn = (1<<$symsize)-1; - $rs->pad = $pad; - - $rs->alpha_to = array_fill(0, $rs->nn+1, 0); - $rs->index_of = array_fill(0, $rs->nn+1, 0); - - // PHP style macro replacement ;) - $NN =& $rs->nn; - $A0 =& $NN; - - // Generate Galois field lookup tables - $rs->index_of[0] = $A0; // log(zero) = -inf - $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 - $sr = 1; - - for($i=0; $i<$rs->nn; $i++) { - $rs->index_of[$sr] = $i; - $rs->alpha_to[$i] = $sr; - $sr <<= 1; - if($sr & (1<<$symsize)) { - $sr ^= $gfpoly; - } - $sr &= $rs->nn; - } - - if($sr != 1){ - // field generator polynomial is not primitive! - $rs = NULL; - return $rs; - } - - /* Form RS code generator polynomial from its roots */ - $rs->genpoly = array_fill(0, $nroots+1, 0); - - $rs->fcr = $fcr; - $rs->prim = $prim; - $rs->nroots = $nroots; - $rs->gfpoly = $gfpoly; - - /* Find prim-th root of 1, used in decoding */ - for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) - ; // intentional empty-body loop! - - $rs->iprim = (int)($iprim / $prim); - $rs->genpoly[0] = 1; - - for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { - $rs->genpoly[$i+1] = 1; - - // Multiply rs->genpoly[] by @**(root + x) - for ($j = $i; $j > 0; $j--) { - if ($rs->genpoly[$j] != 0) { - $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; - } else { - $rs->genpoly[$j] = $rs->genpoly[$j-1]; - } - } - // rs->genpoly[0] can never be zero - $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; - } - - // convert rs->genpoly[] to index form for quicker encoding - for ($i = 0; $i <= $nroots; $i++) - $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; - - return $rs; - } - - //---------------------------------------------------------------------- - public function encode_rs_char($data, &$parity) - { - $MM =& $this->mm; - $NN =& $this->nn; - $ALPHA_TO =& $this->alpha_to; - $INDEX_OF =& $this->index_of; - $GENPOLY =& $this->genpoly; - $NROOTS =& $this->nroots; - $FCR =& $this->fcr; - $PRIM =& $this->prim; - $IPRIM =& $this->iprim; - $PAD =& $this->pad; - $A0 =& $NN; - - $parity = array_fill(0, $NROOTS, 0); - - for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { - - $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; - if($feedback != $A0) { - // feedback term is non-zero - - // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must - // always be for the polynomials constructed by init_rs() - $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); - - for($j=1;$j<$NROOTS;$j++) { - $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; - } - } - - // Shift - array_shift($parity); - if($feedback != $A0) { - array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); - } else { - array_push($parity, 0); - } - } - } - } - - //########################################################################## - - class QRrs { - - public static $items = array(); - - //---------------------------------------------------------------------- - public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) - { - foreach(self::$items as $rs) { - if($rs->pad != $pad) continue; - if($rs->nroots != $nroots) continue; - if($rs->mm != $symsize) continue; - if($rs->gfpoly != $gfpoly) continue; - if($rs->fcr != $fcr) continue; - if($rs->prim != $prim) continue; - - return $rs; - } - - $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); - array_unshift(self::$items, $rs); - - return $rs; - } - } - - - -//---- qrmask.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Masking - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('N1', 3); - define('N2', 3); - define('N3', 40); - define('N4', 10); - - class QRmask { - - public $runLength = array(); - - //---------------------------------------------------------------------- - public function __construct() - { - $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); - } - - //---------------------------------------------------------------------- - public function writeFormatInformation($width, &$frame, $mask, $level) - { - $blacks = 0; - $format = QRspec::getFormatInfo($mask, $level); - - for($i=0; $i<8; $i++) { - if($format & 1) { - $blacks += 2; - $v = 0x85; - } else { - $v = 0x84; - } - - $frame[8][$width - 1 - $i] = chr($v); - if($i < 6) { - $frame[$i][8] = chr($v); - } else { - $frame[$i + 1][8] = chr($v); - } - $format = $format >> 1; - } - - for($i=0; $i<7; $i++) { - if($format & 1) { - $blacks += 2; - $v = 0x85; - } else { - $v = 0x84; - } - - $frame[$width - 7 + $i][8] = chr($v); - if($i == 0) { - $frame[8][7] = chr($v); - } else { - $frame[8][6 - $i] = chr($v); - } - - $format = $format >> 1; - } - - return $blacks; - } - - //---------------------------------------------------------------------- - public function mask0($x, $y) { return ($x+$y)&1; } - public function mask1($x, $y) { return ($y&1); } - public function mask2($x, $y) { return ($x%3); } - public function mask3($x, $y) { return ($x+$y)%3; } - public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } - public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } - public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } - public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } - - //---------------------------------------------------------------------- - private function generateMaskNo($maskNo, $width, $frame) - { - $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); - - for($y=0; $y<$width; $y++) { - for($x=0; $x<$width; $x++) { - if(ord($frame[$y][$x]) & 0x80) { - $bitMask[$y][$x] = 0; - } else { - $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); - $bitMask[$y][$x] = ($maskFunc == 0)?1:0; - } - - } - } - - return $bitMask; - } - - //---------------------------------------------------------------------- - public static function serial($bitFrame) - { - $codeArr = array(); - - foreach ($bitFrame as $line) - $codeArr[] = join('', $line); - - return gzcompress(join("\n", $codeArr), 9); - } - - //---------------------------------------------------------------------- - public static function unserial($code) - { - $codeArr = array(); - - $codeLines = explode("\n", gzuncompress($code)); - foreach ($codeLines as $line) - $codeArr[] = str_split($line); - - return $codeArr; - } - - //---------------------------------------------------------------------- - public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) - { - $b = 0; - $bitMask = array(); - - $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; - - if (QR_CACHEABLE) { - if (file_exists($fileName)) { - $bitMask = self::unserial(file_get_contents($fileName)); - } else { - $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); - if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) - mkdir(QR_CACHE_DIR.'mask_'.$maskNo); - file_put_contents($fileName, self::serial($bitMask)); - } - } else { - $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); - } - - if ($maskGenOnly) - return; - - $d = $s; - - for($y=0; $y<$width; $y++) { - for($x=0; $x<$width; $x++) { - if($bitMask[$y][$x] == 1) { - $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); - } - $b += (int)(ord($d[$y][$x]) & 1); - } - } - - return $b; - } - - //---------------------------------------------------------------------- - public function makeMask($width, $frame, $maskNo, $level) - { - $masked = array_fill(0, $width, str_repeat("\0", $width)); - $this->makeMaskNo($maskNo, $width, $frame, $masked); - $this->writeFormatInformation($width, $masked, $maskNo, $level); - - return $masked; - } - - //---------------------------------------------------------------------- - public function calcN1N3($length) - { - $demerit = 0; - - for($i=0; $i<$length; $i++) { - - if($this->runLength[$i] >= 5) { - $demerit += (N1 + ($this->runLength[$i] - 5)); - } - if($i & 1) { - if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { - $fact = (int)($this->runLength[$i] / 3); - if(($this->runLength[$i-2] == $fact) && - ($this->runLength[$i-1] == $fact) && - ($this->runLength[$i+1] == $fact) && - ($this->runLength[$i+2] == $fact)) { - if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { - $demerit += N3; - } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { - $demerit += N3; - } - } - } - } - } - return $demerit; - } - - //---------------------------------------------------------------------- - public function evaluateSymbol($width, $frame) - { - $head = 0; - $demerit = 0; - - for($y=0; $y<$width; $y++) { - $head = 0; - $this->runLength[0] = 1; - - $frameY = $frame[$y]; - - if ($y>0) - $frameYM = $frame[$y-1]; - - for($x=0; $x<$width; $x++) { - if(($x > 0) && ($y > 0)) { - $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); - $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); - - if(($b22 | ($w22 ^ 1))&1) { - $demerit += N2; - } - } - if(($x == 0) && (ord($frameY[$x]) & 1)) { - $this->runLength[0] = -1; - $head = 1; - $this->runLength[$head] = 1; - } else if($x > 0) { - if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { - $head++; - $this->runLength[$head] = 1; - } else { - $this->runLength[$head]++; - } - } - } - - $demerit += $this->calcN1N3($head+1); - } - - for($x=0; $x<$width; $x++) { - $head = 0; - $this->runLength[0] = 1; - - for($y=0; $y<$width; $y++) { - if($y == 0 && (ord($frame[$y][$x]) & 1)) { - $this->runLength[0] = -1; - $head = 1; - $this->runLength[$head] = 1; - } else if($y > 0) { - if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { - $head++; - $this->runLength[$head] = 1; - } else { - $this->runLength[$head]++; - } - } - } - - $demerit += $this->calcN1N3($head+1); - } - - return $demerit; - } - - - //---------------------------------------------------------------------- - public function mask($width, $frame, $level) - { - $minDemerit = PHP_INT_MAX; - $bestMaskNum = 0; - $bestMask = array(); - - $checked_masks = array(0,1,2,3,4,5,6,7); - - if (QR_FIND_FROM_RANDOM !== false) { - - $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); - for ($i = 0; $i < $howManuOut; $i++) { - $remPos = rand (0, count($checked_masks)-1); - unset($checked_masks[$remPos]); - $checked_masks = array_values($checked_masks); - } - - } - - $bestMask = $frame; - - foreach($checked_masks as $i) { - $mask = array_fill(0, $width, str_repeat("\0", $width)); - - $demerit = 0; - $blacks = 0; - $blacks = $this->makeMaskNo($i, $width, $frame, $mask); - $blacks += $this->writeFormatInformation($width, $mask, $i, $level); - $blacks = (int)(100 * $blacks / ($width * $width)); - $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); - $demerit += $this->evaluateSymbol($width, $mask); - - if($demerit < $minDemerit) { - $minDemerit = $demerit; - $bestMask = $mask; - $bestMaskNum = $i; - } - } - - return $bestMask; - } - - //---------------------------------------------------------------------- - } - - - - -//---- qrencode.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Main encoder classes. - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRrsblock { - public $dataLength; - public $data = array(); - public $eccLength; - public $ecc = array(); - - public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) - { - $rs->encode_rs_char($data, $ecc); - - $this->dataLength = $dl; - $this->data = $data; - $this->eccLength = $el; - $this->ecc = $ecc; - } - }; - - //########################################################################## - - class QRrawcode { - public $version; - public $datacode = array(); - public $ecccode = array(); - public $blocks; - public $rsblocks = array(); //of RSblock - public $count; - public $dataLength; - public $eccLength; - public $b1; - - //---------------------------------------------------------------------- - public function __construct(QRinput $input) - { - $spec = array(0,0,0,0,0); - - $this->datacode = $input->getByteStream(); - if(is_null($this->datacode)) { - throw new Exception('null imput string'); - } - - QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); - - $this->version = $input->getVersion(); - $this->b1 = QRspec::rsBlockNum1($spec); - $this->dataLength = QRspec::rsDataLength($spec); - $this->eccLength = QRspec::rsEccLength($spec); - $this->ecccode = array_fill(0, $this->eccLength, 0); - $this->blocks = QRspec::rsBlockNum($spec); - - $ret = $this->init($spec); - if($ret < 0) { - throw new Exception('block alloc error'); - return null; - } - - $this->count = 0; - } - - //---------------------------------------------------------------------- - public function init(array $spec) - { - $dl = QRspec::rsDataCodes1($spec); - $el = QRspec::rsEccCodes1($spec); - $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - - - $blockNo = 0; - $dataPos = 0; - $eccPos = 0; - for($i=0; $iecccode,$eccPos); - $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - - if(QRspec::rsBlockNum2($spec) == 0) - return 0; - - $dl = QRspec::rsDataCodes2($spec); - $el = QRspec::rsEccCodes2($spec); - $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - - if($rs == NULL) return -1; - - for($i=0; $iecccode,$eccPos); - $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - - return 0; - } - - //---------------------------------------------------------------------- - public function getCode() - { - $ret; - - if($this->count < $this->dataLength) { - $row = $this->count % $this->blocks; - $col = $this->count / $this->blocks; - if($col >= $this->rsblocks[0]->dataLength) { - $row += $this->b1; - } - $ret = $this->rsblocks[$row]->data[$col]; - } else if($this->count < $this->dataLength + $this->eccLength) { - $row = ($this->count - $this->dataLength) % $this->blocks; - $col = ($this->count - $this->dataLength) / $this->blocks; - $ret = $this->rsblocks[$row]->ecc[$col]; - } else { - return 0; - } - $this->count++; - - return $ret; - } - } - - //########################################################################## - - class QRcode { - - public $version; - public $width; - public $data; - - //---------------------------------------------------------------------- - public function encodeMask(QRinput $input, $mask) - { - if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { - throw new Exception('wrong version'); - } - if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { - throw new Exception('wrong level'); - } - - $raw = new QRrawcode($input); - - QRtools::markTime('after_raw'); - - $version = $raw->version; - $width = QRspec::getWidth($version); - $frame = QRspec::newFrame($version); - - $filler = new FrameFiller($width, $frame); - if(is_null($filler)) { - return NULL; - } - - // inteleaved data and ecc codes - for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { - $code = $raw->getCode(); - $bit = 0x80; - for($j=0; $j<8; $j++) { - $addr = $filler->next(); - $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); - $bit = $bit >> 1; - } - } - - QRtools::markTime('after_filler'); - - unset($raw); - - // remainder bits - $j = QRspec::getRemainder($version); - for($i=0; $i<$j; $i++) { - $addr = $filler->next(); - $filler->setFrameAt($addr, 0x02); - } - - $frame = $filler->frame; - unset($filler); - - - // masking - $maskObj = new QRmask(); - if($mask < 0) { - - if (QR_FIND_BEST_MASK) { - $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); - } else { - $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); - } - } else { - $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); - } - - if($masked == NULL) { - return NULL; - } - - QRtools::markTime('after_mask'); - - $this->version = $version; - $this->width = $width; - $this->data = $masked; - - return $this; - } - - //---------------------------------------------------------------------- - public function encodeInput(QRinput $input) - { - return $this->encodeMask($input, -1); - } - - //---------------------------------------------------------------------- - public function encodeString8bit($string, $version, $level) - { - if(string == NULL) { - throw new Exception('empty string!'); - return NULL; - } - - $input = new QRinput($version, $level); - if($input == NULL) return NULL; - - $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); - if($ret < 0) { - unset($input); - return NULL; - } - return $this->encodeInput($input); - } - - //---------------------------------------------------------------------- - public function encodeString($string, $version, $level, $hint, $casesensitive) - { - - if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { - throw new Exception('bad hint'); - return NULL; - } - - $input = new QRinput($version, $level); - if($input == NULL) return NULL; - - $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); - if($ret < 0) { - return NULL; - } - - return $this->encodeInput($input); - } - - //---------------------------------------------------------------------- - public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encodePNG($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encode($text, $outfile); - } - - //---------------------------------------------------------------------- - public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encodeRAW($text, $outfile); - } - } - - //########################################################################## - - class FrameFiller { - - public $width; - public $frame; - public $x; - public $y; - public $dir; - public $bit; - - //---------------------------------------------------------------------- - public function __construct($width, &$frame) - { - $this->width = $width; - $this->frame = $frame; - $this->x = $width - 1; - $this->y = $width - 1; - $this->dir = -1; - $this->bit = -1; - } - - //---------------------------------------------------------------------- - public function setFrameAt($at, $val) - { - $this->frame[$at['y']][$at['x']] = chr($val); - } - - //---------------------------------------------------------------------- - public function getFrameAt($at) - { - return ord($this->frame[$at['y']][$at['x']]); - } - - //---------------------------------------------------------------------- - public function next() - { - do { - - if($this->bit == -1) { - $this->bit = 0; - return array('x'=>$this->x, 'y'=>$this->y); - } - - $x = $this->x; - $y = $this->y; - $w = $this->width; - - if($this->bit == 0) { - $x--; - $this->bit++; - } else { - $x++; - $y += $this->dir; - $this->bit--; - } - - if($this->dir < 0) { - if($y < 0) { - $y = 0; - $x -= 2; - $this->dir = 1; - if($x == 6) { - $x--; - $y = 9; - } - } - } else { - if($y == $w) { - $y = $w - 1; - $x -= 2; - $this->dir = -1; - if($x == 6) { - $x--; - $y -= 8; - } - } - } - if($x < 0 || $y < 0) return null; - - $this->x = $x; - $this->y = $y; - - } while(ord($this->frame[$y][$x]) & 0x80); - - return array('x'=>$x, 'y'=>$y); - } - - } ; - - //########################################################################## - - class QRencode { - - public $casesensitive = true; - public $eightbit = false; - - public $version = 0; - public $size = 3; - public $margin = 4; - - public $structured = 0; // not supported yet - - public $level = QR_ECLEVEL_L; - public $hint = QR_MODE_8; - - //---------------------------------------------------------------------- - public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = new QRencode(); - $enc->size = $size; - $enc->margin = $margin; - - switch ($level.'') { - case '0': - case '1': - case '2': - case '3': - $enc->level = $level; - break; - case 'l': - case 'L': - $enc->level = QR_ECLEVEL_L; - break; - case 'm': - case 'M': - $enc->level = QR_ECLEVEL_M; - break; - case 'q': - case 'Q': - $enc->level = QR_ECLEVEL_Q; - break; - case 'h': - case 'H': - $enc->level = QR_ECLEVEL_H; - break; - } - - return $enc; - } - - //---------------------------------------------------------------------- - public function encodeRAW($intext, $outfile = false) - { - $code = new QRcode(); - - if($this->eightbit) { - $code->encodeString8bit($intext, $this->version, $this->level); - } else { - $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); - } - - return $code->data; - } - - //---------------------------------------------------------------------- - public function encode($intext, $outfile = false) - { - $code = new QRcode(); - - if($this->eightbit) { - $code->encodeString8bit($intext, $this->version, $this->level); - } else { - $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); - } - - QRtools::markTime('after_encode'); - - if ($outfile!== false) { - file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); - } else { - return QRtools::binarize($code->data); - } - } - - //---------------------------------------------------------------------- - public function encodePNG($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - } - - From b84105c59dcf949c3cd3e3a091855c4e17ccdfce Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Thu, 25 Dec 2014 10:46:24 +0800 Subject: [PATCH 011/128] Update readme.md --- php/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/php/readme.md b/php/readme.md index e30bf97..7f73305 100644 --- a/php/readme.md +++ b/php/readme.md @@ -1,6 +1,6 @@ ckeditor_demo -- 在线编辑器的demo
excel_demo -- php操作excel-demo(导出excel和读取excel)
email_demo -- php发送email-demo
-jiathis_demo -- JS的jiathis分享插件
-qrcode_demo -- php二维码生成插件
+jiathis_demo -- js的jiathis分享插件demo
+qrcode_demo -- php二维码生成插件demo
common_function.php -- 公共函数汇总
From 9d299952427baf2f791fd5c8abffde377dd0c72b Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Thu, 25 Dec 2014 10:51:11 +0800 Subject: [PATCH 012/128] =?UTF-8?q?php=E4=BA=8C=E7=BB=B4=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- php/qrcode_demo/img/123456.png | Bin 0 -> 363 bytes php/qrcode_demo/index.php | 21 + php/qrcode_demo/library/phpqrcode.php | 3312 +++++++++++++++++++++++++ 3 files changed, 3333 insertions(+) create mode 100755 php/qrcode_demo/img/123456.png create mode 100755 php/qrcode_demo/index.php create mode 100755 php/qrcode_demo/library/phpqrcode.php diff --git a/php/qrcode_demo/img/123456.png b/php/qrcode_demo/img/123456.png new file mode 100755 index 0000000000000000000000000000000000000000..d36e0244a5e39871b1cd6d524c25c446dcd4eac2 GIT binary patch literal 363 zcmV-x0hIoUP))F~mR54kCa1Q5#fsA2NLD;52b59@jzFewS`-uS}Y?UZvA|(Yzv>uTUHh_Z?~( z&%LP{1TtpL4;?gakv{7}@to_2KXe7EB zWGvC5;Zh7B+!T7tSm&d_EE;VJr%=bzJ++iYG3hut2sVt$(M=X@vYEu{tLMyO8@qQb_3e>?UE#Qv^W3&002ov JPDHLkV1k?xrFZ}U literal 0 HcmV?d00001 diff --git a/php/qrcode_demo/index.php b/php/qrcode_demo/index.php new file mode 100755 index 0000000..0fdc064 --- /dev/null +++ b/php/qrcode_demo/index.php @@ -0,0 +1,21 @@ +'; +echo $str; diff --git a/php/qrcode_demo/library/phpqrcode.php b/php/qrcode_demo/library/phpqrcode.php new file mode 100755 index 0000000..80adb9d --- /dev/null +++ b/php/qrcode_demo/library/phpqrcode.php @@ -0,0 +1,3312 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* + * Version: 1.1.4 + * Build: 2010100721 + */ + + + +//---- qrconst.php ----------------------------- + + + + + +/* + * PHP QR Code encoder + * + * Common constants + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + define('QR_MODE_NUL', -1); + define('QR_MODE_NUM', 0); + define('QR_MODE_AN', 1); + define('QR_MODE_8', 2); + define('QR_MODE_KANJI', 3); + define('QR_MODE_STRUCTURE', 4); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function set(&$srctab, $x, $y, $repl, $replLen = false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + } + } + + + +//---- merged_config.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Config file, tuned-up for merged verion + */ + + define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there + define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true + define('QR_LOG_DIR', false); // default error logs dir + + define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false + + define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images + + + + +//---- qrtools.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Toolset, handy and debug utilites. + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + + + + +//---- qrspec.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * QR Code specifications + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QRSPEC_VERSION_MAX', 40); + define('QRSPEC_WIDTH_MAX', 177); + + define('QRCAP_WIDTH', 0); + define('QRCAP_WORDS', 1); + define('QRCAP_REMINDER', 2); + define('QRCAP_EC', 3); + + class QRspec { + + public static $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), + array( 29, 70, 7, array( 15, 26, 36, 44)), + array( 33, 100, 7, array( 20, 36, 52, 64)), + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), + array( 45, 196, 0, array( 40, 72, 108, 130)), + array( 49, 242, 0, array( 48, 88, 132, 156)), + array( 53, 292, 0, array( 60, 110, 160, 192)), + array( 57, 346, 0, array( 72, 130, 192, 224)), //10 + array( 61, 404, 0, array( 80, 150, 224, 264)), + array( 65, 466, 0, array( 96, 176, 260, 308)), + array( 69, 532, 0, array( 104, 198, 288, 352)), + array( 73, 581, 3, array( 120, 216, 320, 384)), + array( 77, 655, 3, array( 132, 240, 360, 432)), //15 + array( 81, 733, 3, array( 144, 280, 408, 480)), + array( 85, 815, 3, array( 168, 308, 448, 532)), + array( 89, 901, 3, array( 180, 338, 504, 588)), + array( 93, 991, 3, array( 196, 364, 546, 650)), + array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 + array(101, 1156, 4, array( 224, 442, 644, 750)), + array(105, 1258, 4, array( 252, 476, 690, 816)), + array(109, 1364, 4, array( 270, 504, 750, 900)), + array(113, 1474, 4, array( 300, 560, 810, 960)), + array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), + array(125, 1828, 4, array( 360, 700, 1020, 1200)), + array(129, 1921, 3, array( 390, 728, 1050, 1260)), + array(133, 2051, 3, array( 420, 784, 1140, 1350)), + array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), + array(145, 2465, 3, array( 510, 924, 1350, 1620)), + array(149, 2611, 3, array( 540, 980, 1440, 1710)), + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function getMinimumVersion($size, $level) + { + + for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { + $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; + if($words >= $size) + return $i; + } + + return -1; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function getEccSpec($version, $level, array &$spec) + { + if (count($spec) < 5) { + $spec = array(0,0,0,0,0); + } + + $b1 = self::$eccTable[$version][$level][0]; + $b2 = self::$eccTable[$version][$level][1]; + $data = self::getDataLength($version, $level); + $ecc = self::getECCLength($version, $level); + + if($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); + } + + if($w * $w - 3 == 1) { + $x = self::$alignmentPattern[$version][0]; + $y = self::$alignmentPattern[$version][0]; + self::putAlignmentMarker($frame, $x, $y); + return; + } + + $cx = self::$alignmentPattern[$version][0]; + for($x=1; $x<$w - 1; $x++) { + self::putAlignmentMarker($frame, 6, $cx); + self::putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + + $cy = self::$alignmentPattern[$version][0]; + for($y=0; $y<$w-1; $y++) { + $cx = self::$alignmentPattern[$version][0]; + for($x=0; $x<$w-1; $x++) { + self::putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $yOffset = $width - 7; + + for($y=0; $y<7; $y++) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + $yOffset++; + } + + $setPattern = str_repeat("\xc0", 8); + + QRstr::set($frame, 0, 7, $setPattern); + QRstr::set($frame, $width-8, 7, $setPattern); + QRstr::set($frame, 0, $width - 8, $setPattern); + + // Format info + $setPattern = str_repeat("\x84", 9); + QRstr::set($frame, 0, 8, $setPattern); + QRstr::set($frame, $width - 8, 8, $setPattern, 8); + + $yOffset = $width - 8; + + for($y=0; $y<8; $y++,$yOffset++) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + + // Timing pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + if($version >= 7) { + $vinf = self::getVersionPattern($version); + + $v = $vinf; + + for($x=0; $x<6; $x++) { + for($y=0; $y<3; $y++) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + + $v = $vinf; + for($y=0; $y<6; $y++) { + for($x=0; $x<3; $x++) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


        '; + echo join("
        ", $frame); + echo '






'; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
", $frame); + echo "
"; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + if(!isset(self::$frames[$version])) { + + $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + self::$frames[$version] = self::unserial(file_get_contents($fileName)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } + + + +//---- qrimage.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + $col[0] = ImageColorAllocate($base_image,255,255,255); + $col[1] = ImageColorAllocate($base_image,0,0,0); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } + + + +//---- qrinput.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input encoding class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __construct($mode, $size, $data, $bstream = null) + { + $setData = array_slice($data, 0, $size); + + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); + } + + if(!QRinput::check($mode, $size, $setData)) { + throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $words = (int)($this->size / 3); + $bs = new QRbitstream(); + + $val = 0x1; + $bs->appendNum(4, $val); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; + $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; + $val += (ord($this->data[$i*3+2]) - ord('0')); + $bs->appendNum(10, $val); + } + + if($this->size - $words * 3 == 1) { + $val = ord($this->data[$words*3]) - ord('0'); + $bs->appendNum(4, $val); + } else if($this->size - $words * 3 == 2) { + $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; + $val += (ord($this->data[$words*3+1]) - ord('0')); + $bs->appendNum(7, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $words = (int)($this->size / 2); + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x02); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; + $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); + + $bs->appendNum(11, $val); + } + + if($this->size & 1) { + $val = QRinput::lookAnTable(ord($this->data[$words * 2])); + $bs->appendNum(6, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x4); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); + + for($i=0; $i<$this->size; $i++) { + $bs->appendNum(8, ord($this->data[$i])); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $bs = new QRbitrtream(); + + $bs->appendNum(4, 0x8); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); + + for($i=0; $i<$this->size; $i+=2) { + $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); + if($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x03); + $bs->appendNum(4, ord($this->data[1]) - 1); + $bs->appendNum(4, ord($this->data[0]) - 1); + $bs->appendNum(8, ord($this->data[2])); + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + unset($this->bstream); + $words = QRspec::maximumWords($this->mode, $version); + + if($this->size > $words) { + + $st1 = new QRinputItem($this->mode, $words, $this->data); + $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); + + $st1->encodeBitStream($version); + $st2->encodeBitStream($version); + + $this->bstream = new QRbitstream(); + $this->bstream->append($st1->bstream); + $this->bstream->append($st2->bstream); + + unset($st1); + unset($st2); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __construct($version = 0, $level = QR_ECLEVEL_L) + { + if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { + throw new Exception('Invalid version no'); + return NULL; + } + + $this->version = $version; + $this->level = $level; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 0; + + foreach($this->items as $item) { + if($item->mode != QR_MODE_STRUCTURE) { + for($i=$item->size-1; $i>=0; $i--) { + $parity ^= $item->data[$i]; + } + } + } + + return $parity; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function checkModeKanji($size, $data) + { + if($size & 1) + return false; + + for($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if( $val < 0x8140 + || ($val > 0x9ffc && $val < 0xe040) + || $val > 0xebbf) { + return false; + } + } + + return true; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($prev); + $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + + return $version; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + + + + +//---- qrbitstream.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Bitstream class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } + + + + +//---- qrsplit.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input splitting classes + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } + + + +//---- qrrscode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Reed-Solomon error correction support + * + * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + * (libfec is released under the GNU Lesser General Public License.) + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } + + + +//---- qrmask.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Masking + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } + + + + +//---- qrencode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Main encoder classes. + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } + + From c6890d80859a86ca9fee48b795b4b5057eb56acb Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Thu, 25 Dec 2014 10:59:57 +0800 Subject: [PATCH 013/128] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- php/jiathis_demo/details_page.html | 28 + php/jiathis_demo/list_page_one.html | 28 + php/jiathis_demo/list_page_two.html | 39 + php/qrcode_demo/img/123456.png | Bin 363 -> 0 bytes php/qrcode_demo/index.php | 21 - php/qrcode_demo/library/phpqrcode.php | 3312 ------------------------- 6 files changed, 95 insertions(+), 3333 deletions(-) create mode 100755 php/jiathis_demo/details_page.html create mode 100755 php/jiathis_demo/list_page_one.html create mode 100755 php/jiathis_demo/list_page_two.html delete mode 100755 php/qrcode_demo/img/123456.png delete mode 100755 php/qrcode_demo/index.php delete mode 100755 php/qrcode_demo/library/phpqrcode.php diff --git a/php/jiathis_demo/details_page.html b/php/jiathis_demo/details_page.html new file mode 100755 index 0000000..c6a7a7a --- /dev/null +++ b/php/jiathis_demo/details_page.html @@ -0,0 +1,28 @@ + + + +详情页底部分享jiathis + + + +
+ + + +
+ + + + + \ No newline at end of file diff --git a/php/jiathis_demo/list_page_one.html b/php/jiathis_demo/list_page_one.html new file mode 100755 index 0000000..fbbb0fd --- /dev/null +++ b/php/jiathis_demo/list_page_one.html @@ -0,0 +1,28 @@ + + + +单页面单组分享代码块 JIATHIS> + + + +
+分享 + +
+ + + + + + \ No newline at end of file diff --git a/php/jiathis_demo/list_page_two.html b/php/jiathis_demo/list_page_two.html new file mode 100755 index 0000000..afbc872 --- /dev/null +++ b/php/jiathis_demo/list_page_two.html @@ -0,0 +1,39 @@ + + + +单个页面添加多组分享代码块 JIATHIS + + +
+
+ 分享 + +
+
+ +
+
+ 分享 + +
+
+ + + + + \ No newline at end of file diff --git a/php/qrcode_demo/img/123456.png b/php/qrcode_demo/img/123456.png deleted file mode 100755 index d36e0244a5e39871b1cd6d524c25c446dcd4eac2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmV-x0hIoUP))F~mR54kCa1Q5#fsA2NLD;52b59@jzFewS`-uS}Y?UZvA|(Yzv>uTUHh_Z?~( z&%LP{1TtpL4;?gakv{7}@to_2KXe7EB zWGvC5;Zh7B+!T7tSm&d_EE;VJr%=bzJ++iYG3hut2sVt$(M=X@vYEu{tLMyO8@qQb_3e>?UE#Qv^W3&002ov JPDHLkV1k?xrFZ}U diff --git a/php/qrcode_demo/index.php b/php/qrcode_demo/index.php deleted file mode 100755 index 0fdc064..0000000 --- a/php/qrcode_demo/index.php +++ /dev/null @@ -1,21 +0,0 @@ -'; -echo $str; diff --git a/php/qrcode_demo/library/phpqrcode.php b/php/qrcode_demo/library/phpqrcode.php deleted file mode 100755 index 80adb9d..0000000 --- a/php/qrcode_demo/library/phpqrcode.php +++ /dev/null @@ -1,3312 +0,0 @@ - - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - - -/* - * Version: 1.1.4 - * Build: 2010100721 - */ - - - -//---- qrconst.php ----------------------------- - - - - - -/* - * PHP QR Code encoder - * - * Common constants - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - // Encoding modes - - define('QR_MODE_NUL', -1); - define('QR_MODE_NUM', 0); - define('QR_MODE_AN', 1); - define('QR_MODE_8', 2); - define('QR_MODE_KANJI', 3); - define('QR_MODE_STRUCTURE', 4); - - // Levels of error correction. - - define('QR_ECLEVEL_L', 0); - define('QR_ECLEVEL_M', 1); - define('QR_ECLEVEL_Q', 2); - define('QR_ECLEVEL_H', 3); - - // Supported output formats - - define('QR_FORMAT_TEXT', 0); - define('QR_FORMAT_PNG', 1); - - class qrstr { - public static function set(&$srctab, $x, $y, $repl, $replLen = false) { - $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); - } - } - - - -//---- merged_config.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Config file, tuned-up for merged verion - */ - - define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there - define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true - define('QR_LOG_DIR', false); // default error logs dir - - define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code - define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly - define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false - - define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images - - - - -//---- qrtools.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Toolset, handy and debug utilites. - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRtools { - - //---------------------------------------------------------------------- - public static function binarize($frame) - { - $len = count($frame); - foreach ($frame as &$frameLine) { - - for($i=0; $i<$len; $i++) { - $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; - } - } - - return $frame; - } - - //---------------------------------------------------------------------- - public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') - { - $barcode_array = array(); - - if (!is_array($mode)) - $mode = explode(',', $mode); - - $eccLevel = 'L'; - - if (count($mode) > 1) { - $eccLevel = $mode[1]; - } - - $qrTab = QRcode::text($code, false, $eccLevel); - $size = count($qrTab); - - $barcode_array['num_rows'] = $size; - $barcode_array['num_cols'] = $size; - $barcode_array['bcode'] = array(); - - foreach ($qrTab as $line) { - $arrAdd = array(); - foreach(str_split($line) as $char) - $arrAdd[] = ($char=='1')?1:0; - $barcode_array['bcode'][] = $arrAdd; - } - - return $barcode_array; - } - - //---------------------------------------------------------------------- - public static function clearCache() - { - self::$frames = array(); - } - - //---------------------------------------------------------------------- - public static function buildCache() - { - QRtools::markTime('before_build_cache'); - - $mask = new QRmask(); - for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { - $frame = QRspec::newFrame($a); - if (QR_IMAGE) { - $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; - QRimage::png(self::binarize($frame), $fileName, 1, 0); - } - - $width = count($frame); - $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); - for ($maskNo=0; $maskNo<8; $maskNo++) - $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); - } - - QRtools::markTime('after_build_cache'); - } - - //---------------------------------------------------------------------- - public static function log($outfile, $err) - { - if (QR_LOG_DIR !== false) { - if ($err != '') { - if ($outfile !== false) { - file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); - } else { - file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); - } - } - } - } - - //---------------------------------------------------------------------- - public static function dumpMask($frame) - { - $width = count($frame); - for($y=0;$y<$width;$y++) { - for($x=0;$x<$width;$x++) { - echo ord($frame[$y][$x]).','; - } - } - } - - //---------------------------------------------------------------------- - public static function markTime($markerId) - { - list($usec, $sec) = explode(" ", microtime()); - $time = ((float)$usec + (float)$sec); - - if (!isset($GLOBALS['qr_time_bench'])) - $GLOBALS['qr_time_bench'] = array(); - - $GLOBALS['qr_time_bench'][$markerId] = $time; - } - - //---------------------------------------------------------------------- - public static function timeBenchmark() - { - self::markTime('finish'); - - $lastTime = 0; - $startTime = 0; - $p = 0; - - echo ' - - '; - - foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { - if ($p > 0) { - echo ''; - } else { - $startTime = $thisTime; - } - - $p++; - $lastTime = $thisTime; - } - - echo ' - - -
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; - } - - } - - //########################################################################## - - QRtools::markTime('start'); - - - - -//---- qrspec.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * QR Code specifications - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * The following data / specifications are taken from - * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) - * or - * "Automatic identification and data capture techniques -- - * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QRSPEC_VERSION_MAX', 40); - define('QRSPEC_WIDTH_MAX', 177); - - define('QRCAP_WIDTH', 0); - define('QRCAP_WORDS', 1); - define('QRCAP_REMINDER', 2); - define('QRCAP_EC', 3); - - class QRspec { - - public static $capacity = array( - array( 0, 0, 0, array( 0, 0, 0, 0)), - array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 - array( 25, 44, 7, array( 10, 16, 22, 28)), - array( 29, 70, 7, array( 15, 26, 36, 44)), - array( 33, 100, 7, array( 20, 36, 52, 64)), - array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 - array( 41, 172, 7, array( 36, 64, 96, 112)), - array( 45, 196, 0, array( 40, 72, 108, 130)), - array( 49, 242, 0, array( 48, 88, 132, 156)), - array( 53, 292, 0, array( 60, 110, 160, 192)), - array( 57, 346, 0, array( 72, 130, 192, 224)), //10 - array( 61, 404, 0, array( 80, 150, 224, 264)), - array( 65, 466, 0, array( 96, 176, 260, 308)), - array( 69, 532, 0, array( 104, 198, 288, 352)), - array( 73, 581, 3, array( 120, 216, 320, 384)), - array( 77, 655, 3, array( 132, 240, 360, 432)), //15 - array( 81, 733, 3, array( 144, 280, 408, 480)), - array( 85, 815, 3, array( 168, 308, 448, 532)), - array( 89, 901, 3, array( 180, 338, 504, 588)), - array( 93, 991, 3, array( 196, 364, 546, 650)), - array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 - array(101, 1156, 4, array( 224, 442, 644, 750)), - array(105, 1258, 4, array( 252, 476, 690, 816)), - array(109, 1364, 4, array( 270, 504, 750, 900)), - array(113, 1474, 4, array( 300, 560, 810, 960)), - array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 - array(121, 1706, 4, array( 336, 644, 952, 1110)), - array(125, 1828, 4, array( 360, 700, 1020, 1200)), - array(129, 1921, 3, array( 390, 728, 1050, 1260)), - array(133, 2051, 3, array( 420, 784, 1140, 1350)), - array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 - array(141, 2323, 3, array( 480, 868, 1290, 1530)), - array(145, 2465, 3, array( 510, 924, 1350, 1620)), - array(149, 2611, 3, array( 540, 980, 1440, 1710)), - array(153, 2761, 3, array( 570, 1036, 1530, 1800)), - array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 - array(161, 3034, 0, array( 600, 1120, 1680, 1980)), - array(165, 3196, 0, array( 630, 1204, 1770, 2100)), - array(169, 3362, 0, array( 660, 1260, 1860, 2220)), - array(173, 3532, 0, array( 720, 1316, 1950, 2310)), - array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 - ); - - //---------------------------------------------------------------------- - public static function getDataLength($version, $level) - { - return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; - } - - //---------------------------------------------------------------------- - public static function getECCLength($version, $level) - { - return self::$capacity[$version][QRCAP_EC][$level]; - } - - //---------------------------------------------------------------------- - public static function getWidth($version) - { - return self::$capacity[$version][QRCAP_WIDTH]; - } - - //---------------------------------------------------------------------- - public static function getRemainder($version) - { - return self::$capacity[$version][QRCAP_REMINDER]; - } - - //---------------------------------------------------------------------- - public static function getMinimumVersion($size, $level) - { - - for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { - $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; - if($words >= $size) - return $i; - } - - return -1; - } - - //###################################################################### - - public static $lengthTableBits = array( - array(10, 12, 14), - array( 9, 11, 13), - array( 8, 16, 16), - array( 8, 10, 12) - ); - - //---------------------------------------------------------------------- - public static function lengthIndicator($mode, $version) - { - if ($mode == QR_MODE_STRUCTURE) - return 0; - - if ($version <= 9) { - $l = 0; - } else if ($version <= 26) { - $l = 1; - } else { - $l = 2; - } - - return self::$lengthTableBits[$mode][$l]; - } - - //---------------------------------------------------------------------- - public static function maximumWords($mode, $version) - { - if($mode == QR_MODE_STRUCTURE) - return 3; - - if($version <= 9) { - $l = 0; - } else if($version <= 26) { - $l = 1; - } else { - $l = 2; - } - - $bits = self::$lengthTableBits[$mode][$l]; - $words = (1 << $bits) - 1; - - if($mode == QR_MODE_KANJI) { - $words *= 2; // the number of bytes is required - } - - return $words; - } - - // Error correction code ----------------------------------------------- - // Table of the error correction code (Reed-Solomon block) - // See Table 12-16 (pp.30-36), JIS X0510:2004. - - public static $eccTable = array( - array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), - array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 - array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), - array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), - array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), - array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 - array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), - array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), - array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), - array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), - array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 - array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), - array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), - array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), - array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), - array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 - array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), - array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), - array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), - array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), - array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 - array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), - array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), - array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), - array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), - array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 - array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), - array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), - array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), - array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), - array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 - array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), - array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), - array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), - array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), - array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 - array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), - array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), - array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), - array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), - array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 - ); - - //---------------------------------------------------------------------- - // CACHEABLE!!! - - public static function getEccSpec($version, $level, array &$spec) - { - if (count($spec) < 5) { - $spec = array(0,0,0,0,0); - } - - $b1 = self::$eccTable[$version][$level][0]; - $b2 = self::$eccTable[$version][$level][1]; - $data = self::getDataLength($version, $level); - $ecc = self::getECCLength($version, $level); - - if($b2 == 0) { - $spec[0] = $b1; - $spec[1] = (int)($data / $b1); - $spec[2] = (int)($ecc / $b1); - $spec[3] = 0; - $spec[4] = 0; - } else { - $spec[0] = $b1; - $spec[1] = (int)($data / ($b1 + $b2)); - $spec[2] = (int)($ecc / ($b1 + $b2)); - $spec[3] = $b2; - $spec[4] = $spec[1] + 1; - } - } - - // Alignment pattern --------------------------------------------------- - - // Positions of alignment patterns. - // This array includes only the second and the third position of the - // alignment patterns. Rest of them can be calculated from the distance - // between them. - - // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. - - public static $alignmentPattern = array( - array( 0, 0), - array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 - array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 - array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 - array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 - array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 - array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 - array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 - array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 - ); - - - /** -------------------------------------------------------------------- - * Put an alignment marker. - * @param frame - * @param width - * @param ox,oy center coordinate of the pattern - */ - public static function putAlignmentMarker(array &$frame, $ox, $oy) - { - $finder = array( - "\xa1\xa1\xa1\xa1\xa1", - "\xa1\xa0\xa0\xa0\xa1", - "\xa1\xa0\xa1\xa0\xa1", - "\xa1\xa0\xa0\xa0\xa1", - "\xa1\xa1\xa1\xa1\xa1" - ); - - $yStart = $oy-2; - $xStart = $ox-2; - - for($y=0; $y<5; $y++) { - QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); - } - } - - //---------------------------------------------------------------------- - public static function putAlignmentPattern($version, &$frame, $width) - { - if($version < 2) - return; - - $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; - if($d < 0) { - $w = 2; - } else { - $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); - } - - if($w * $w - 3 == 1) { - $x = self::$alignmentPattern[$version][0]; - $y = self::$alignmentPattern[$version][0]; - self::putAlignmentMarker($frame, $x, $y); - return; - } - - $cx = self::$alignmentPattern[$version][0]; - for($x=1; $x<$w - 1; $x++) { - self::putAlignmentMarker($frame, 6, $cx); - self::putAlignmentMarker($frame, $cx, 6); - $cx += $d; - } - - $cy = self::$alignmentPattern[$version][0]; - for($y=0; $y<$w-1; $y++) { - $cx = self::$alignmentPattern[$version][0]; - for($x=0; $x<$w-1; $x++) { - self::putAlignmentMarker($frame, $cx, $cy); - $cx += $d; - } - $cy += $d; - } - } - - // Version information pattern ----------------------------------------- - - // Version information pattern (BCH coded). - // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. - - // size: [QRSPEC_VERSION_MAX - 6] - - public static $versionPattern = array( - 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, - 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, - 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, - 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, - 0x27541, 0x28c69 - ); - - //---------------------------------------------------------------------- - public static function getVersionPattern($version) - { - if($version < 7 || $version > QRSPEC_VERSION_MAX) - return 0; - - return self::$versionPattern[$version -7]; - } - - // Format information -------------------------------------------------- - // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) - - public static $formatInfo = array( - array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), - array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), - array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), - array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) - ); - - public static function getFormatInfo($mask, $level) - { - if($mask < 0 || $mask > 7) - return 0; - - if($level < 0 || $level > 3) - return 0; - - return self::$formatInfo[$level][$mask]; - } - - // Frame --------------------------------------------------------------- - // Cache of initial frames. - - public static $frames = array(); - - /** -------------------------------------------------------------------- - * Put a finder pattern. - * @param frame - * @param width - * @param ox,oy upper-left coordinate of the pattern - */ - public static function putFinderPattern(&$frame, $ox, $oy) - { - $finder = array( - "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", - "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", - "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", - "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" - ); - - for($y=0; $y<7; $y++) { - QRstr::set($frame, $ox, $oy+$y, $finder[$y]); - } - } - - //---------------------------------------------------------------------- - public static function createFrame($version) - { - $width = self::$capacity[$version][QRCAP_WIDTH]; - $frameLine = str_repeat ("\0", $width); - $frame = array_fill(0, $width, $frameLine); - - // Finder pattern - self::putFinderPattern($frame, 0, 0); - self::putFinderPattern($frame, $width - 7, 0); - self::putFinderPattern($frame, 0, $width - 7); - - // Separator - $yOffset = $width - 7; - - for($y=0; $y<7; $y++) { - $frame[$y][7] = "\xc0"; - $frame[$y][$width - 8] = "\xc0"; - $frame[$yOffset][7] = "\xc0"; - $yOffset++; - } - - $setPattern = str_repeat("\xc0", 8); - - QRstr::set($frame, 0, 7, $setPattern); - QRstr::set($frame, $width-8, 7, $setPattern); - QRstr::set($frame, 0, $width - 8, $setPattern); - - // Format info - $setPattern = str_repeat("\x84", 9); - QRstr::set($frame, 0, 8, $setPattern); - QRstr::set($frame, $width - 8, 8, $setPattern, 8); - - $yOffset = $width - 8; - - for($y=0; $y<8; $y++,$yOffset++) { - $frame[$y][8] = "\x84"; - $frame[$yOffset][8] = "\x84"; - } - - // Timing pattern - - for($i=1; $i<$width-15; $i++) { - $frame[6][7+$i] = chr(0x90 | ($i & 1)); - $frame[7+$i][6] = chr(0x90 | ($i & 1)); - } - - // Alignment pattern - self::putAlignmentPattern($version, $frame, $width); - - // Version information - if($version >= 7) { - $vinf = self::getVersionPattern($version); - - $v = $vinf; - - for($x=0; $x<6; $x++) { - for($y=0; $y<3; $y++) { - $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); - $v = $v >> 1; - } - } - - $v = $vinf; - for($y=0; $y<6; $y++) { - for($x=0; $x<3; $x++) { - $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); - $v = $v >> 1; - } - } - } - - // and a little bit... - $frame[$width - 8][8] = "\x81"; - - return $frame; - } - - //---------------------------------------------------------------------- - public static function debug($frame, $binary_mode = false) - { - if ($binary_mode) { - - foreach ($frame as &$frameLine) { - $frameLine = join('  ', explode('0', $frameLine)); - $frameLine = join('██', explode('1', $frameLine)); - } - - ?> - -


        '; - echo join("
        ", $frame); - echo '






'; - - } else { - - foreach ($frame as &$frameLine) { - $frameLine = join(' ', explode("\xc0", $frameLine)); - $frameLine = join('', explode("\xc1", $frameLine)); - $frameLine = join(' ', explode("\xa0", $frameLine)); - $frameLine = join('', explode("\xa1", $frameLine)); - $frameLine = join('', explode("\x84", $frameLine)); //format 0 - $frameLine = join('', explode("\x85", $frameLine)); //format 1 - $frameLine = join('', explode("\x81", $frameLine)); //special bit - $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 - $frameLine = join('', explode("\x91", $frameLine)); //clock 1 - $frameLine = join(' ', explode("\x88", $frameLine)); //version - $frameLine = join('', explode("\x89", $frameLine)); //version - $frameLine = join('♦', explode("\x01", $frameLine)); - $frameLine = join('⋅', explode("\0", $frameLine)); - } - - ?> - - "; - echo join("
", $frame); - echo "
"; - - } - } - - //---------------------------------------------------------------------- - public static function serial($frame) - { - return gzcompress(join("\n", $frame), 9); - } - - //---------------------------------------------------------------------- - public static function unserial($code) - { - return explode("\n", gzuncompress($code)); - } - - //---------------------------------------------------------------------- - public static function newFrame($version) - { - if($version < 1 || $version > QRSPEC_VERSION_MAX) - return null; - - if(!isset(self::$frames[$version])) { - - $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; - - if (QR_CACHEABLE) { - if (file_exists($fileName)) { - self::$frames[$version] = self::unserial(file_get_contents($fileName)); - } else { - self::$frames[$version] = self::createFrame($version); - file_put_contents($fileName, self::serial(self::$frames[$version])); - } - } else { - self::$frames[$version] = self::createFrame($version); - } - } - - if(is_null(self::$frames[$version])) - return null; - - return self::$frames[$version]; - } - - //---------------------------------------------------------------------- - public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } - public static function rsBlockNum1($spec) { return $spec[0]; } - public static function rsDataCodes1($spec) { return $spec[1]; } - public static function rsEccCodes1($spec) { return $spec[2]; } - public static function rsBlockNum2($spec) { return $spec[3]; } - public static function rsDataCodes2($spec) { return $spec[4]; } - public static function rsEccCodes2($spec) { return $spec[2]; } - public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } - public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } - - } - - - -//---- qrimage.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Image output of code using GD2 - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QR_IMAGE', true); - - class QRimage { - - //---------------------------------------------------------------------- - public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) - { - $image = self::image($frame, $pixelPerPoint, $outerFrame); - - if ($filename === false) { - Header("Content-type: image/png"); - ImagePng($image); - } else { - if($saveandprint===TRUE){ - ImagePng($image, $filename); - header("Content-type: image/png"); - ImagePng($image); - }else{ - ImagePng($image, $filename); - } - } - - ImageDestroy($image); - } - - //---------------------------------------------------------------------- - public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) - { - $image = self::image($frame, $pixelPerPoint, $outerFrame); - - if ($filename === false) { - Header("Content-type: image/jpeg"); - ImageJpeg($image, null, $q); - } else { - ImageJpeg($image, $filename, $q); - } - - ImageDestroy($image); - } - - //---------------------------------------------------------------------- - private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - $base_image =ImageCreate($imgW, $imgH); - - $col[0] = ImageColorAllocate($base_image,255,255,255); - $col[1] = ImageColorAllocate($base_image,0,0,0); - - imagefill($base_image, 0, 0, $col[0]); - - for($y=0; $y<$h; $y++) { - for($x=0; $x<$w; $x++) { - if ($frame[$y][$x] == '1') { - ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); - } - } - } - - $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); - ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); - ImageDestroy($base_image); - - return $target_image; - } - } - - - -//---- qrinput.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Input encoding class - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('STRUCTURE_HEADER_BITS', 20); - define('MAX_STRUCTURED_SYMBOLS', 16); - - class QRinputItem { - - public $mode; - public $size; - public $data; - public $bstream; - - public function __construct($mode, $size, $data, $bstream = null) - { - $setData = array_slice($data, 0, $size); - - if (count($setData) < $size) { - $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); - } - - if(!QRinput::check($mode, $size, $setData)) { - throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); - return null; - } - - $this->mode = $mode; - $this->size = $size; - $this->data = $setData; - $this->bstream = $bstream; - } - - //---------------------------------------------------------------------- - public function encodeModeNum($version) - { - try { - - $words = (int)($this->size / 3); - $bs = new QRbitstream(); - - $val = 0x1; - $bs->appendNum(4, $val); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); - - for($i=0; $i<$words; $i++) { - $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; - $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; - $val += (ord($this->data[$i*3+2]) - ord('0')); - $bs->appendNum(10, $val); - } - - if($this->size - $words * 3 == 1) { - $val = ord($this->data[$words*3]) - ord('0'); - $bs->appendNum(4, $val); - } else if($this->size - $words * 3 == 2) { - $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; - $val += (ord($this->data[$words*3+1]) - ord('0')); - $bs->appendNum(7, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeAn($version) - { - try { - $words = (int)($this->size / 2); - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x02); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); - - for($i=0; $i<$words; $i++) { - $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; - $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); - - $bs->appendNum(11, $val); - } - - if($this->size & 1) { - $val = QRinput::lookAnTable(ord($this->data[$words * 2])); - $bs->appendNum(6, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeMode8($version) - { - try { - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x4); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); - - for($i=0; $i<$this->size; $i++) { - $bs->appendNum(8, ord($this->data[$i])); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeKanji($version) - { - try { - - $bs = new QRbitrtream(); - - $bs->appendNum(4, 0x8); - $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); - - for($i=0; $i<$this->size; $i+=2) { - $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); - if($val <= 0x9ffc) { - $val -= 0x8140; - } else { - $val -= 0xc140; - } - - $h = ($val >> 8) * 0xc0; - $val = ($val & 0xff) + $h; - - $bs->appendNum(13, $val); - } - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function encodeModeStructure() - { - try { - $bs = new QRbitstream(); - - $bs->appendNum(4, 0x03); - $bs->appendNum(4, ord($this->data[1]) - 1); - $bs->appendNum(4, ord($this->data[0]) - 1); - $bs->appendNum(8, ord($this->data[2])); - - $this->bstream = $bs; - return 0; - - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function estimateBitStreamSizeOfEntry($version) - { - $bits = 0; - - if($version == 0) - $version = 1; - - switch($this->mode) { - case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; - case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; - case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; - case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; - case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; - default: - return 0; - } - - $l = QRspec::lengthIndicator($this->mode, $version); - $m = 1 << $l; - $num = (int)(($this->size + $m - 1) / $m); - - $bits += $num * (4 + $l); - - return $bits; - } - - //---------------------------------------------------------------------- - public function encodeBitStream($version) - { - try { - - unset($this->bstream); - $words = QRspec::maximumWords($this->mode, $version); - - if($this->size > $words) { - - $st1 = new QRinputItem($this->mode, $words, $this->data); - $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); - - $st1->encodeBitStream($version); - $st2->encodeBitStream($version); - - $this->bstream = new QRbitstream(); - $this->bstream->append($st1->bstream); - $this->bstream->append($st2->bstream); - - unset($st1); - unset($st2); - - } else { - - $ret = 0; - - switch($this->mode) { - case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; - case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; - case QR_MODE_8: $ret = $this->encodeMode8($version); break; - case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; - case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; - - default: - break; - } - - if($ret < 0) - return -1; - } - - return $this->bstream->size(); - - } catch (Exception $e) { - return -1; - } - } - }; - - //########################################################################## - - class QRinput { - - public $items; - - private $version; - private $level; - - //---------------------------------------------------------------------- - public function __construct($version = 0, $level = QR_ECLEVEL_L) - { - if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { - throw new Exception('Invalid version no'); - return NULL; - } - - $this->version = $version; - $this->level = $level; - } - - //---------------------------------------------------------------------- - public function getVersion() - { - return $this->version; - } - - //---------------------------------------------------------------------- - public function setVersion($version) - { - if($version < 0 || $version > QRSPEC_VERSION_MAX) { - throw new Exception('Invalid version no'); - return -1; - } - - $this->version = $version; - - return 0; - } - - //---------------------------------------------------------------------- - public function getErrorCorrectionLevel() - { - return $this->level; - } - - //---------------------------------------------------------------------- - public function setErrorCorrectionLevel($level) - { - if($level > QR_ECLEVEL_H) { - throw new Exception('Invalid ECLEVEL'); - return -1; - } - - $this->level = $level; - - return 0; - } - - //---------------------------------------------------------------------- - public function appendEntry(QRinputItem $entry) - { - $this->items[] = $entry; - } - - //---------------------------------------------------------------------- - public function append($mode, $size, $data) - { - try { - $entry = new QRinputItem($mode, $size, $data); - $this->items[] = $entry; - return 0; - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - - public function insertStructuredAppendHeader($size, $index, $parity) - { - if( $size > MAX_STRUCTURED_SYMBOLS ) { - throw new Exception('insertStructuredAppendHeader wrong size'); - } - - if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { - throw new Exception('insertStructuredAppendHeader wrong index'); - } - - $buf = array($size, $index, $parity); - - try { - $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); - array_unshift($this->items, $entry); - return 0; - } catch (Exception $e) { - return -1; - } - } - - //---------------------------------------------------------------------- - public function calcParity() - { - $parity = 0; - - foreach($this->items as $item) { - if($item->mode != QR_MODE_STRUCTURE) { - for($i=$item->size-1; $i>=0; $i--) { - $parity ^= $item->data[$i]; - } - } - } - - return $parity; - } - - //---------------------------------------------------------------------- - public static function checkModeNum($size, $data) - { - for($i=0; $i<$size; $i++) { - if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ - return false; - } - } - - return true; - } - - //---------------------------------------------------------------------- - public static function estimateBitsModeNum($size) - { - $w = (int)$size / 3; - $bits = $w * 10; - - switch($size - $w * 3) { - case 1: - $bits += 4; - break; - case 2: - $bits += 7; - break; - default: - break; - } - - return $bits; - } - - //---------------------------------------------------------------------- - public static $anTable = array( - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, - -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - ); - - //---------------------------------------------------------------------- - public static function lookAnTable($c) - { - return (($c > 127)?-1:self::$anTable[$c]); - } - - //---------------------------------------------------------------------- - public static function checkModeAn($size, $data) - { - for($i=0; $i<$size; $i++) { - if (self::lookAnTable(ord($data[$i])) == -1) { - return false; - } - } - - return true; - } - - //---------------------------------------------------------------------- - public static function estimateBitsModeAn($size) - { - $w = (int)($size / 2); - $bits = $w * 11; - - if($size & 1) { - $bits += 6; - } - - return $bits; - } - - //---------------------------------------------------------------------- - public static function estimateBitsMode8($size) - { - return $size * 8; - } - - //---------------------------------------------------------------------- - public function estimateBitsModeKanji($size) - { - return (int)(($size / 2) * 13); - } - - //---------------------------------------------------------------------- - public static function checkModeKanji($size, $data) - { - if($size & 1) - return false; - - for($i=0; $i<$size; $i+=2) { - $val = (ord($data[$i]) << 8) | ord($data[$i+1]); - if( $val < 0x8140 - || ($val > 0x9ffc && $val < 0xe040) - || $val > 0xebbf) { - return false; - } - } - - return true; - } - - /*********************************************************************** - * Validation - **********************************************************************/ - - public static function check($mode, $size, $data) - { - if($size <= 0) - return false; - - switch($mode) { - case QR_MODE_NUM: return self::checkModeNum($size, $data); break; - case QR_MODE_AN: return self::checkModeAn($size, $data); break; - case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; - case QR_MODE_8: return true; break; - case QR_MODE_STRUCTURE: return true; break; - - default: - break; - } - - return false; - } - - - //---------------------------------------------------------------------- - public function estimateBitStreamSize($version) - { - $bits = 0; - - foreach($this->items as $item) { - $bits += $item->estimateBitStreamSizeOfEntry($version); - } - - return $bits; - } - - //---------------------------------------------------------------------- - public function estimateVersion() - { - $version = 0; - $prev = 0; - do { - $prev = $version; - $bits = $this->estimateBitStreamSize($prev); - $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); - if ($version < 0) { - return -1; - } - } while ($version > $prev); - - return $version; - } - - //---------------------------------------------------------------------- - public static function lengthOfCode($mode, $version, $bits) - { - $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); - switch($mode) { - case QR_MODE_NUM: - $chunks = (int)($payload / 10); - $remain = $payload - $chunks * 10; - $size = $chunks * 3; - if($remain >= 7) { - $size += 2; - } else if($remain >= 4) { - $size += 1; - } - break; - case QR_MODE_AN: - $chunks = (int)($payload / 11); - $remain = $payload - $chunks * 11; - $size = $chunks * 2; - if($remain >= 6) - $size++; - break; - case QR_MODE_8: - $size = (int)($payload / 8); - break; - case QR_MODE_KANJI: - $size = (int)(($payload / 13) * 2); - break; - case QR_MODE_STRUCTURE: - $size = (int)($payload / 8); - break; - default: - $size = 0; - break; - } - - $maxsize = QRspec::maximumWords($mode, $version); - if($size < 0) $size = 0; - if($size > $maxsize) $size = $maxsize; - - return $size; - } - - //---------------------------------------------------------------------- - public function createBitStream() - { - $total = 0; - - foreach($this->items as $item) { - $bits = $item->encodeBitStream($this->version); - - if($bits < 0) - return -1; - - $total += $bits; - } - - return $total; - } - - //---------------------------------------------------------------------- - public function convertData() - { - $ver = $this->estimateVersion(); - if($ver > $this->getVersion()) { - $this->setVersion($ver); - } - - for(;;) { - $bits = $this->createBitStream(); - - if($bits < 0) - return -1; - - $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); - if($ver < 0) { - throw new Exception('WRONG VERSION'); - return -1; - } else if($ver > $this->getVersion()) { - $this->setVersion($ver); - } else { - break; - } - } - - return 0; - } - - //---------------------------------------------------------------------- - public function appendPaddingBit(&$bstream) - { - $bits = $bstream->size(); - $maxwords = QRspec::getDataLength($this->version, $this->level); - $maxbits = $maxwords * 8; - - if ($maxbits == $bits) { - return 0; - } - - if ($maxbits - $bits < 5) { - return $bstream->appendNum($maxbits - $bits, 0); - } - - $bits += 4; - $words = (int)(($bits + 7) / 8); - - $padding = new QRbitstream(); - $ret = $padding->appendNum($words * 8 - $bits + 4, 0); - - if($ret < 0) - return $ret; - - $padlen = $maxwords - $words; - - if($padlen > 0) { - - $padbuf = array(); - for($i=0; $i<$padlen; $i++) { - $padbuf[$i] = ($i&1)?0x11:0xec; - } - - $ret = $padding->appendBytes($padlen, $padbuf); - - if($ret < 0) - return $ret; - - } - - $ret = $bstream->append($padding); - - return $ret; - } - - //---------------------------------------------------------------------- - public function mergeBitStream() - { - if($this->convertData() < 0) { - return null; - } - - $bstream = new QRbitstream(); - - foreach($this->items as $item) { - $ret = $bstream->append($item->bstream); - if($ret < 0) { - return null; - } - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function getBitStream() - { - - $bstream = $this->mergeBitStream(); - - if($bstream == null) { - return null; - } - - $ret = $this->appendPaddingBit($bstream); - if($ret < 0) { - return null; - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function getByteStream() - { - $bstream = $this->getBitStream(); - if($bstream == null) { - return null; - } - - return $bstream->toByte(); - } - } - - - - - - -//---- qrbitstream.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Bitstream class - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRbitstream { - - public $data = array(); - - //---------------------------------------------------------------------- - public function size() - { - return count($this->data); - } - - //---------------------------------------------------------------------- - public function allocate($setLength) - { - $this->data = array_fill(0, $setLength, 0); - return 0; - } - - //---------------------------------------------------------------------- - public static function newFromNum($bits, $num) - { - $bstream = new QRbitstream(); - $bstream->allocate($bits); - - $mask = 1 << ($bits - 1); - for($i=0; $i<$bits; $i++) { - if($num & $mask) { - $bstream->data[$i] = 1; - } else { - $bstream->data[$i] = 0; - } - $mask = $mask >> 1; - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public static function newFromBytes($size, $data) - { - $bstream = new QRbitstream(); - $bstream->allocate($size * 8); - $p=0; - - for($i=0; $i<$size; $i++) { - $mask = 0x80; - for($j=0; $j<8; $j++) { - if($data[$i] & $mask) { - $bstream->data[$p] = 1; - } else { - $bstream->data[$p] = 0; - } - $p++; - $mask = $mask >> 1; - } - } - - return $bstream; - } - - //---------------------------------------------------------------------- - public function append(QRbitstream $arg) - { - if (is_null($arg)) { - return -1; - } - - if($arg->size() == 0) { - return 0; - } - - if($this->size() == 0) { - $this->data = $arg->data; - return 0; - } - - $this->data = array_values(array_merge($this->data, $arg->data)); - - return 0; - } - - //---------------------------------------------------------------------- - public function appendNum($bits, $num) - { - if ($bits == 0) - return 0; - - $b = QRbitstream::newFromNum($bits, $num); - - if(is_null($b)) - return -1; - - $ret = $this->append($b); - unset($b); - - return $ret; - } - - //---------------------------------------------------------------------- - public function appendBytes($size, $data) - { - if ($size == 0) - return 0; - - $b = QRbitstream::newFromBytes($size, $data); - - if(is_null($b)) - return -1; - - $ret = $this->append($b); - unset($b); - - return $ret; - } - - //---------------------------------------------------------------------- - public function toByte() - { - - $size = $this->size(); - - if($size == 0) { - return array(); - } - - $data = array_fill(0, (int)(($size + 7) / 8), 0); - $bytes = (int)($size / 8); - - $p = 0; - - for($i=0; $i<$bytes; $i++) { - $v = 0; - for($j=0; $j<8; $j++) { - $v = $v << 1; - $v |= $this->data[$p]; - $p++; - } - $data[$i] = $v; - } - - if($size & 7) { - $v = 0; - for($j=0; $j<($size & 7); $j++) { - $v = $v << 1; - $v |= $this->data[$p]; - $p++; - } - $data[$bytes] = $v; - } - - return $data; - } - - } - - - - -//---- qrsplit.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Input splitting classes - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * The following data / specifications are taken from - * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) - * or - * "Automatic identification and data capture techniques -- - * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - class QRsplit { - - public $dataStr = ''; - public $input; - public $modeHint; - - //---------------------------------------------------------------------- - public function __construct($dataStr, $input, $modeHint) - { - $this->dataStr = $dataStr; - $this->input = $input; - $this->modeHint = $modeHint; - } - - //---------------------------------------------------------------------- - public static function isdigitat($str, $pos) - { - if ($pos >= strlen($str)) - return false; - - return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); - } - - //---------------------------------------------------------------------- - public static function isalnumat($str, $pos) - { - if ($pos >= strlen($str)) - return false; - - return (QRinput::lookAnTable(ord($str[$pos])) >= 0); - } - - //---------------------------------------------------------------------- - public function identifyMode($pos) - { - if ($pos >= strlen($this->dataStr)) - return QR_MODE_NUL; - - $c = $this->dataStr[$pos]; - - if(self::isdigitat($this->dataStr, $pos)) { - return QR_MODE_NUM; - } else if(self::isalnumat($this->dataStr, $pos)) { - return QR_MODE_AN; - } else if($this->modeHint == QR_MODE_KANJI) { - - if ($pos+1 < strlen($this->dataStr)) - { - $d = $this->dataStr[$pos+1]; - $word = (ord($c) << 8) | ord($d); - if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { - return QR_MODE_KANJI; - } - } - } - - return QR_MODE_8; - } - - //---------------------------------------------------------------------- - public function eatNum() - { - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 0; - while(self::isdigitat($this->dataStr, $p)) { - $p++; - } - - $run = $p; - $mode = $this->identifyMode($p); - - if($mode == QR_MODE_8) { - $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln - + QRinput::estimateBitsMode8(1) // + 4 + l8 - - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 - if($dif > 0) { - return $this->eat8(); - } - } - if($mode == QR_MODE_AN) { - $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln - + QRinput::estimateBitsModeAn(1) // + 4 + la - - QRinput::estimateBitsModeAn($run + 1);// - 4 - la - if($dif > 0) { - return $this->eatAn(); - } - } - - $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function eatAn() - { - $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 0; - - while(self::isalnumat($this->dataStr, $p)) { - if(self::isdigitat($this->dataStr, $p)) { - $q = $p; - while(self::isdigitat($this->dataStr, $q)) { - $q++; - } - - $dif = QRinput::estimateBitsModeAn($p) // + 4 + la - + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln - - QRinput::estimateBitsModeAn($q); // - 4 - la - - if($dif < 0) { - break; - } else { - $p = $q; - } - } else { - $p++; - } - } - - $run = $p; - - if(!self::isalnumat($this->dataStr, $p)) { - $dif = QRinput::estimateBitsModeAn($run) + 4 + $la - + QRinput::estimateBitsMode8(1) // + 4 + l8 - - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 - if($dif > 0) { - return $this->eat8(); - } - } - - $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function eatKanji() - { - $p = 0; - - while($this->identifyMode($p) == QR_MODE_KANJI) { - $p += 2; - } - - $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function eat8() - { - $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); - $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); - - $p = 1; - $dataStrLen = strlen($this->dataStr); - - while($p < $dataStrLen) { - - $mode = $this->identifyMode($p); - if($mode == QR_MODE_KANJI) { - break; - } - if($mode == QR_MODE_NUM) { - $q = $p; - while(self::isdigitat($this->dataStr, $q)) { - $q++; - } - $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 - + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln - - QRinput::estimateBitsMode8($q); // - 4 - l8 - if($dif < 0) { - break; - } else { - $p = $q; - } - } else if($mode == QR_MODE_AN) { - $q = $p; - while(self::isalnumat($this->dataStr, $q)) { - $q++; - } - $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 - + QRinput::estimateBitsModeAn($q - $p) + 4 + $la - - QRinput::estimateBitsMode8($q); // - 4 - l8 - if($dif < 0) { - break; - } else { - $p = $q; - } - } else { - $p++; - } - } - - $run = $p; - $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); - - if($ret < 0) - return -1; - - return $run; - } - - //---------------------------------------------------------------------- - public function splitString() - { - while (strlen($this->dataStr) > 0) - { - if($this->dataStr == '') - return 0; - - $mode = $this->identifyMode(0); - - switch ($mode) { - case QR_MODE_NUM: $length = $this->eatNum(); break; - case QR_MODE_AN: $length = $this->eatAn(); break; - case QR_MODE_KANJI: - if ($hint == QR_MODE_KANJI) - $length = $this->eatKanji(); - else $length = $this->eat8(); - break; - default: $length = $this->eat8(); break; - - } - - if($length == 0) return 0; - if($length < 0) return -1; - - $this->dataStr = substr($this->dataStr, $length); - } - } - - //---------------------------------------------------------------------- - public function toUpper() - { - $stringLen = strlen($this->dataStr); - $p = 0; - - while ($p<$stringLen) { - $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); - if($mode == QR_MODE_KANJI) { - $p += 2; - } else { - if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { - $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); - } - $p++; - } - } - - return $this->dataStr; - } - - //---------------------------------------------------------------------- - public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) - { - if(is_null($string) || $string == '\0' || $string == '') { - throw new Exception('empty string!!!'); - } - - $split = new QRsplit($string, $input, $modeHint); - - if(!$casesensitive) - $split->toUpper(); - - return $split->splitString(); - } - } - - - -//---- qrrscode.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Reed-Solomon error correction support - * - * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q - * (libfec is released under the GNU Lesser General Public License.) - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRrsItem { - - public $mm; // Bits per symbol - public $nn; // Symbols per block (= (1<= $this->nn) { - $x -= $this->nn; - $x = ($x >> $this->mm) + ($x & $this->nn); - } - - return $x; - } - - //---------------------------------------------------------------------- - public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) - { - // Common code for intializing a Reed-Solomon control block (char or int symbols) - // Copyright 2004 Phil Karn, KA9Q - // May be used under the terms of the GNU Lesser General Public License (LGPL) - - $rs = null; - - // Check parameter ranges - if($symsize < 0 || $symsize > 8) return $rs; - if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; - if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; - if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! - if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding - - $rs = new QRrsItem(); - $rs->mm = $symsize; - $rs->nn = (1<<$symsize)-1; - $rs->pad = $pad; - - $rs->alpha_to = array_fill(0, $rs->nn+1, 0); - $rs->index_of = array_fill(0, $rs->nn+1, 0); - - // PHP style macro replacement ;) - $NN =& $rs->nn; - $A0 =& $NN; - - // Generate Galois field lookup tables - $rs->index_of[0] = $A0; // log(zero) = -inf - $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 - $sr = 1; - - for($i=0; $i<$rs->nn; $i++) { - $rs->index_of[$sr] = $i; - $rs->alpha_to[$i] = $sr; - $sr <<= 1; - if($sr & (1<<$symsize)) { - $sr ^= $gfpoly; - } - $sr &= $rs->nn; - } - - if($sr != 1){ - // field generator polynomial is not primitive! - $rs = NULL; - return $rs; - } - - /* Form RS code generator polynomial from its roots */ - $rs->genpoly = array_fill(0, $nroots+1, 0); - - $rs->fcr = $fcr; - $rs->prim = $prim; - $rs->nroots = $nroots; - $rs->gfpoly = $gfpoly; - - /* Find prim-th root of 1, used in decoding */ - for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) - ; // intentional empty-body loop! - - $rs->iprim = (int)($iprim / $prim); - $rs->genpoly[0] = 1; - - for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { - $rs->genpoly[$i+1] = 1; - - // Multiply rs->genpoly[] by @**(root + x) - for ($j = $i; $j > 0; $j--) { - if ($rs->genpoly[$j] != 0) { - $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; - } else { - $rs->genpoly[$j] = $rs->genpoly[$j-1]; - } - } - // rs->genpoly[0] can never be zero - $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; - } - - // convert rs->genpoly[] to index form for quicker encoding - for ($i = 0; $i <= $nroots; $i++) - $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; - - return $rs; - } - - //---------------------------------------------------------------------- - public function encode_rs_char($data, &$parity) - { - $MM =& $this->mm; - $NN =& $this->nn; - $ALPHA_TO =& $this->alpha_to; - $INDEX_OF =& $this->index_of; - $GENPOLY =& $this->genpoly; - $NROOTS =& $this->nroots; - $FCR =& $this->fcr; - $PRIM =& $this->prim; - $IPRIM =& $this->iprim; - $PAD =& $this->pad; - $A0 =& $NN; - - $parity = array_fill(0, $NROOTS, 0); - - for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { - - $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; - if($feedback != $A0) { - // feedback term is non-zero - - // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must - // always be for the polynomials constructed by init_rs() - $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); - - for($j=1;$j<$NROOTS;$j++) { - $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; - } - } - - // Shift - array_shift($parity); - if($feedback != $A0) { - array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); - } else { - array_push($parity, 0); - } - } - } - } - - //########################################################################## - - class QRrs { - - public static $items = array(); - - //---------------------------------------------------------------------- - public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) - { - foreach(self::$items as $rs) { - if($rs->pad != $pad) continue; - if($rs->nroots != $nroots) continue; - if($rs->mm != $symsize) continue; - if($rs->gfpoly != $gfpoly) continue; - if($rs->fcr != $fcr) continue; - if($rs->prim != $prim) continue; - - return $rs; - } - - $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); - array_unshift(self::$items, $rs); - - return $rs; - } - } - - - -//---- qrmask.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Masking - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('N1', 3); - define('N2', 3); - define('N3', 40); - define('N4', 10); - - class QRmask { - - public $runLength = array(); - - //---------------------------------------------------------------------- - public function __construct() - { - $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); - } - - //---------------------------------------------------------------------- - public function writeFormatInformation($width, &$frame, $mask, $level) - { - $blacks = 0; - $format = QRspec::getFormatInfo($mask, $level); - - for($i=0; $i<8; $i++) { - if($format & 1) { - $blacks += 2; - $v = 0x85; - } else { - $v = 0x84; - } - - $frame[8][$width - 1 - $i] = chr($v); - if($i < 6) { - $frame[$i][8] = chr($v); - } else { - $frame[$i + 1][8] = chr($v); - } - $format = $format >> 1; - } - - for($i=0; $i<7; $i++) { - if($format & 1) { - $blacks += 2; - $v = 0x85; - } else { - $v = 0x84; - } - - $frame[$width - 7 + $i][8] = chr($v); - if($i == 0) { - $frame[8][7] = chr($v); - } else { - $frame[8][6 - $i] = chr($v); - } - - $format = $format >> 1; - } - - return $blacks; - } - - //---------------------------------------------------------------------- - public function mask0($x, $y) { return ($x+$y)&1; } - public function mask1($x, $y) { return ($y&1); } - public function mask2($x, $y) { return ($x%3); } - public function mask3($x, $y) { return ($x+$y)%3; } - public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } - public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } - public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } - public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } - - //---------------------------------------------------------------------- - private function generateMaskNo($maskNo, $width, $frame) - { - $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); - - for($y=0; $y<$width; $y++) { - for($x=0; $x<$width; $x++) { - if(ord($frame[$y][$x]) & 0x80) { - $bitMask[$y][$x] = 0; - } else { - $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); - $bitMask[$y][$x] = ($maskFunc == 0)?1:0; - } - - } - } - - return $bitMask; - } - - //---------------------------------------------------------------------- - public static function serial($bitFrame) - { - $codeArr = array(); - - foreach ($bitFrame as $line) - $codeArr[] = join('', $line); - - return gzcompress(join("\n", $codeArr), 9); - } - - //---------------------------------------------------------------------- - public static function unserial($code) - { - $codeArr = array(); - - $codeLines = explode("\n", gzuncompress($code)); - foreach ($codeLines as $line) - $codeArr[] = str_split($line); - - return $codeArr; - } - - //---------------------------------------------------------------------- - public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) - { - $b = 0; - $bitMask = array(); - - $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; - - if (QR_CACHEABLE) { - if (file_exists($fileName)) { - $bitMask = self::unserial(file_get_contents($fileName)); - } else { - $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); - if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) - mkdir(QR_CACHE_DIR.'mask_'.$maskNo); - file_put_contents($fileName, self::serial($bitMask)); - } - } else { - $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); - } - - if ($maskGenOnly) - return; - - $d = $s; - - for($y=0; $y<$width; $y++) { - for($x=0; $x<$width; $x++) { - if($bitMask[$y][$x] == 1) { - $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); - } - $b += (int)(ord($d[$y][$x]) & 1); - } - } - - return $b; - } - - //---------------------------------------------------------------------- - public function makeMask($width, $frame, $maskNo, $level) - { - $masked = array_fill(0, $width, str_repeat("\0", $width)); - $this->makeMaskNo($maskNo, $width, $frame, $masked); - $this->writeFormatInformation($width, $masked, $maskNo, $level); - - return $masked; - } - - //---------------------------------------------------------------------- - public function calcN1N3($length) - { - $demerit = 0; - - for($i=0; $i<$length; $i++) { - - if($this->runLength[$i] >= 5) { - $demerit += (N1 + ($this->runLength[$i] - 5)); - } - if($i & 1) { - if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { - $fact = (int)($this->runLength[$i] / 3); - if(($this->runLength[$i-2] == $fact) && - ($this->runLength[$i-1] == $fact) && - ($this->runLength[$i+1] == $fact) && - ($this->runLength[$i+2] == $fact)) { - if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { - $demerit += N3; - } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { - $demerit += N3; - } - } - } - } - } - return $demerit; - } - - //---------------------------------------------------------------------- - public function evaluateSymbol($width, $frame) - { - $head = 0; - $demerit = 0; - - for($y=0; $y<$width; $y++) { - $head = 0; - $this->runLength[0] = 1; - - $frameY = $frame[$y]; - - if ($y>0) - $frameYM = $frame[$y-1]; - - for($x=0; $x<$width; $x++) { - if(($x > 0) && ($y > 0)) { - $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); - $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); - - if(($b22 | ($w22 ^ 1))&1) { - $demerit += N2; - } - } - if(($x == 0) && (ord($frameY[$x]) & 1)) { - $this->runLength[0] = -1; - $head = 1; - $this->runLength[$head] = 1; - } else if($x > 0) { - if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { - $head++; - $this->runLength[$head] = 1; - } else { - $this->runLength[$head]++; - } - } - } - - $demerit += $this->calcN1N3($head+1); - } - - for($x=0; $x<$width; $x++) { - $head = 0; - $this->runLength[0] = 1; - - for($y=0; $y<$width; $y++) { - if($y == 0 && (ord($frame[$y][$x]) & 1)) { - $this->runLength[0] = -1; - $head = 1; - $this->runLength[$head] = 1; - } else if($y > 0) { - if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { - $head++; - $this->runLength[$head] = 1; - } else { - $this->runLength[$head]++; - } - } - } - - $demerit += $this->calcN1N3($head+1); - } - - return $demerit; - } - - - //---------------------------------------------------------------------- - public function mask($width, $frame, $level) - { - $minDemerit = PHP_INT_MAX; - $bestMaskNum = 0; - $bestMask = array(); - - $checked_masks = array(0,1,2,3,4,5,6,7); - - if (QR_FIND_FROM_RANDOM !== false) { - - $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); - for ($i = 0; $i < $howManuOut; $i++) { - $remPos = rand (0, count($checked_masks)-1); - unset($checked_masks[$remPos]); - $checked_masks = array_values($checked_masks); - } - - } - - $bestMask = $frame; - - foreach($checked_masks as $i) { - $mask = array_fill(0, $width, str_repeat("\0", $width)); - - $demerit = 0; - $blacks = 0; - $blacks = $this->makeMaskNo($i, $width, $frame, $mask); - $blacks += $this->writeFormatInformation($width, $mask, $i, $level); - $blacks = (int)(100 * $blacks / ($width * $width)); - $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); - $demerit += $this->evaluateSymbol($width, $mask); - - if($demerit < $minDemerit) { - $minDemerit = $demerit; - $bestMask = $mask; - $bestMaskNum = $i; - } - } - - return $bestMask; - } - - //---------------------------------------------------------------------- - } - - - - -//---- qrencode.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Main encoder classes. - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRrsblock { - public $dataLength; - public $data = array(); - public $eccLength; - public $ecc = array(); - - public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) - { - $rs->encode_rs_char($data, $ecc); - - $this->dataLength = $dl; - $this->data = $data; - $this->eccLength = $el; - $this->ecc = $ecc; - } - }; - - //########################################################################## - - class QRrawcode { - public $version; - public $datacode = array(); - public $ecccode = array(); - public $blocks; - public $rsblocks = array(); //of RSblock - public $count; - public $dataLength; - public $eccLength; - public $b1; - - //---------------------------------------------------------------------- - public function __construct(QRinput $input) - { - $spec = array(0,0,0,0,0); - - $this->datacode = $input->getByteStream(); - if(is_null($this->datacode)) { - throw new Exception('null imput string'); - } - - QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); - - $this->version = $input->getVersion(); - $this->b1 = QRspec::rsBlockNum1($spec); - $this->dataLength = QRspec::rsDataLength($spec); - $this->eccLength = QRspec::rsEccLength($spec); - $this->ecccode = array_fill(0, $this->eccLength, 0); - $this->blocks = QRspec::rsBlockNum($spec); - - $ret = $this->init($spec); - if($ret < 0) { - throw new Exception('block alloc error'); - return null; - } - - $this->count = 0; - } - - //---------------------------------------------------------------------- - public function init(array $spec) - { - $dl = QRspec::rsDataCodes1($spec); - $el = QRspec::rsEccCodes1($spec); - $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - - - $blockNo = 0; - $dataPos = 0; - $eccPos = 0; - for($i=0; $iecccode,$eccPos); - $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - - if(QRspec::rsBlockNum2($spec) == 0) - return 0; - - $dl = QRspec::rsDataCodes2($spec); - $el = QRspec::rsEccCodes2($spec); - $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - - if($rs == NULL) return -1; - - for($i=0; $iecccode,$eccPos); - $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - - return 0; - } - - //---------------------------------------------------------------------- - public function getCode() - { - $ret; - - if($this->count < $this->dataLength) { - $row = $this->count % $this->blocks; - $col = $this->count / $this->blocks; - if($col >= $this->rsblocks[0]->dataLength) { - $row += $this->b1; - } - $ret = $this->rsblocks[$row]->data[$col]; - } else if($this->count < $this->dataLength + $this->eccLength) { - $row = ($this->count - $this->dataLength) % $this->blocks; - $col = ($this->count - $this->dataLength) / $this->blocks; - $ret = $this->rsblocks[$row]->ecc[$col]; - } else { - return 0; - } - $this->count++; - - return $ret; - } - } - - //########################################################################## - - class QRcode { - - public $version; - public $width; - public $data; - - //---------------------------------------------------------------------- - public function encodeMask(QRinput $input, $mask) - { - if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { - throw new Exception('wrong version'); - } - if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { - throw new Exception('wrong level'); - } - - $raw = new QRrawcode($input); - - QRtools::markTime('after_raw'); - - $version = $raw->version; - $width = QRspec::getWidth($version); - $frame = QRspec::newFrame($version); - - $filler = new FrameFiller($width, $frame); - if(is_null($filler)) { - return NULL; - } - - // inteleaved data and ecc codes - for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { - $code = $raw->getCode(); - $bit = 0x80; - for($j=0; $j<8; $j++) { - $addr = $filler->next(); - $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); - $bit = $bit >> 1; - } - } - - QRtools::markTime('after_filler'); - - unset($raw); - - // remainder bits - $j = QRspec::getRemainder($version); - for($i=0; $i<$j; $i++) { - $addr = $filler->next(); - $filler->setFrameAt($addr, 0x02); - } - - $frame = $filler->frame; - unset($filler); - - - // masking - $maskObj = new QRmask(); - if($mask < 0) { - - if (QR_FIND_BEST_MASK) { - $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); - } else { - $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); - } - } else { - $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); - } - - if($masked == NULL) { - return NULL; - } - - QRtools::markTime('after_mask'); - - $this->version = $version; - $this->width = $width; - $this->data = $masked; - - return $this; - } - - //---------------------------------------------------------------------- - public function encodeInput(QRinput $input) - { - return $this->encodeMask($input, -1); - } - - //---------------------------------------------------------------------- - public function encodeString8bit($string, $version, $level) - { - if(string == NULL) { - throw new Exception('empty string!'); - return NULL; - } - - $input = new QRinput($version, $level); - if($input == NULL) return NULL; - - $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); - if($ret < 0) { - unset($input); - return NULL; - } - return $this->encodeInput($input); - } - - //---------------------------------------------------------------------- - public function encodeString($string, $version, $level, $hint, $casesensitive) - { - - if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { - throw new Exception('bad hint'); - return NULL; - } - - $input = new QRinput($version, $level); - if($input == NULL) return NULL; - - $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); - if($ret < 0) { - return NULL; - } - - return $this->encodeInput($input); - } - - //---------------------------------------------------------------------- - public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encodePNG($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encode($text, $outfile); - } - - //---------------------------------------------------------------------- - public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encodeRAW($text, $outfile); - } - } - - //########################################################################## - - class FrameFiller { - - public $width; - public $frame; - public $x; - public $y; - public $dir; - public $bit; - - //---------------------------------------------------------------------- - public function __construct($width, &$frame) - { - $this->width = $width; - $this->frame = $frame; - $this->x = $width - 1; - $this->y = $width - 1; - $this->dir = -1; - $this->bit = -1; - } - - //---------------------------------------------------------------------- - public function setFrameAt($at, $val) - { - $this->frame[$at['y']][$at['x']] = chr($val); - } - - //---------------------------------------------------------------------- - public function getFrameAt($at) - { - return ord($this->frame[$at['y']][$at['x']]); - } - - //---------------------------------------------------------------------- - public function next() - { - do { - - if($this->bit == -1) { - $this->bit = 0; - return array('x'=>$this->x, 'y'=>$this->y); - } - - $x = $this->x; - $y = $this->y; - $w = $this->width; - - if($this->bit == 0) { - $x--; - $this->bit++; - } else { - $x++; - $y += $this->dir; - $this->bit--; - } - - if($this->dir < 0) { - if($y < 0) { - $y = 0; - $x -= 2; - $this->dir = 1; - if($x == 6) { - $x--; - $y = 9; - } - } - } else { - if($y == $w) { - $y = $w - 1; - $x -= 2; - $this->dir = -1; - if($x == 6) { - $x--; - $y -= 8; - } - } - } - if($x < 0 || $y < 0) return null; - - $this->x = $x; - $this->y = $y; - - } while(ord($this->frame[$y][$x]) & 0x80); - - return array('x'=>$x, 'y'=>$y); - } - - } ; - - //########################################################################## - - class QRencode { - - public $casesensitive = true; - public $eightbit = false; - - public $version = 0; - public $size = 3; - public $margin = 4; - - public $structured = 0; // not supported yet - - public $level = QR_ECLEVEL_L; - public $hint = QR_MODE_8; - - //---------------------------------------------------------------------- - public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = new QRencode(); - $enc->size = $size; - $enc->margin = $margin; - - switch ($level.'') { - case '0': - case '1': - case '2': - case '3': - $enc->level = $level; - break; - case 'l': - case 'L': - $enc->level = QR_ECLEVEL_L; - break; - case 'm': - case 'M': - $enc->level = QR_ECLEVEL_M; - break; - case 'q': - case 'Q': - $enc->level = QR_ECLEVEL_Q; - break; - case 'h': - case 'H': - $enc->level = QR_ECLEVEL_H; - break; - } - - return $enc; - } - - //---------------------------------------------------------------------- - public function encodeRAW($intext, $outfile = false) - { - $code = new QRcode(); - - if($this->eightbit) { - $code->encodeString8bit($intext, $this->version, $this->level); - } else { - $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); - } - - return $code->data; - } - - //---------------------------------------------------------------------- - public function encode($intext, $outfile = false) - { - $code = new QRcode(); - - if($this->eightbit) { - $code->encodeString8bit($intext, $this->version, $this->level); - } else { - $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); - } - - QRtools::markTime('after_encode'); - - if ($outfile!== false) { - file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); - } else { - return QRtools::binarize($code->data); - } - } - - //---------------------------------------------------------------------- - public function encodePNG($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - } - - From 37cb488bcca0e794a5455fafa2d5512124c1f25d Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Thu, 25 Dec 2014 11:06:28 +0800 Subject: [PATCH 014/128] add php-qrcode-demo --- php/qrcode_demo/img/123456.png | Bin 0 -> 363 bytes php/qrcode_demo/index.php | 21 + php/qrcode_demo/library/phpqrcode.php | 3312 +++++++++++++++++++++++++ 3 files changed, 3333 insertions(+) create mode 100755 php/qrcode_demo/img/123456.png create mode 100755 php/qrcode_demo/index.php create mode 100755 php/qrcode_demo/library/phpqrcode.php diff --git a/php/qrcode_demo/img/123456.png b/php/qrcode_demo/img/123456.png new file mode 100755 index 0000000000000000000000000000000000000000..d36e0244a5e39871b1cd6d524c25c446dcd4eac2 GIT binary patch literal 363 zcmV-x0hIoUP))F~mR54kCa1Q5#fsA2NLD;52b59@jzFewS`-uS}Y?UZvA|(Yzv>uTUHh_Z?~( z&%LP{1TtpL4;?gakv{7}@to_2KXe7EB zWGvC5;Zh7B+!T7tSm&d_EE;VJr%=bzJ++iYG3hut2sVt$(M=X@vYEu{tLMyO8@qQb_3e>?UE#Qv^W3&002ov JPDHLkV1k?xrFZ}U literal 0 HcmV?d00001 diff --git a/php/qrcode_demo/index.php b/php/qrcode_demo/index.php new file mode 100755 index 0000000..0fdc064 --- /dev/null +++ b/php/qrcode_demo/index.php @@ -0,0 +1,21 @@ +'; +echo $str; diff --git a/php/qrcode_demo/library/phpqrcode.php b/php/qrcode_demo/library/phpqrcode.php new file mode 100755 index 0000000..80adb9d --- /dev/null +++ b/php/qrcode_demo/library/phpqrcode.php @@ -0,0 +1,3312 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* + * Version: 1.1.4 + * Build: 2010100721 + */ + + + +//---- qrconst.php ----------------------------- + + + + + +/* + * PHP QR Code encoder + * + * Common constants + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + define('QR_MODE_NUL', -1); + define('QR_MODE_NUM', 0); + define('QR_MODE_AN', 1); + define('QR_MODE_8', 2); + define('QR_MODE_KANJI', 3); + define('QR_MODE_STRUCTURE', 4); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function set(&$srctab, $x, $y, $repl, $replLen = false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + } + } + + + +//---- merged_config.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Config file, tuned-up for merged verion + */ + + define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there + define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true + define('QR_LOG_DIR', false); // default error logs dir + + define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false + + define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images + + + + +//---- qrtools.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Toolset, handy and debug utilites. + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + + + + +//---- qrspec.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * QR Code specifications + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QRSPEC_VERSION_MAX', 40); + define('QRSPEC_WIDTH_MAX', 177); + + define('QRCAP_WIDTH', 0); + define('QRCAP_WORDS', 1); + define('QRCAP_REMINDER', 2); + define('QRCAP_EC', 3); + + class QRspec { + + public static $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), + array( 29, 70, 7, array( 15, 26, 36, 44)), + array( 33, 100, 7, array( 20, 36, 52, 64)), + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), + array( 45, 196, 0, array( 40, 72, 108, 130)), + array( 49, 242, 0, array( 48, 88, 132, 156)), + array( 53, 292, 0, array( 60, 110, 160, 192)), + array( 57, 346, 0, array( 72, 130, 192, 224)), //10 + array( 61, 404, 0, array( 80, 150, 224, 264)), + array( 65, 466, 0, array( 96, 176, 260, 308)), + array( 69, 532, 0, array( 104, 198, 288, 352)), + array( 73, 581, 3, array( 120, 216, 320, 384)), + array( 77, 655, 3, array( 132, 240, 360, 432)), //15 + array( 81, 733, 3, array( 144, 280, 408, 480)), + array( 85, 815, 3, array( 168, 308, 448, 532)), + array( 89, 901, 3, array( 180, 338, 504, 588)), + array( 93, 991, 3, array( 196, 364, 546, 650)), + array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 + array(101, 1156, 4, array( 224, 442, 644, 750)), + array(105, 1258, 4, array( 252, 476, 690, 816)), + array(109, 1364, 4, array( 270, 504, 750, 900)), + array(113, 1474, 4, array( 300, 560, 810, 960)), + array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), + array(125, 1828, 4, array( 360, 700, 1020, 1200)), + array(129, 1921, 3, array( 390, 728, 1050, 1260)), + array(133, 2051, 3, array( 420, 784, 1140, 1350)), + array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), + array(145, 2465, 3, array( 510, 924, 1350, 1620)), + array(149, 2611, 3, array( 540, 980, 1440, 1710)), + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function getMinimumVersion($size, $level) + { + + for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { + $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; + if($words >= $size) + return $i; + } + + return -1; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function getEccSpec($version, $level, array &$spec) + { + if (count($spec) < 5) { + $spec = array(0,0,0,0,0); + } + + $b1 = self::$eccTable[$version][$level][0]; + $b2 = self::$eccTable[$version][$level][1]; + $data = self::getDataLength($version, $level); + $ecc = self::getECCLength($version, $level); + + if($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); + } + + if($w * $w - 3 == 1) { + $x = self::$alignmentPattern[$version][0]; + $y = self::$alignmentPattern[$version][0]; + self::putAlignmentMarker($frame, $x, $y); + return; + } + + $cx = self::$alignmentPattern[$version][0]; + for($x=1; $x<$w - 1; $x++) { + self::putAlignmentMarker($frame, 6, $cx); + self::putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + + $cy = self::$alignmentPattern[$version][0]; + for($y=0; $y<$w-1; $y++) { + $cx = self::$alignmentPattern[$version][0]; + for($x=0; $x<$w-1; $x++) { + self::putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $yOffset = $width - 7; + + for($y=0; $y<7; $y++) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + $yOffset++; + } + + $setPattern = str_repeat("\xc0", 8); + + QRstr::set($frame, 0, 7, $setPattern); + QRstr::set($frame, $width-8, 7, $setPattern); + QRstr::set($frame, 0, $width - 8, $setPattern); + + // Format info + $setPattern = str_repeat("\x84", 9); + QRstr::set($frame, 0, 8, $setPattern); + QRstr::set($frame, $width - 8, 8, $setPattern, 8); + + $yOffset = $width - 8; + + for($y=0; $y<8; $y++,$yOffset++) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + + // Timing pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + if($version >= 7) { + $vinf = self::getVersionPattern($version); + + $v = $vinf; + + for($x=0; $x<6; $x++) { + for($y=0; $y<3; $y++) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + + $v = $vinf; + for($y=0; $y<6; $y++) { + for($x=0; $x<3; $x++) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


        '; + echo join("
        ", $frame); + echo '






'; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
", $frame); + echo "
"; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + if(!isset(self::$frames[$version])) { + + $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + self::$frames[$version] = self::unserial(file_get_contents($fileName)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } + + + +//---- qrimage.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + $col[0] = ImageColorAllocate($base_image,255,255,255); + $col[1] = ImageColorAllocate($base_image,0,0,0); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } + + + +//---- qrinput.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input encoding class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __construct($mode, $size, $data, $bstream = null) + { + $setData = array_slice($data, 0, $size); + + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); + } + + if(!QRinput::check($mode, $size, $setData)) { + throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $words = (int)($this->size / 3); + $bs = new QRbitstream(); + + $val = 0x1; + $bs->appendNum(4, $val); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; + $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; + $val += (ord($this->data[$i*3+2]) - ord('0')); + $bs->appendNum(10, $val); + } + + if($this->size - $words * 3 == 1) { + $val = ord($this->data[$words*3]) - ord('0'); + $bs->appendNum(4, $val); + } else if($this->size - $words * 3 == 2) { + $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; + $val += (ord($this->data[$words*3+1]) - ord('0')); + $bs->appendNum(7, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $words = (int)($this->size / 2); + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x02); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; + $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); + + $bs->appendNum(11, $val); + } + + if($this->size & 1) { + $val = QRinput::lookAnTable(ord($this->data[$words * 2])); + $bs->appendNum(6, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x4); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); + + for($i=0; $i<$this->size; $i++) { + $bs->appendNum(8, ord($this->data[$i])); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $bs = new QRbitrtream(); + + $bs->appendNum(4, 0x8); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); + + for($i=0; $i<$this->size; $i+=2) { + $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); + if($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x03); + $bs->appendNum(4, ord($this->data[1]) - 1); + $bs->appendNum(4, ord($this->data[0]) - 1); + $bs->appendNum(8, ord($this->data[2])); + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + unset($this->bstream); + $words = QRspec::maximumWords($this->mode, $version); + + if($this->size > $words) { + + $st1 = new QRinputItem($this->mode, $words, $this->data); + $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); + + $st1->encodeBitStream($version); + $st2->encodeBitStream($version); + + $this->bstream = new QRbitstream(); + $this->bstream->append($st1->bstream); + $this->bstream->append($st2->bstream); + + unset($st1); + unset($st2); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __construct($version = 0, $level = QR_ECLEVEL_L) + { + if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { + throw new Exception('Invalid version no'); + return NULL; + } + + $this->version = $version; + $this->level = $level; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 0; + + foreach($this->items as $item) { + if($item->mode != QR_MODE_STRUCTURE) { + for($i=$item->size-1; $i>=0; $i--) { + $parity ^= $item->data[$i]; + } + } + } + + return $parity; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function checkModeKanji($size, $data) + { + if($size & 1) + return false; + + for($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if( $val < 0x8140 + || ($val > 0x9ffc && $val < 0xe040) + || $val > 0xebbf) { + return false; + } + } + + return true; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($prev); + $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + + return $version; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + + + + +//---- qrbitstream.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Bitstream class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } + + + + +//---- qrsplit.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input splitting classes + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } + + + +//---- qrrscode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Reed-Solomon error correction support + * + * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + * (libfec is released under the GNU Lesser General Public License.) + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } + + + +//---- qrmask.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Masking + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } + + + + +//---- qrencode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Main encoder classes. + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } + + From b0b8d799e7f7dd4de405443f3ca686872693b3b1 Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Thu, 25 Dec 2014 11:08:53 +0800 Subject: [PATCH 015/128] update --- php/jiathis_demo/details_page.html | 28 --------------------- php/jiathis_demo/list_page_one.html | 28 --------------------- php/jiathis_demo/list_page_two.html | 39 ----------------------------- 3 files changed, 95 deletions(-) delete mode 100755 php/jiathis_demo/details_page.html delete mode 100755 php/jiathis_demo/list_page_one.html delete mode 100755 php/jiathis_demo/list_page_two.html diff --git a/php/jiathis_demo/details_page.html b/php/jiathis_demo/details_page.html deleted file mode 100755 index c6a7a7a..0000000 --- a/php/jiathis_demo/details_page.html +++ /dev/null @@ -1,28 +0,0 @@ - - - -详情页底部分享jiathis - - - -
- - - -
- - - - - \ No newline at end of file diff --git a/php/jiathis_demo/list_page_one.html b/php/jiathis_demo/list_page_one.html deleted file mode 100755 index fbbb0fd..0000000 --- a/php/jiathis_demo/list_page_one.html +++ /dev/null @@ -1,28 +0,0 @@ - - - -单页面单组分享代码块 JIATHIS> - - - -
-分享 - -
- - - - - - \ No newline at end of file diff --git a/php/jiathis_demo/list_page_two.html b/php/jiathis_demo/list_page_two.html deleted file mode 100755 index afbc872..0000000 --- a/php/jiathis_demo/list_page_two.html +++ /dev/null @@ -1,39 +0,0 @@ - - - -单个页面添加多组分享代码块 JIATHIS - - -
-
- 分享 - -
-
- -
-
- 分享 - -
-
- - - - - \ No newline at end of file From 4eabdd5e62768d7e4fb4e16b0f51cd9d84da20f2 Mon Sep 17 00:00:00 2001 From: laucie <517834118@qq.com> Date: Thu, 25 Dec 2014 11:12:01 +0800 Subject: [PATCH 016/128] =?UTF-8?q?add=20jiathis=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- php/jiathis_demo/details_page.html | 28 +++++++++++++++++++++ php/jiathis_demo/list_page_one.html | 28 +++++++++++++++++++++ php/jiathis_demo/list_page_two.html | 39 +++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100755 php/jiathis_demo/details_page.html create mode 100755 php/jiathis_demo/list_page_one.html create mode 100755 php/jiathis_demo/list_page_two.html diff --git a/php/jiathis_demo/details_page.html b/php/jiathis_demo/details_page.html new file mode 100755 index 0000000..c6a7a7a --- /dev/null +++ b/php/jiathis_demo/details_page.html @@ -0,0 +1,28 @@ + + + +详情页底部分享jiathis + + + +
+ + + +
+ + + + + \ No newline at end of file diff --git a/php/jiathis_demo/list_page_one.html b/php/jiathis_demo/list_page_one.html new file mode 100755 index 0000000..fbbb0fd --- /dev/null +++ b/php/jiathis_demo/list_page_one.html @@ -0,0 +1,28 @@ + + + +单页面单组分享代码块 JIATHIS> + + + +
+分享 + +
+ + + + + + \ No newline at end of file diff --git a/php/jiathis_demo/list_page_two.html b/php/jiathis_demo/list_page_two.html new file mode 100755 index 0000000..afbc872 --- /dev/null +++ b/php/jiathis_demo/list_page_two.html @@ -0,0 +1,39 @@ + + + +单个页面添加多组分享代码块 JIATHIS + + +
+
+ 分享 + +
+
+ +
+
+ 分享 + +
+
+ + + + + \ No newline at end of file From e201e9ba2c5c9db2a39288b1dadddd5c5c9623c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E4=BA=9A=E8=B6=85?= <512383711@qq.com> Date: Mon, 5 Jan 2015 14:59:37 +0800 Subject: [PATCH 017/128] Update readme.md --- php/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/php/readme.md b/php/readme.md index 7f73305..9d8626c 100644 --- a/php/readme.md +++ b/php/readme.md @@ -4,3 +4,4 @@ email_demo -- php发送email-demo
jiathis_demo -- js的jiathis分享插件demo
qrcode_demo -- php二维码生成插件demo
common_function.php -- 公共函数汇总
+pic_switch_demo -- js的图片轮状
From 0e564196ecd3d36fd4c8ac675a92d22cb4c5d5e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E4=BA=9A=E8=B6=85?= <512383711@qq.com> Date: Mon, 5 Jan 2015 15:04:07 +0800 Subject: [PATCH 018/128] Update readme.md --- php/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/readme.md b/php/readme.md index 9d8626c..86821c3 100644 --- a/php/readme.md +++ b/php/readme.md @@ -4,4 +4,4 @@ email_demo -- php发送email-demo
jiathis_demo -- js的jiathis分享插件demo
qrcode_demo -- php二维码生成插件demo
common_function.php -- 公共函数汇总
-pic_switch_demo -- js的图片轮状
+pic_switch_demo -- js的图片轮转demo
From 319046d6f43ac49743e256afad3917aa143edc8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E4=BA=9A=E8=B6=85?= <512383711@qq.com> Date: Mon, 5 Jan 2015 14:57:47 +0800 Subject: [PATCH 019/128] add pic_switch_demo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit js的图片轮转demo --- php/pic_switch_demo/images/1.jpg | Bin 0 -> 93623 bytes php/pic_switch_demo/images/11.jpg | Bin 0 -> 3066 bytes php/pic_switch_demo/images/2.jpg | Bin 0 -> 93362 bytes php/pic_switch_demo/images/3.jpg | Bin 0 -> 457380 bytes php/pic_switch_demo/pic_switch.html | 103 + .../static/ckeditor/CHANGES.md | 705 ++ .../static/ckeditor/LICENSE.md | 1264 +++ php/pic_switch_demo/static/ckeditor/README.md | 39 + .../static/ckeditor/adapters/jquery.js | 10 + .../static/ckeditor/build-config.js | 180 + .../static/ckeditor/ckeditor.js | 1018 ++ .../ckeditor/ckfinder/_samples/ckeditor.html | 69 + .../ckeditor/ckfinder/_samples/fckeditor.html | 70 + .../ckeditor/ckfinder/_samples/index.html | 56 + .../ckfinder/_samples/php/ckeditor.php | 90 + .../ckfinder/_samples/php/fckeditor.php | 69 + .../ckeditor/ckfinder/_samples/php/popup.php | 37 + .../ckeditor/ckfinder/_samples/php/popups.php | 37 + .../ckfinder/_samples/php/standalone.php | 84 + .../ckeditor/ckfinder/_samples/popup.html | 68 + .../ckeditor/ckfinder/_samples/popups.html | 118 + .../ckfinder/_samples/public_api.html | 128 + .../ckeditor/ckfinder/_samples/sample.css | 171 + .../ckfinder/_samples/standalone.html | 87 + .../ckfinder/_samples/standalone_v1.html | 90 + .../static/ckeditor/ckfinder/changelog.txt | 210 + .../static/ckeditor/ckfinder/ckfinder.html | 143 + .../static/ckeditor/ckfinder/ckfinder.js | 7 + .../static/ckeditor/ckfinder/ckfinder.php | 14 + .../static/ckeditor/ckfinder/ckfinder_v1.js | 8 + .../static/ckeditor/ckfinder/config.js | 17 + .../static/ckeditor/ckfinder/config.php | 341 + .../ckeditor/ckfinder/core/ckfinder_php5.php | 231 + .../ckfinder/core/connector/php/connector.php | 106 + .../ckfinder/core/connector/php/constants.php | 76 + .../201412/Images/art1213023158806.jpg | Bin 0 -> 1912 bytes .../article/201412images/art1213023158806.jpg | Bin 0 -> 11584 bytes .../ckfinder/core/connector/php/lang/bg.php | 36 + .../ckfinder/core/connector/php/lang/ca.php | 36 + .../ckfinder/core/connector/php/lang/cs.php | 36 + .../ckfinder/core/connector/php/lang/cy.php | 36 + .../ckfinder/core/connector/php/lang/da.php | 36 + .../ckfinder/core/connector/php/lang/de.php | 36 + .../ckfinder/core/connector/php/lang/el.php | 36 + .../ckfinder/core/connector/php/lang/en.php | 36 + .../ckfinder/core/connector/php/lang/eo.php | 36 + .../core/connector/php/lang/es-mx.php | 36 + .../ckfinder/core/connector/php/lang/es.php | 36 + .../ckfinder/core/connector/php/lang/et.php | 36 + .../ckfinder/core/connector/php/lang/fa.php | 36 + .../ckfinder/core/connector/php/lang/fi.php | 36 + .../ckfinder/core/connector/php/lang/fr.php | 36 + .../ckfinder/core/connector/php/lang/gu.php | 36 + .../ckfinder/core/connector/php/lang/he.php | 36 + .../ckfinder/core/connector/php/lang/hi.php | 36 + .../ckfinder/core/connector/php/lang/hr.php | 36 + .../ckfinder/core/connector/php/lang/hu.php | 36 + .../ckfinder/core/connector/php/lang/it.php | 36 + .../ckfinder/core/connector/php/lang/ja.php | 36 + .../ckfinder/core/connector/php/lang/lt.php | 36 + .../ckfinder/core/connector/php/lang/lv.php | 36 + .../ckfinder/core/connector/php/lang/nb.php | 36 + .../ckfinder/core/connector/php/lang/nl.php | 36 + .../ckfinder/core/connector/php/lang/nn.php | 36 + .../ckfinder/core/connector/php/lang/no.php | 36 + .../ckfinder/core/connector/php/lang/pl.php | 36 + .../core/connector/php/lang/pt-br.php | 36 + .../ckfinder/core/connector/php/lang/ro.php | 36 + .../ckfinder/core/connector/php/lang/ru.php | 36 + .../ckfinder/core/connector/php/lang/sk.php | 36 + .../ckfinder/core/connector/php/lang/sl.php | 36 + .../ckfinder/core/connector/php/lang/sr.php | 36 + .../ckfinder/core/connector/php/lang/sv.php | 36 + .../ckfinder/core/connector/php/lang/tr.php | 36 + .../ckfinder/core/connector/php/lang/vi.php | 36 + .../core/connector/php/lang/zh-cn.php | 36 + .../core/connector/php/lang/zh-tw.php | 36 + .../CommandHandler/CommandHandlerBase.php | 129 + .../php/php5/CommandHandler/CopyFiles.php | 242 + .../php/php5/CommandHandler/CreateFolder.php | 98 + .../php/php5/CommandHandler/DeleteFiles.php | 162 + .../php/php5/CommandHandler/DeleteFolder.php | 75 + .../php/php5/CommandHandler/DownloadFile.php | 94 + .../php/php5/CommandHandler/FileUpload.php | 198 + .../php/php5/CommandHandler/GetFiles.php | 129 + .../php/php5/CommandHandler/GetFolders.php | 106 + .../php/php5/CommandHandler/Init.php | 172 + .../php/php5/CommandHandler/LoadCookies.php | 72 + .../php/php5/CommandHandler/MoveFiles.php | 265 + .../php/php5/CommandHandler/QuickUpload.php | 50 + .../php/php5/CommandHandler/RenameFile.php | 127 + .../php/php5/CommandHandler/RenameFolder.php | 114 + .../php/php5/CommandHandler/Thumbnail.php | 333 + .../CommandHandler/XmlCommandHandlerBase.php | 119 + .../php/php5/Core/AccessControlConfig.php | 225 + .../core/connector/php/php5/Core/Config.php | 620 ++ .../connector/php/php5/Core/Connector.php | 121 + .../core/connector/php/php5/Core/Factory.php | 68 + .../connector/php/php5/Core/FolderHandler.php | 271 + .../core/connector/php/php5/Core/Hooks.php | 173 + .../connector/php/php5/Core/ImagesConfig.php | 106 + .../core/connector/php/php5/Core/Registry.php | 75 + .../php/php5/Core/ResourceTypeConfig.php | 367 + .../php/php5/Core/ThumbnailsConfig.php | 220 + .../core/connector/php/php5/Core/Xml.php | 130 + .../connector/php/php5/ErrorHandler/Base.php | 86 + .../php/php5/ErrorHandler/FileUpload.php | 84 + .../connector/php/php5/ErrorHandler/Http.php | 73 + .../php/php5/ErrorHandler/QuickUpload.php | 84 + .../connector/php/php5/Utils/FileSystem.php | 772 ++ .../core/connector/php/php5/Utils/Misc.php | 399 + .../connector/php/php5/Utils/Security.php | 75 + .../core/connector/php/php5/Utils/XmlNode.php | 202 + .../ckeditor/ckfinder/help/cs/files/001.html | 32 + .../ckeditor/ckfinder/help/cs/files/002.html | 42 + .../ckeditor/ckfinder/help/cs/files/003.html | 143 + .../ckeditor/ckfinder/help/cs/files/004.html | 243 + .../ckeditor/ckfinder/help/cs/files/005.html | 42 + .../ckeditor/ckfinder/help/cs/files/006.html | 125 + .../ckeditor/ckfinder/help/cs/files/007.html | 30 + .../ckeditor/ckfinder/help/cs/files/008.html | 87 + .../ckeditor/ckfinder/help/cs/files/009.html | 20 + .../ckeditor/ckfinder/help/cs/files/010.html | 34 + .../ckeditor/ckfinder/help/cs/files/011.html | 26 + .../ckeditor/ckfinder/help/cs/files/012.html | 61 + .../ckeditor/ckfinder/help/cs/files/013.html | 36 + .../ckeditor/ckfinder/help/cs/files/014.html | 102 + .../ckeditor/ckfinder/help/cs/files/015.html | 47 + .../ckfinder/help/cs/files/header.html | 34 + .../ckfinder/help/cs/files/license.html | 15 + .../ckfinder/help/cs/files/suggestions.html | 34 + .../ckeditor/ckfinder/help/cs/files/toc.html | 96 + .../ckeditor/ckfinder/help/cs/index.html | 18 + .../ckeditor/ckfinder/help/en/files/001.html | 30 + .../ckeditor/ckfinder/help/en/files/002.html | 41 + .../ckeditor/ckfinder/help/en/files/003.html | 145 + .../ckeditor/ckfinder/help/en/files/004.html | 242 + .../ckeditor/ckfinder/help/en/files/005.html | 43 + .../ckeditor/ckfinder/help/en/files/006.html | 127 + .../ckeditor/ckfinder/help/en/files/007.html | 29 + .../ckeditor/ckfinder/help/en/files/008.html | 90 + .../ckeditor/ckfinder/help/en/files/009.html | 19 + .../ckeditor/ckfinder/help/en/files/010.html | 33 + .../ckeditor/ckfinder/help/en/files/011.html | 25 + .../ckeditor/ckfinder/help/en/files/012.html | 64 + .../ckeditor/ckfinder/help/en/files/013.html | 35 + .../ckeditor/ckfinder/help/en/files/014.html | 101 + .../ckeditor/ckfinder/help/en/files/015.html | 46 + .../ckfinder/help/en/files/header.html | 33 + .../ckfinder/help/en/files/license.html | 15 + .../ckfinder/help/en/files/suggestions.html | 33 + .../ckeditor/ckfinder/help/en/files/toc.html | 95 + .../ckeditor/ckfinder/help/en/index.html | 18 + .../ckfinder/help/es-mx/files/001.html | 24 + .../ckfinder/help/es-mx/files/002.html | 28 + .../ckfinder/help/es-mx/files/003.html | 83 + .../ckfinder/help/es-mx/files/004.html | 68 + .../ckfinder/help/es-mx/files/005.html | 29 + .../ckfinder/help/es-mx/files/006.html | 48 + .../ckfinder/help/es-mx/files/007.html | 19 + .../ckfinder/help/es-mx/files/008.html | 58 + .../ckfinder/help/es-mx/files/009.html | 18 + .../ckfinder/help/es-mx/files/010.html | 23 + .../ckfinder/help/es-mx/files/011.html | 23 + .../ckfinder/help/es-mx/files/012.html | 39 + .../ckfinder/help/es-mx/files/013.html | 28 + .../ckfinder/help/es-mx/files/header.html | 34 + .../ckfinder/help/es-mx/files/images/001.png | Bin 0 -> 34236 bytes .../ckfinder/help/es-mx/files/images/002.gif | Bin 0 -> 67 bytes .../ckfinder/help/es-mx/files/images/003.gif | Bin 0 -> 64 bytes .../ckfinder/help/es-mx/files/images/004.png | Bin 0 -> 619 bytes .../ckfinder/help/es-mx/files/images/005.png | Bin 0 -> 1361 bytes .../ckfinder/help/es-mx/files/images/006.png | Bin 0 -> 3944 bytes .../ckfinder/help/es-mx/files/images/007.png | Bin 0 -> 22551 bytes .../ckfinder/help/es-mx/files/images/008.png | Bin 0 -> 1637 bytes .../ckfinder/help/es-mx/files/images/009.png | Bin 0 -> 1854 bytes .../ckfinder/help/es-mx/files/images/010.gif | Bin 0 -> 1561 bytes .../ckfinder/help/es-mx/files/images/011.png | Bin 0 -> 1895 bytes .../ckfinder/help/es-mx/files/images/012.png | Bin 0 -> 3369 bytes .../ckfinder/help/es-mx/files/images/013.png | Bin 0 -> 4037 bytes .../ckfinder/help/es-mx/files/images/014.gif | Bin 0 -> 3005 bytes .../ckfinder/help/es-mx/files/images/015.gif | Bin 0 -> 3119 bytes .../ckfinder/help/es-mx/files/images/016.gif | Bin 0 -> 3354 bytes .../ckfinder/help/es-mx/files/images/017.gif | Bin 0 -> 3445 bytes .../ckfinder/help/es-mx/files/images/018.png | Bin 0 -> 1269 bytes .../ckfinder/help/es-mx/files/images/019.png | Bin 0 -> 1027 bytes .../ckfinder/help/es-mx/files/images/020.png | Bin 0 -> 370 bytes .../ckfinder/help/es-mx/files/license.html | 16 + .../help/es-mx/files/suggestions.html | 33 + .../ckfinder/help/es-mx/files/toc.html | 92 + .../ckeditor/ckfinder/help/es-mx/index.html | 18 + .../ckeditor/ckfinder/help/es/files/001.html | 25 + .../ckeditor/ckfinder/help/es/files/002.html | 29 + .../ckeditor/ckfinder/help/es/files/003.html | 83 + .../ckeditor/ckfinder/help/es/files/004.html | 69 + .../ckeditor/ckfinder/help/es/files/005.html | 30 + .../ckeditor/ckfinder/help/es/files/006.html | 49 + .../ckeditor/ckfinder/help/es/files/007.html | 20 + .../ckeditor/ckfinder/help/es/files/008.html | 59 + .../ckeditor/ckfinder/help/es/files/009.html | 18 + .../ckeditor/ckfinder/help/es/files/010.html | 24 + .../ckeditor/ckfinder/help/es/files/011.html | 24 + .../ckeditor/ckfinder/help/es/files/012.html | 39 + .../ckeditor/ckfinder/help/es/files/013.html | 29 + .../ckfinder/help/es/files/header.html | 37 + .../ckfinder/help/es/files/images/001.png | Bin 0 -> 34236 bytes .../ckfinder/help/es/files/images/002.gif | Bin 0 -> 67 bytes .../ckfinder/help/es/files/images/003.gif | Bin 0 -> 64 bytes .../ckfinder/help/es/files/images/004.png | Bin 0 -> 619 bytes .../ckfinder/help/es/files/images/005.png | Bin 0 -> 1361 bytes .../ckfinder/help/es/files/images/006.png | Bin 0 -> 3944 bytes .../ckfinder/help/es/files/images/007.png | Bin 0 -> 22551 bytes .../ckfinder/help/es/files/images/008.png | Bin 0 -> 1637 bytes .../ckfinder/help/es/files/images/009.png | Bin 0 -> 1854 bytes .../ckfinder/help/es/files/images/010.gif | Bin 0 -> 1561 bytes .../ckfinder/help/es/files/images/011.png | Bin 0 -> 1895 bytes .../ckfinder/help/es/files/images/012.png | Bin 0 -> 3369 bytes .../ckfinder/help/es/files/images/013.png | Bin 0 -> 4037 bytes .../ckfinder/help/es/files/images/014.gif | Bin 0 -> 3005 bytes .../ckfinder/help/es/files/images/015.gif | Bin 0 -> 3119 bytes .../ckfinder/help/es/files/images/016.gif | Bin 0 -> 3354 bytes .../ckfinder/help/es/files/images/017.gif | Bin 0 -> 3445 bytes .../ckfinder/help/es/files/images/018.png | Bin 0 -> 1269 bytes .../ckfinder/help/es/files/images/019.png | Bin 0 -> 1027 bytes .../ckfinder/help/es/files/images/020.png | Bin 0 -> 370 bytes .../ckfinder/help/es/files/license.html | 17 + .../ckfinder/help/es/files/suggestions.html | 47 + .../ckeditor/ckfinder/help/es/files/toc.html | 93 + .../ckeditor/ckfinder/help/es/index.html | 18 + .../ckeditor/ckfinder/help/fi/files/001.html | 27 + .../ckeditor/ckfinder/help/fi/files/002.html | 34 + .../ckeditor/ckfinder/help/fi/files/003.html | 128 + .../ckeditor/ckfinder/help/fi/files/004.html | 101 + .../ckeditor/ckfinder/help/fi/files/005.html | 35 + .../ckeditor/ckfinder/help/fi/files/006.html | 61 + .../ckeditor/ckfinder/help/fi/files/007.html | 26 + .../ckeditor/ckfinder/help/fi/files/008.html | 70 + .../ckeditor/ckfinder/help/fi/files/009.html | 16 + .../ckeditor/ckfinder/help/fi/files/010.html | 29 + .../ckeditor/ckfinder/help/fi/files/011.html | 30 + .../ckeditor/ckfinder/help/fi/files/012.html | 44 + .../ckeditor/ckfinder/help/fi/files/013.html | 38 + .../ckfinder/help/fi/files/header.html | 34 + .../ckfinder/help/fi/files/images/001.gif | Bin 0 -> 25805 bytes .../ckfinder/help/fi/files/images/002.gif | Bin 0 -> 67 bytes .../ckfinder/help/fi/files/images/003.gif | Bin 0 -> 64 bytes .../ckfinder/help/fi/files/images/004.gif | Bin 0 -> 965 bytes .../ckfinder/help/fi/files/images/005.gif | Bin 0 -> 829 bytes .../ckfinder/help/fi/files/images/006.gif | Bin 0 -> 3451 bytes .../ckfinder/help/fi/files/images/007.gif | Bin 0 -> 30436 bytes .../ckfinder/help/fi/files/images/008.gif | Bin 0 -> 1532 bytes .../ckfinder/help/fi/files/images/009.gif | Bin 0 -> 1397 bytes .../ckfinder/help/fi/files/images/010.gif | Bin 0 -> 1561 bytes .../ckfinder/help/fi/files/images/011.gif | Bin 0 -> 1563 bytes .../ckfinder/help/fi/files/images/012.gif | Bin 0 -> 3669 bytes .../ckfinder/help/fi/files/images/013.gif | Bin 0 -> 3976 bytes .../ckfinder/help/fi/files/images/014.gif | Bin 0 -> 3005 bytes .../ckfinder/help/fi/files/images/015.gif | Bin 0 -> 3119 bytes .../ckfinder/help/fi/files/images/016.gif | Bin 0 -> 3354 bytes .../ckfinder/help/fi/files/images/017.gif | Bin 0 -> 3445 bytes .../ckfinder/help/fi/files/images/018.gif | Bin 0 -> 341 bytes .../ckfinder/help/fi/files/images/019.gif | Bin 0 -> 157 bytes .../ckfinder/help/fi/files/images/020.gif | Bin 0 -> 323 bytes .../ckfinder/help/fi/files/license.html | 16 + .../ckfinder/help/fi/files/suggestions.html | 35 + .../ckeditor/ckfinder/help/fi/files/toc.html | 92 + .../ckeditor/ckfinder/help/fi/index.html | 18 + .../ckfinder/help/files/images/002.gif | Bin 0 -> 67 bytes .../ckfinder/help/files/images/003.gif | Bin 0 -> 64 bytes .../files/images/CKFinder_basket_clear.png | Bin 0 -> 3208 bytes .../files/images/CKFinder_basket_drag.png | Bin 0 -> 17831 bytes .../files/images/CKFinder_basket_empty.png | Bin 0 -> 7529 bytes .../images/CKFinder_basket_file_menu.png | Bin 0 -> 1638 bytes .../files/images/CKFinder_basket_remove.png | Bin 0 -> 3351 bytes .../images/CKFinder_file_already_exists.png | Bin 0 -> 6304 bytes .../files/images/CKFinder_file_copied.png | Bin 0 -> 3268 bytes .../files/images/CKFinder_file_delete.png | Bin 0 -> 4326 bytes .../files/images/CKFinder_file_display_01.png | Bin 0 -> 8270 bytes .../files/images/CKFinder_file_display_02.png | Bin 0 -> 8194 bytes .../files/images/CKFinder_file_display_03.png | Bin 0 -> 8038 bytes .../files/images/CKFinder_file_display_04.png | Bin 0 -> 8074 bytes .../files/images/CKFinder_file_drag_copy.png | Bin 0 -> 919 bytes .../files/images/CKFinder_file_drag_move.png | Bin 0 -> 915 bytes .../help/files/images/CKFinder_file_menu.png | Bin 0 -> 1648 bytes .../help/files/images/CKFinder_file_moved.png | Bin 0 -> 3273 bytes .../help/files/images/CKFinder_file_pane.png | Bin 0 -> 63558 bytes .../files/images/CKFinder_file_rename.png | Bin 0 -> 4240 bytes .../files/images/CKFinder_file_resize.png | Bin 0 -> 21356 bytes .../images/CKFinder_file_resize_both.png | Bin 0 -> 19774 bytes .../files/images/CKFinder_file_resize_new.png | Bin 0 -> 12055 bytes .../images/CKFinder_file_resize_overwrite.png | Bin 0 -> 11659 bytes .../images/CKFinder_file_resize_resized.png | Bin 0 -> 3050 bytes .../CKFinder_file_resize_thumbnails.png | Bin 0 -> 14917 bytes .../images/CKFinder_file_select_hovered.png | Bin 0 -> 18529 bytes .../images/CKFinder_file_select_selected.png | Bin 0 -> 18589 bytes .../CKFinder_file_select_unselected.png | Bin 0 -> 18285 bytes .../files/images/CKFinder_file_view_list.png | Bin 0 -> 2291 bytes .../images/CKFinder_file_view_thumbnails.png | Bin 0 -> 17883 bytes .../files/images/CKFinder_folder_collapse.png | Bin 0 -> 841 bytes .../CKFinder_folder_copied_from_basket.png | Bin 0 -> 2870 bytes .../files/images/CKFinder_folder_delete.png | Bin 0 -> 4345 bytes .../files/images/CKFinder_folder_expand.png | Bin 0 -> 438 bytes .../files/images/CKFinder_folder_loading.png | Bin 0 -> 1669 bytes .../files/images/CKFinder_folder_menu.png | Bin 0 -> 1659 bytes .../CKFinder_folder_moved_from_basket.png | Bin 0 -> 2869 bytes .../help/files/images/CKFinder_folder_new.png | Bin 0 -> 2996 bytes .../files/images/CKFinder_folder_pane.png | Bin 0 -> 1889 bytes .../files/images/CKFinder_folder_rename.png | Bin 0 -> 4353 bytes .../files/images/CKFinder_folder_select.png | Bin 0 -> 1216 bytes .../help/files/images/CKFinder_interface.png | Bin 0 -> 74076 bytes .../help/files/images/CKFinder_menu_arrow.png | Bin 0 -> 153 bytes .../files/images/CKFinder_menu_arrows.png | Bin 0 -> 14125 bytes .../files/images/CKFinder_resize_lock.png | Bin 0 -> 117 bytes .../files/images/CKFinder_resize_reset.png | Bin 0 -> 176 bytes .../files/images/CKFinder_resize_unlock.png | Bin 0 -> 116 bytes .../help/files/images/CKFinder_settings.png | Bin 0 -> 9614 bytes .../files/images/CKFinder_status_empty.png | Bin 0 -> 531 bytes .../files/images/CKFinder_status_file.png | Bin 0 -> 869 bytes .../files/images/CKFinder_status_folder.png | Bin 0 -> 373 bytes .../help/files/images/CKFinder_toolbar.png | Bin 0 -> 2248 bytes .../files/images/CKFinder_toolbar_help.png | Bin 0 -> 3052 bytes .../files/images/CKFinder_toolbar_refresh.png | Bin 0 -> 3170 bytes .../help/files/images/CKFinder_upload_01.png | Bin 0 -> 4939 bytes .../help/files/images/CKFinder_upload_03.png | Bin 0 -> 9288 bytes .../help/files/images/CKFinder_upload_04.png | Bin 0 -> 11241 bytes .../help/files/images/CKFinder_upload_09.png | Bin 0 -> 5445 bytes .../help/files/images/CKFinder_upload_10.png | Bin 0 -> 7123 bytes .../ckfinder/help/files/other/help.css | 62 + .../ckfinder/help/files/other/help.js | 10 + .../ckeditor/ckfinder/help/lt/files/001.html | 28 + .../ckeditor/ckfinder/help/lt/files/002.html | 37 + .../ckeditor/ckfinder/help/lt/files/003.html | 135 + .../ckeditor/ckfinder/help/lt/files/004.html | 101 + .../ckeditor/ckfinder/help/lt/files/005.html | 35 + .../ckeditor/ckfinder/help/lt/files/006.html | 65 + .../ckeditor/ckfinder/help/lt/files/007.html | 30 + .../ckeditor/ckfinder/help/lt/files/008.html | 67 + .../ckeditor/ckfinder/help/lt/files/009.html | 16 + .../ckeditor/ckfinder/help/lt/files/010.html | 30 + .../ckeditor/ckfinder/help/lt/files/011.html | 28 + .../ckeditor/ckfinder/help/lt/files/012.html | 44 + .../ckeditor/ckfinder/help/lt/files/013.html | 36 + .../ckfinder/help/lt/files/header.html | 33 + .../ckfinder/help/lt/files/images/001.gif | Bin 0 -> 27737 bytes .../ckfinder/help/lt/files/images/002.gif | Bin 0 -> 67 bytes .../ckfinder/help/lt/files/images/003.gif | Bin 0 -> 64 bytes .../ckfinder/help/lt/files/images/004.gif | Bin 0 -> 1306 bytes .../ckfinder/help/lt/files/images/005.gif | Bin 0 -> 829 bytes .../ckfinder/help/lt/files/images/006.gif | Bin 0 -> 3115 bytes .../ckfinder/help/lt/files/images/007.gif | Bin 0 -> 30255 bytes .../ckfinder/help/lt/files/images/008.gif | Bin 0 -> 1356 bytes .../ckfinder/help/lt/files/images/009.gif | Bin 0 -> 1095 bytes .../ckfinder/help/lt/files/images/010.gif | Bin 0 -> 1602 bytes .../ckfinder/help/lt/files/images/011.gif | Bin 0 -> 1521 bytes .../ckfinder/help/lt/files/images/012.gif | Bin 0 -> 3943 bytes .../ckfinder/help/lt/files/images/013.gif | Bin 0 -> 8244 bytes .../ckfinder/help/lt/files/images/014.gif | Bin 0 -> 3005 bytes .../ckfinder/help/lt/files/images/015.gif | Bin 0 -> 3119 bytes .../ckfinder/help/lt/files/images/016.gif | Bin 0 -> 3354 bytes .../ckfinder/help/lt/files/images/017.gif | Bin 0 -> 3445 bytes .../ckfinder/help/lt/files/images/018.gif | Bin 0 -> 341 bytes .../ckfinder/help/lt/files/images/019.gif | Bin 0 -> 169 bytes .../ckfinder/help/lt/files/images/020.gif | Bin 0 -> 461 bytes .../ckfinder/help/lt/files/license.html | 15 + .../ckfinder/help/lt/files/suggestions.html | 34 + .../ckeditor/ckfinder/help/lt/files/toc.html | 91 + .../ckeditor/ckfinder/help/lt/index.html | 18 + .../ckeditor/ckfinder/help/pl/files/001.html | 34 + .../ckeditor/ckfinder/help/pl/files/002.html | 42 + .../ckeditor/ckfinder/help/pl/files/003.html | 145 + .../ckeditor/ckfinder/help/pl/files/004.html | 250 + .../ckeditor/ckfinder/help/pl/files/005.html | 43 + .../ckeditor/ckfinder/help/pl/files/006.html | 130 + .../ckeditor/ckfinder/help/pl/files/007.html | 30 + .../ckeditor/ckfinder/help/pl/files/008.html | 89 + .../ckeditor/ckfinder/help/pl/files/009.html | 20 + .../ckeditor/ckfinder/help/pl/files/010.html | 35 + .../ckeditor/ckfinder/help/pl/files/011.html | 29 + .../ckeditor/ckfinder/help/pl/files/012.html | 67 + .../ckeditor/ckfinder/help/pl/files/013.html | 39 + .../ckeditor/ckfinder/help/pl/files/014.html | 103 + .../ckeditor/ckfinder/help/pl/files/015.html | 48 + .../ckfinder/help/pl/files/header.html | 34 + .../ckfinder/help/pl/files/license.html | 15 + .../ckfinder/help/pl/files/suggestions.html | 34 + .../ckeditor/ckfinder/help/pl/files/toc.html | 97 + .../ckeditor/ckfinder/help/pl/index.html | 18 + .../static/ckeditor/ckfinder/install.txt | 8 + .../ckfinder/lang/_translationstatus.txt | 42 + .../static/ckeditor/ckfinder/lang/bg.js | 312 + .../static/ckeditor/ckfinder/lang/ca.js | 312 + .../static/ckeditor/ckfinder/lang/cs.js | 312 + .../static/ckeditor/ckfinder/lang/cy.js | 312 + .../static/ckeditor/ckfinder/lang/da.js | 312 + .../static/ckeditor/ckfinder/lang/de.js | 312 + .../static/ckeditor/ckfinder/lang/el.js | 312 + .../static/ckeditor/ckfinder/lang/en.js | 312 + .../static/ckeditor/ckfinder/lang/eo.js | 312 + .../static/ckeditor/ckfinder/lang/es-mx.js | 312 + .../static/ckeditor/ckfinder/lang/es.js | 312 + .../static/ckeditor/ckfinder/lang/et.js | 312 + .../static/ckeditor/ckfinder/lang/fa.js | 312 + .../static/ckeditor/ckfinder/lang/fi.js | 313 + .../static/ckeditor/ckfinder/lang/fr.js | 312 + .../static/ckeditor/ckfinder/lang/gu.js | 312 + .../static/ckeditor/ckfinder/lang/he.js | 312 + .../static/ckeditor/ckfinder/lang/hi.js | 312 + .../static/ckeditor/ckfinder/lang/hr.js | 312 + .../static/ckeditor/ckfinder/lang/hu.js | 312 + .../static/ckeditor/ckfinder/lang/it.js | 312 + .../static/ckeditor/ckfinder/lang/ja.js | 312 + .../static/ckeditor/ckfinder/lang/lt.js | 312 + .../static/ckeditor/ckfinder/lang/lv.js | 312 + .../static/ckeditor/ckfinder/lang/nb.js | 312 + .../static/ckeditor/ckfinder/lang/nl.js | 312 + .../static/ckeditor/ckfinder/lang/nn.js | 312 + .../static/ckeditor/ckfinder/lang/no.js | 312 + .../static/ckeditor/ckfinder/lang/pl.js | 312 + .../static/ckeditor/ckfinder/lang/pt-br.js | 312 + .../static/ckeditor/ckfinder/lang/ro.js | 312 + .../static/ckeditor/ckfinder/lang/ru.js | 312 + .../static/ckeditor/ckfinder/lang/sk.js | 312 + .../static/ckeditor/ckfinder/lang/sl.js | 312 + .../static/ckeditor/ckfinder/lang/sr.js | 313 + .../static/ckeditor/ckfinder/lang/sv.js | 312 + .../static/ckeditor/ckfinder/lang/tr.js | 315 + .../static/ckeditor/ckfinder/lang/vi.js | 312 + .../static/ckeditor/ckfinder/lang/zh-cn.js | 312 + .../static/ckeditor/ckfinder/lang/zh-tw.js | 312 + .../static/ckeditor/ckfinder/license.txt | 271 + .../ckfinder/plugins/dummy/lang/en.js | 14 + .../ckfinder/plugins/dummy/lang/pl.js | 14 + .../ckeditor/ckfinder/plugins/dummy/plugin.js | 72 + .../plugins/fileeditor/codemirror/LICENSE | 19 + .../codemirror/addon/mode/overlay.js | 70 + .../fileeditor/codemirror/lib/codemirror.css | 270 + .../fileeditor/codemirror/lib/codemirror.js | 7339 +++++++++++++ .../fileeditor/codemirror/mode/clike/clike.js | 437 + .../fileeditor/codemirror/mode/css/css.js | 701 ++ .../codemirror/mode/htmlmixed/htmlmixed.js | 117 + .../codemirror/mode/javascript/javascript.js | 652 ++ .../codemirror/mode/markdown/markdown.js | 760 ++ .../fileeditor/codemirror/mode/perl/perl.js | 827 ++ .../fileeditor/codemirror/mode/php/php.js | 140 + .../codemirror/mode/python/python.js | 388 + .../fileeditor/codemirror/mode/rst/rst.js | 575 + .../fileeditor/codemirror/mode/ruby/ruby.js | 261 + .../fileeditor/codemirror/mode/sass/sass.js | 342 + .../fileeditor/codemirror/mode/sql/sql.js | 389 + .../fileeditor/codemirror/mode/stex/stex.js | 258 + .../fileeditor/codemirror/mode/xml/xml.js | 349 + .../ckfinder/plugins/fileeditor/plugin.js | 270 + .../ckfinder/plugins/fileeditor/plugin.php | 101 + .../plugins/flashupload/Uploader.html | 146 + .../plugins/flashupload/flash/Uploader.swf | Bin 0 -> 260902 bytes .../plugins/gallery/colorbox/colorbox.css | 69 + .../gallery/colorbox/images/border.png | Bin 0 -> 112 bytes .../gallery/colorbox/images/controls.png | Bin 0 -> 2893 bytes .../images/ie6/borderBottomCenter.png | Bin 0 -> 111 bytes .../colorbox/images/ie6/borderBottomLeft.png | Bin 0 -> 215 bytes .../colorbox/images/ie6/borderBottomRight.png | Bin 0 -> 217 bytes .../colorbox/images/ie6/borderMiddleLeft.png | Bin 0 -> 108 bytes .../colorbox/images/ie6/borderMiddleRight.png | Bin 0 -> 108 bytes .../colorbox/images/ie6/borderTopCenter.png | Bin 0 -> 111 bytes .../colorbox/images/ie6/borderTopLeft.png | Bin 0 -> 216 bytes .../colorbox/images/ie6/borderTopRight.png | Bin 0 -> 214 bytes .../gallery/colorbox/images/loading.gif | Bin 0 -> 9427 bytes .../colorbox/images/loading_background.png | Bin 0 -> 157 bytes .../gallery/colorbox/images/overlay.png | Bin 0 -> 182 bytes .../gallery/colorbox/jquery.colorbox-min.js | 7 + .../plugins/gallery/colorbox/jquery.min.js | 6 + .../plugins/gallery/colorbox/license.txt | 29 + .../plugins/imageresize/images/mini.gif | Bin 0 -> 183 bytes .../ckfinder/plugins/imageresize/plugin.js | 676 ++ .../ckfinder/plugins/imageresize/plugin.php | 248 + .../ckfinder/plugins/watermark/logo.gif | Bin 0 -> 3325 bytes .../ckfinder/plugins/watermark/plugin.php | 188 + .../ckfinder/plugins/zip/images/zip.gif | Bin 0 -> 235 bytes .../ckeditor/ckfinder/plugins/zip/plugin.php | 945 ++ .../ckeditor/ckfinder/skins/kama/app.css | 16 + .../ckeditor/ckfinder/skins/kama/host.css | 9 + .../ckfinder/skins/kama/images/ckffolder.gif | Bin 0 -> 159 bytes .../skins/kama/images/ckffolderopened.gif | Bin 0 -> 136 bytes .../ckfinder/skins/kama/images/ckfminus.gif | Bin 0 -> 80 bytes .../ckfinder/skins/kama/images/ckfnothumb.gif | Bin 0 -> 143 bytes .../ckfinder/skins/kama/images/ckfplus.gif | Bin 0 -> 85 bytes .../ckfinder/skins/kama/images/icons.png | Bin 0 -> 1407 bytes .../skins/kama/images/icons/16/ai.gif | Bin 0 -> 403 bytes .../skins/kama/images/icons/16/avi.gif | Bin 0 -> 249 bytes .../skins/kama/images/icons/16/bmp.gif | Bin 0 -> 126 bytes .../skins/kama/images/icons/16/cs.gif | Bin 0 -> 128 bytes .../kama/images/icons/16/default.icon.gif | Bin 0 -> 113 bytes .../skins/kama/images/icons/16/dll.gif | Bin 0 -> 132 bytes .../skins/kama/images/icons/16/doc.gif | Bin 0 -> 140 bytes .../skins/kama/images/icons/16/docx.gif | Bin 0 -> 140 bytes .../skins/kama/images/icons/16/exe.gif | Bin 0 -> 109 bytes .../skins/kama/images/icons/16/fla.gif | Bin 0 -> 382 bytes .../skins/kama/images/icons/16/gif.gif | Bin 0 -> 125 bytes .../skins/kama/images/icons/16/jpg.gif | Bin 0 -> 125 bytes .../skins/kama/images/icons/16/js.gif | Bin 0 -> 139 bytes .../skins/kama/images/icons/16/mdb.gif | Bin 0 -> 146 bytes .../skins/kama/images/icons/16/mp3.gif | Bin 0 -> 249 bytes .../skins/kama/images/icons/16/ogg.gif | Bin 0 -> 4209 bytes .../skins/kama/images/icons/16/pdf.gif | Bin 0 -> 230 bytes .../skins/kama/images/icons/16/ppt.gif | Bin 0 -> 139 bytes .../skins/kama/images/icons/16/pptx.gif | Bin 0 -> 139 bytes .../skins/kama/images/icons/16/rdp.gif | Bin 0 -> 606 bytes .../skins/kama/images/icons/16/swf.gif | Bin 0 -> 388 bytes .../skins/kama/images/icons/16/swt.gif | Bin 0 -> 388 bytes .../skins/kama/images/icons/16/txt.gif | Bin 0 -> 122 bytes .../skins/kama/images/icons/16/vsd.gif | Bin 0 -> 136 bytes .../skins/kama/images/icons/16/xls.gif | Bin 0 -> 138 bytes .../skins/kama/images/icons/16/xlsx.gif | Bin 0 -> 138 bytes .../skins/kama/images/icons/16/xml.gif | Bin 0 -> 231 bytes .../skins/kama/images/icons/16/zip.gif | Bin 0 -> 235 bytes .../skins/kama/images/icons/32/ai.gif | Bin 0 -> 1140 bytes .../skins/kama/images/icons/32/avi.gif | Bin 0 -> 454 bytes .../skins/kama/images/icons/32/bmp.gif | Bin 0 -> 709 bytes .../skins/kama/images/icons/32/cs.gif | Bin 0 -> 224 bytes .../kama/images/icons/32/default.icon.gif | Bin 0 -> 177 bytes .../skins/kama/images/icons/32/dll.gif | Bin 0 -> 258 bytes .../skins/kama/images/icons/32/doc.gif | Bin 0 -> 260 bytes .../skins/kama/images/icons/32/docx.gif | Bin 0 -> 260 bytes .../skins/kama/images/icons/32/exe.gif | Bin 0 -> 170 bytes .../skins/kama/images/icons/32/fla.gif | Bin 0 -> 946 bytes .../skins/kama/images/icons/32/gif.gif | Bin 0 -> 704 bytes .../skins/kama/images/icons/32/jpg.gif | Bin 0 -> 463 bytes .../skins/kama/images/icons/32/js.gif | Bin 0 -> 274 bytes .../skins/kama/images/icons/32/mdb.gif | Bin 0 -> 274 bytes .../skins/kama/images/icons/32/mp3.gif | Bin 0 -> 454 bytes .../skins/kama/images/icons/32/ogg.gif | Bin 0 -> 4815 bytes .../skins/kama/images/icons/32/ogg.png | Bin 0 -> 5625 bytes .../skins/kama/images/icons/32/pdf.gif | Bin 0 -> 567 bytes .../skins/kama/images/icons/32/ppt.gif | Bin 0 -> 254 bytes .../skins/kama/images/icons/32/pptx.gif | Bin 0 -> 254 bytes .../skins/kama/images/icons/32/rdp.gif | Bin 0 -> 1493 bytes .../skins/kama/images/icons/32/swf.gif | Bin 0 -> 725 bytes .../skins/kama/images/icons/32/swt.gif | Bin 0 -> 724 bytes .../skins/kama/images/icons/32/txt.gif | Bin 0 -> 213 bytes .../skins/kama/images/icons/32/vsd.gif | Bin 0 -> 277 bytes .../skins/kama/images/icons/32/xls.gif | Bin 0 -> 271 bytes .../skins/kama/images/icons/32/xlsx.gif | Bin 0 -> 271 bytes .../skins/kama/images/icons/32/xml.gif | Bin 0 -> 408 bytes .../skins/kama/images/icons/32/zip.gif | Bin 0 -> 368 bytes .../skins/kama/images/loaders/16x16.gif | Bin 0 -> 673 bytes .../skins/kama/images/loaders/32x32.gif | Bin 0 -> 3630 bytes .../ckfinder/skins/kama/images/spacer.gif | Bin 0 -> 43 bytes .../ckfinder/skins/kama/images/sprites.png | Bin 0 -> 7086 bytes .../skins/kama/images/sprites_ie6.png | Bin 0 -> 2724 bytes .../skins/kama/images/toolbar/add.gif | Bin 0 -> 266 bytes .../kama/images/toolbar/clear_basket.gif | Bin 0 -> 256 bytes .../skins/kama/images/toolbar/delete.gif | Bin 0 -> 256 bytes .../skins/kama/images/toolbar/download.gif | Bin 0 -> 147 bytes .../skins/kama/images/toolbar/help.gif | Bin 0 -> 215 bytes .../skins/kama/images/toolbar/maximize.gif | Bin 0 -> 123 bytes .../skins/kama/images/toolbar/refresh.gif | Bin 0 -> 173 bytes .../skins/kama/images/toolbar/settings.gif | Bin 0 -> 236 bytes .../skins/kama/images/toolbar/view.gif | Bin 0 -> 170 bytes .../ckfinder/skins/kama/richcombo.css | 7 + .../ckeditor/ckfinder/skins/kama/skin.js | 7 + .../ckeditor/ckfinder/skins/kama/uipanel.css | 8 + .../static/ckeditor/ckfinder/skins/v1/app.css | 15 + .../ckeditor/ckfinder/skins/v1/host.css | 8 + .../ckfinder/skins/v1/images/ckffolder.gif | Bin 0 -> 159 bytes .../skins/v1/images/ckffolderopened.gif | Bin 0 -> 136 bytes .../ckfinder/skins/v1/images/ckfminus.gif | Bin 0 -> 80 bytes .../ckfinder/skins/v1/images/ckfnothumb.gif | Bin 0 -> 143 bytes .../ckfinder/skins/v1/images/ckfplus.gif | Bin 0 -> 85 bytes .../ckfinder/skins/v1/images/dialog_sides.gif | Bin 0 -> 48 bytes .../ckfinder/skins/v1/images/dialog_sides.png | Bin 0 -> 178 bytes .../skins/v1/images/dialog_sides_rtl.png | Bin 0 -> 181 bytes .../ckfinder/skins/v1/images/icons.png | Bin 0 -> 4365 bytes .../ckfinder/skins/v1/images/icons/16/ai.gif | Bin 0 -> 403 bytes .../ckfinder/skins/v1/images/icons/16/avi.gif | Bin 0 -> 249 bytes .../ckfinder/skins/v1/images/icons/16/bmp.gif | Bin 0 -> 126 bytes .../ckfinder/skins/v1/images/icons/16/cs.gif | Bin 0 -> 128 bytes .../skins/v1/images/icons/16/default.icon.gif | Bin 0 -> 113 bytes .../ckfinder/skins/v1/images/icons/16/dll.gif | Bin 0 -> 132 bytes .../ckfinder/skins/v1/images/icons/16/doc.gif | Bin 0 -> 140 bytes .../skins/v1/images/icons/16/docx.gif | Bin 0 -> 140 bytes .../ckfinder/skins/v1/images/icons/16/exe.gif | Bin 0 -> 109 bytes .../ckfinder/skins/v1/images/icons/16/fla.gif | Bin 0 -> 382 bytes .../ckfinder/skins/v1/images/icons/16/gif.gif | Bin 0 -> 125 bytes .../ckfinder/skins/v1/images/icons/16/jpg.gif | Bin 0 -> 125 bytes .../ckfinder/skins/v1/images/icons/16/js.gif | Bin 0 -> 139 bytes .../ckfinder/skins/v1/images/icons/16/mdb.gif | Bin 0 -> 146 bytes .../ckfinder/skins/v1/images/icons/16/mp3.gif | Bin 0 -> 249 bytes .../ckfinder/skins/v1/images/icons/16/pdf.gif | Bin 0 -> 230 bytes .../ckfinder/skins/v1/images/icons/16/ppt.gif | Bin 0 -> 139 bytes .../skins/v1/images/icons/16/pptx.gif | Bin 0 -> 139 bytes .../ckfinder/skins/v1/images/icons/16/rdp.gif | Bin 0 -> 606 bytes .../ckfinder/skins/v1/images/icons/16/swf.gif | Bin 0 -> 388 bytes .../ckfinder/skins/v1/images/icons/16/swt.gif | Bin 0 -> 388 bytes .../ckfinder/skins/v1/images/icons/16/txt.gif | Bin 0 -> 122 bytes .../ckfinder/skins/v1/images/icons/16/vsd.gif | Bin 0 -> 136 bytes .../ckfinder/skins/v1/images/icons/16/xls.gif | Bin 0 -> 138 bytes .../skins/v1/images/icons/16/xlsx.gif | Bin 0 -> 138 bytes .../ckfinder/skins/v1/images/icons/16/xml.gif | Bin 0 -> 231 bytes .../ckfinder/skins/v1/images/icons/16/zip.gif | Bin 0 -> 235 bytes .../ckfinder/skins/v1/images/icons/32/ai.gif | Bin 0 -> 1140 bytes .../ckfinder/skins/v1/images/icons/32/avi.gif | Bin 0 -> 454 bytes .../ckfinder/skins/v1/images/icons/32/bmp.gif | Bin 0 -> 709 bytes .../ckfinder/skins/v1/images/icons/32/cs.gif | Bin 0 -> 224 bytes .../skins/v1/images/icons/32/default.icon.gif | Bin 0 -> 177 bytes .../ckfinder/skins/v1/images/icons/32/dll.gif | Bin 0 -> 258 bytes .../ckfinder/skins/v1/images/icons/32/doc.gif | Bin 0 -> 260 bytes .../skins/v1/images/icons/32/docx.gif | Bin 0 -> 260 bytes .../ckfinder/skins/v1/images/icons/32/exe.gif | Bin 0 -> 170 bytes .../ckfinder/skins/v1/images/icons/32/fla.gif | Bin 0 -> 946 bytes .../ckfinder/skins/v1/images/icons/32/gif.gif | Bin 0 -> 704 bytes .../ckfinder/skins/v1/images/icons/32/jpg.gif | Bin 0 -> 463 bytes .../ckfinder/skins/v1/images/icons/32/js.gif | Bin 0 -> 274 bytes .../ckfinder/skins/v1/images/icons/32/mdb.gif | Bin 0 -> 274 bytes .../ckfinder/skins/v1/images/icons/32/mp3.gif | Bin 0 -> 454 bytes .../ckfinder/skins/v1/images/icons/32/pdf.gif | Bin 0 -> 567 bytes .../ckfinder/skins/v1/images/icons/32/ppt.gif | Bin 0 -> 254 bytes .../skins/v1/images/icons/32/pptx.gif | Bin 0 -> 254 bytes .../ckfinder/skins/v1/images/icons/32/rdp.gif | Bin 0 -> 1493 bytes .../ckfinder/skins/v1/images/icons/32/swf.gif | Bin 0 -> 725 bytes .../ckfinder/skins/v1/images/icons/32/swt.gif | Bin 0 -> 724 bytes .../ckfinder/skins/v1/images/icons/32/txt.gif | Bin 0 -> 213 bytes .../ckfinder/skins/v1/images/icons/32/vsd.gif | Bin 0 -> 277 bytes .../ckfinder/skins/v1/images/icons/32/xls.gif | Bin 0 -> 271 bytes .../skins/v1/images/icons/32/xlsx.gif | Bin 0 -> 271 bytes .../ckfinder/skins/v1/images/icons/32/xml.gif | Bin 0 -> 408 bytes .../ckfinder/skins/v1/images/icons/32/zip.gif | Bin 0 -> 368 bytes .../skins/v1/images/loaders/16x16.gif | Bin 0 -> 673 bytes .../skins/v1/images/loaders/32x32.gif | Bin 0 -> 3630 bytes .../ckfinder/skins/v1/images/spacer.gif | Bin 0 -> 43 bytes .../ckfinder/skins/v1/images/sprites.png | Bin 0 -> 5389 bytes .../ckfinder/skins/v1/images/sprites_ie6.png | Bin 0 -> 492 bytes .../ckfinder/skins/v1/images/toolbar/add.gif | Bin 0 -> 266 bytes .../skins/v1/images/toolbar/clear_basket.gif | Bin 0 -> 256 bytes .../skins/v1/images/toolbar/delete.gif | Bin 0 -> 256 bytes .../skins/v1/images/toolbar/download.gif | Bin 0 -> 147 bytes .../ckfinder/skins/v1/images/toolbar/help.gif | Bin 0 -> 215 bytes .../skins/v1/images/toolbar/maximize.gif | Bin 0 -> 123 bytes .../skins/v1/images/toolbar/refresh.gif | Bin 0 -> 173 bytes .../skins/v1/images/toolbar/settings.gif | Bin 0 -> 236 bytes .../ckfinder/skins/v1/images/toolbar/view.gif | Bin 0 -> 170 bytes .../skins/v1/images/toolbar_start.gif | Bin 0 -> 105 bytes .../ckeditor/ckfinder/skins/v1/richcombo.css | 7 + .../static/ckeditor/ckfinder/skins/v1/skin.js | 6 + .../ckeditor/ckfinder/skins/v1/uipanel.css | 8 + .../static/ckeditor/ckfinder/translations.txt | 13 + .../ckeditor/ckfinder/userfiles/.htaccess | 6 + php/pic_switch_demo/static/ckeditor/config.js | 35 + .../static/ckeditor/contents.css | 134 + .../static/ckeditor/lang/af.js | 5 + .../static/ckeditor/lang/ar.js | 5 + .../static/ckeditor/lang/bg.js | 5 + .../static/ckeditor/lang/bn.js | 5 + .../static/ckeditor/lang/bs.js | 5 + .../static/ckeditor/lang/ca.js | 5 + .../static/ckeditor/lang/cs.js | 5 + .../static/ckeditor/lang/cy.js | 5 + .../static/ckeditor/lang/da.js | 5 + .../static/ckeditor/lang/de.js | 5 + .../static/ckeditor/lang/el.js | 5 + .../static/ckeditor/lang/en-au.js | 5 + .../static/ckeditor/lang/en-ca.js | 5 + .../static/ckeditor/lang/en-gb.js | 5 + .../static/ckeditor/lang/en.js | 5 + .../static/ckeditor/lang/eo.js | 5 + .../static/ckeditor/lang/es.js | 5 + .../static/ckeditor/lang/et.js | 5 + .../static/ckeditor/lang/eu.js | 5 + .../static/ckeditor/lang/fa.js | 5 + .../static/ckeditor/lang/fi.js | 5 + .../static/ckeditor/lang/fo.js | 5 + .../static/ckeditor/lang/fr-ca.js | 5 + .../static/ckeditor/lang/fr.js | 5 + .../static/ckeditor/lang/gl.js | 5 + .../static/ckeditor/lang/gu.js | 5 + .../static/ckeditor/lang/he.js | 5 + .../static/ckeditor/lang/hi.js | 5 + .../static/ckeditor/lang/hr.js | 5 + .../static/ckeditor/lang/hu.js | 5 + .../static/ckeditor/lang/id.js | 5 + .../static/ckeditor/lang/is.js | 5 + .../static/ckeditor/lang/it.js | 5 + .../static/ckeditor/lang/ja.js | 5 + .../static/ckeditor/lang/ka.js | 5 + .../static/ckeditor/lang/km.js | 5 + .../static/ckeditor/lang/ko.js | 5 + .../static/ckeditor/lang/ku.js | 5 + .../static/ckeditor/lang/lt.js | 5 + .../static/ckeditor/lang/lv.js | 5 + .../static/ckeditor/lang/mk.js | 5 + .../static/ckeditor/lang/mn.js | 5 + .../static/ckeditor/lang/ms.js | 5 + .../static/ckeditor/lang/nb.js | 5 + .../static/ckeditor/lang/nl.js | 5 + .../static/ckeditor/lang/no.js | 5 + .../static/ckeditor/lang/pl.js | 5 + .../static/ckeditor/lang/pt-br.js | 5 + .../static/ckeditor/lang/pt.js | 5 + .../static/ckeditor/lang/ro.js | 5 + .../static/ckeditor/lang/ru.js | 5 + .../static/ckeditor/lang/si.js | 5 + .../static/ckeditor/lang/sk.js | 5 + .../static/ckeditor/lang/sl.js | 5 + .../static/ckeditor/lang/sq.js | 5 + .../static/ckeditor/lang/sr-latn.js | 5 + .../static/ckeditor/lang/sr.js | 5 + .../static/ckeditor/lang/sv.js | 5 + .../static/ckeditor/lang/th.js | 5 + .../static/ckeditor/lang/tr.js | 5 + .../static/ckeditor/lang/tt.js | 5 + .../static/ckeditor/lang/ug.js | 5 + .../static/ckeditor/lang/uk.js | 5 + .../static/ckeditor/lang/vi.js | 5 + .../static/ckeditor/lang/zh-cn.js | 5 + .../static/ckeditor/lang/zh.js | 5 + .../plugins/a11yhelp/dialogs/a11yhelp.js | 10 + .../dialogs/lang/_translationstatus.txt | 25 + .../plugins/a11yhelp/dialogs/lang/af.js | 11 + .../plugins/a11yhelp/dialogs/lang/ar.js | 11 + .../plugins/a11yhelp/dialogs/lang/bg.js | 11 + .../plugins/a11yhelp/dialogs/lang/ca.js | 13 + .../plugins/a11yhelp/dialogs/lang/cs.js | 13 + .../plugins/a11yhelp/dialogs/lang/cy.js | 11 + .../plugins/a11yhelp/dialogs/lang/da.js | 11 + .../plugins/a11yhelp/dialogs/lang/de.js | 13 + .../plugins/a11yhelp/dialogs/lang/el.js | 13 + .../plugins/a11yhelp/dialogs/lang/en-gb.js | 11 + .../plugins/a11yhelp/dialogs/lang/en.js | 11 + .../plugins/a11yhelp/dialogs/lang/eo.js | 13 + .../plugins/a11yhelp/dialogs/lang/es.js | 12 + .../plugins/a11yhelp/dialogs/lang/et.js | 11 + .../plugins/a11yhelp/dialogs/lang/fa.js | 11 + .../plugins/a11yhelp/dialogs/lang/fi.js | 12 + .../plugins/a11yhelp/dialogs/lang/fr-ca.js | 12 + .../plugins/a11yhelp/dialogs/lang/fr.js | 13 + .../plugins/a11yhelp/dialogs/lang/gl.js | 12 + .../plugins/a11yhelp/dialogs/lang/gu.js | 11 + .../plugins/a11yhelp/dialogs/lang/he.js | 11 + .../plugins/a11yhelp/dialogs/lang/hi.js | 11 + .../plugins/a11yhelp/dialogs/lang/hr.js | 11 + .../plugins/a11yhelp/dialogs/lang/hu.js | 13 + .../plugins/a11yhelp/dialogs/lang/id.js | 11 + .../plugins/a11yhelp/dialogs/lang/it.js | 13 + .../plugins/a11yhelp/dialogs/lang/ja.js | 9 + .../plugins/a11yhelp/dialogs/lang/km.js | 11 + .../plugins/a11yhelp/dialogs/lang/ko.js | 10 + .../plugins/a11yhelp/dialogs/lang/ku.js | 12 + .../plugins/a11yhelp/dialogs/lang/lt.js | 11 + .../plugins/a11yhelp/dialogs/lang/lv.js | 13 + .../plugins/a11yhelp/dialogs/lang/mk.js | 11 + .../plugins/a11yhelp/dialogs/lang/mn.js | 11 + .../plugins/a11yhelp/dialogs/lang/nb.js | 12 + .../plugins/a11yhelp/dialogs/lang/nl.js | 12 + .../plugins/a11yhelp/dialogs/lang/no.js | 11 + .../plugins/a11yhelp/dialogs/lang/pl.js | 13 + .../plugins/a11yhelp/dialogs/lang/pt-br.js | 12 + .../plugins/a11yhelp/dialogs/lang/pt.js | 12 + .../plugins/a11yhelp/dialogs/lang/ro.js | 12 + .../plugins/a11yhelp/dialogs/lang/ru.js | 11 + .../plugins/a11yhelp/dialogs/lang/si.js | 10 + .../plugins/a11yhelp/dialogs/lang/sk.js | 12 + .../plugins/a11yhelp/dialogs/lang/sl.js | 12 + .../plugins/a11yhelp/dialogs/lang/sq.js | 11 + .../plugins/a11yhelp/dialogs/lang/sr-latn.js | 11 + .../plugins/a11yhelp/dialogs/lang/sr.js | 11 + .../plugins/a11yhelp/dialogs/lang/sv.js | 12 + .../plugins/a11yhelp/dialogs/lang/th.js | 11 + .../plugins/a11yhelp/dialogs/lang/tr.js | 12 + .../plugins/a11yhelp/dialogs/lang/tt.js | 11 + .../plugins/a11yhelp/dialogs/lang/ug.js | 11 + .../plugins/a11yhelp/dialogs/lang/uk.js | 12 + .../plugins/a11yhelp/dialogs/lang/vi.js | 11 + .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 9 + .../plugins/a11yhelp/dialogs/lang/zh.js | 9 + .../ckeditor/plugins/about/dialogs/about.js | 7 + .../about/dialogs/hidpi/logo_ckeditor.png | Bin 0 -> 13339 bytes .../plugins/about/dialogs/logo_ckeditor.png | Bin 0 -> 6757 bytes .../plugins/clipboard/dialogs/paste.js | 11 + .../colordialog/dialogs/colordialog.js | 13 + .../plugins/dialog/dialogDefinition.js | 4 + .../ckeditor/plugins/div/dialogs/div.js | 9 + .../ckeditor/plugins/find/dialogs/find.js | 24 + .../ckeditor/plugins/flash/dialogs/flash.js | 24 + .../plugins/flash/images/placeholder.png | Bin 0 -> 256 bytes .../ckeditor/plugins/forms/dialogs/button.js | 8 + .../plugins/forms/dialogs/checkbox.js | 8 + .../ckeditor/plugins/forms/dialogs/form.js | 8 + .../plugins/forms/dialogs/hiddenfield.js | 8 + .../ckeditor/plugins/forms/dialogs/radio.js | 8 + .../ckeditor/plugins/forms/dialogs/select.js | 20 + .../plugins/forms/dialogs/textarea.js | 8 + .../plugins/forms/dialogs/textfield.js | 10 + .../plugins/forms/images/hiddenfield.gif | Bin 0 -> 105 bytes .../static/ckeditor/plugins/icons.png | Bin 0 -> 20833 bytes .../static/ckeditor/plugins/icons_hidpi.png | Bin 0 -> 67753 bytes .../ckeditor/plugins/iframe/dialogs/iframe.js | 10 + .../plugins/iframe/images/placeholder.png | Bin 0 -> 265 bytes .../ckeditor/plugins/image/dialogs/image.js | 43 + .../ckeditor/plugins/image/images/noimage.png | Bin 0 -> 2115 bytes .../ckeditor/plugins/link/dialogs/anchor.js | 7 + .../ckeditor/plugins/link/dialogs/link.js | 26 + .../ckeditor/plugins/link/images/anchor.png | Bin 0 -> 589 bytes .../plugins/link/images/hidpi/anchor.png | Bin 0 -> 1379 bytes .../plugins/liststyle/dialogs/liststyle.js | 10 + .../magicline/images/hidpi/icon-rtl.png | Bin 0 -> 176 bytes .../plugins/magicline/images/hidpi/icon.png | Bin 0 -> 199 bytes .../plugins/magicline/images/icon-rtl.png | Bin 0 -> 138 bytes .../plugins/magicline/images/icon.png | Bin 0 -> 133 bytes .../plugins/pagebreak/images/pagebreak.gif | Bin 0 -> 54 bytes .../plugins/pastefromword/filter/default.js | 31 + .../ckeditor/plugins/preview/preview.html | 13 + .../static/ckeditor/plugins/scayt/LICENSE.md | 28 + .../static/ckeditor/plugins/scayt/README.md | 25 + .../ckeditor/plugins/scayt/dialogs/options.js | 17 + .../plugins/scayt/dialogs/toolbar.css | 71 + .../showblocks/images/block_address.png | Bin 0 -> 152 bytes .../showblocks/images/block_blockquote.png | Bin 0 -> 154 bytes .../plugins/showblocks/images/block_div.png | Bin 0 -> 127 bytes .../plugins/showblocks/images/block_h1.png | Bin 0 -> 120 bytes .../plugins/showblocks/images/block_h2.png | Bin 0 -> 127 bytes .../plugins/showblocks/images/block_h3.png | Bin 0 -> 123 bytes .../plugins/showblocks/images/block_h4.png | Bin 0 -> 123 bytes .../plugins/showblocks/images/block_h5.png | Bin 0 -> 126 bytes .../plugins/showblocks/images/block_h6.png | Bin 0 -> 123 bytes .../plugins/showblocks/images/block_p.png | Bin 0 -> 115 bytes .../plugins/showblocks/images/block_pre.png | Bin 0 -> 128 bytes .../ckeditor/plugins/smiley/dialogs/smiley.js | 10 + .../plugins/smiley/images/angel_smile.gif | Bin 0 -> 1245 bytes .../plugins/smiley/images/angel_smile.png | Bin 0 -> 1172 bytes .../plugins/smiley/images/angry_smile.gif | Bin 0 -> 1219 bytes .../plugins/smiley/images/angry_smile.png | Bin 0 -> 1220 bytes .../plugins/smiley/images/broken_heart.gif | Bin 0 -> 732 bytes .../plugins/smiley/images/broken_heart.png | Bin 0 -> 1139 bytes .../plugins/smiley/images/confused_smile.gif | Bin 0 -> 1202 bytes .../plugins/smiley/images/confused_smile.png | Bin 0 -> 1101 bytes .../plugins/smiley/images/cry_smile.gif | Bin 0 -> 795 bytes .../plugins/smiley/images/cry_smile.png | Bin 0 -> 1214 bytes .../plugins/smiley/images/devil_smile.gif | Bin 0 -> 1239 bytes .../plugins/smiley/images/devil_smile.png | Bin 0 -> 1220 bytes .../smiley/images/embaressed_smile.gif | Bin 0 -> 786 bytes .../smiley/images/embarrassed_smile.gif | Bin 0 -> 786 bytes .../smiley/images/embarrassed_smile.png | Bin 0 -> 1145 bytes .../plugins/smiley/images/envelope.gif | Bin 0 -> 506 bytes .../plugins/smiley/images/envelope.png | Bin 0 -> 760 bytes .../ckeditor/plugins/smiley/images/heart.gif | Bin 0 -> 692 bytes .../ckeditor/plugins/smiley/images/heart.png | Bin 0 -> 999 bytes .../ckeditor/plugins/smiley/images/kiss.gif | Bin 0 -> 683 bytes .../ckeditor/plugins/smiley/images/kiss.png | Bin 0 -> 1003 bytes .../plugins/smiley/images/lightbulb.gif | Bin 0 -> 660 bytes .../plugins/smiley/images/lightbulb.png | Bin 0 -> 919 bytes .../plugins/smiley/images/omg_smile.gif | Bin 0 -> 820 bytes .../plugins/smiley/images/omg_smile.png | Bin 0 -> 1122 bytes .../plugins/smiley/images/regular_smile.gif | Bin 0 -> 1209 bytes .../plugins/smiley/images/regular_smile.png | Bin 0 -> 1084 bytes .../plugins/smiley/images/sad_smile.gif | Bin 0 -> 782 bytes .../plugins/smiley/images/sad_smile.png | Bin 0 -> 1115 bytes .../plugins/smiley/images/shades_smile.gif | Bin 0 -> 1231 bytes .../plugins/smiley/images/shades_smile.png | Bin 0 -> 1204 bytes .../plugins/smiley/images/teeth_smile.gif | Bin 0 -> 1201 bytes .../plugins/smiley/images/teeth_smile.png | Bin 0 -> 1183 bytes .../plugins/smiley/images/thumbs_down.gif | Bin 0 -> 715 bytes .../plugins/smiley/images/thumbs_down.png | Bin 0 -> 985 bytes .../plugins/smiley/images/thumbs_up.gif | Bin 0 -> 714 bytes .../plugins/smiley/images/thumbs_up.png | Bin 0 -> 959 bytes .../plugins/smiley/images/tongue_smile.gif | Bin 0 -> 1210 bytes .../plugins/smiley/images/tongue_smile.png | Bin 0 -> 1132 bytes .../plugins/smiley/images/tounge_smile.gif | Bin 0 -> 1210 bytes .../images/whatchutalkingabout_smile.gif | Bin 0 -> 775 bytes .../images/whatchutalkingabout_smile.png | Bin 0 -> 1039 bytes .../plugins/smiley/images/wink_smile.gif | Bin 0 -> 1202 bytes .../plugins/smiley/images/wink_smile.png | Bin 0 -> 1114 bytes .../dialogs/lang/_translationstatus.txt | 20 + .../plugins/specialchar/dialogs/lang/af.js | 13 + .../plugins/specialchar/dialogs/lang/ar.js | 13 + .../plugins/specialchar/dialogs/lang/bg.js | 13 + .../plugins/specialchar/dialogs/lang/ca.js | 14 + .../plugins/specialchar/dialogs/lang/cs.js | 13 + .../plugins/specialchar/dialogs/lang/cy.js | 14 + .../plugins/specialchar/dialogs/lang/da.js | 13 + .../plugins/specialchar/dialogs/lang/de.js | 13 + .../plugins/specialchar/dialogs/lang/el.js | 13 + .../plugins/specialchar/dialogs/lang/en-gb.js | 13 + .../plugins/specialchar/dialogs/lang/en.js | 13 + .../plugins/specialchar/dialogs/lang/eo.js | 12 + .../plugins/specialchar/dialogs/lang/es.js | 13 + .../plugins/specialchar/dialogs/lang/et.js | 13 + .../plugins/specialchar/dialogs/lang/fa.js | 12 + .../plugins/specialchar/dialogs/lang/fi.js | 13 + .../plugins/specialchar/dialogs/lang/fr-ca.js | 10 + .../plugins/specialchar/dialogs/lang/fr.js | 11 + .../plugins/specialchar/dialogs/lang/gl.js | 13 + .../plugins/specialchar/dialogs/lang/he.js | 12 + .../plugins/specialchar/dialogs/lang/hr.js | 13 + .../plugins/specialchar/dialogs/lang/hu.js | 12 + .../plugins/specialchar/dialogs/lang/id.js | 13 + .../plugins/specialchar/dialogs/lang/it.js | 14 + .../plugins/specialchar/dialogs/lang/ja.js | 9 + .../plugins/specialchar/dialogs/lang/km.js | 13 + .../plugins/specialchar/dialogs/lang/ku.js | 13 + .../plugins/specialchar/dialogs/lang/lt.js | 13 + .../plugins/specialchar/dialogs/lang/lv.js | 13 + .../plugins/specialchar/dialogs/lang/nb.js | 11 + .../plugins/specialchar/dialogs/lang/nl.js | 13 + .../plugins/specialchar/dialogs/lang/no.js | 11 + .../plugins/specialchar/dialogs/lang/pl.js | 12 + .../plugins/specialchar/dialogs/lang/pt-br.js | 11 + .../plugins/specialchar/dialogs/lang/pt.js | 13 + .../plugins/specialchar/dialogs/lang/ru.js | 13 + .../plugins/specialchar/dialogs/lang/si.js | 13 + .../plugins/specialchar/dialogs/lang/sk.js | 13 + .../plugins/specialchar/dialogs/lang/sl.js | 12 + .../plugins/specialchar/dialogs/lang/sq.js | 13 + .../plugins/specialchar/dialogs/lang/sv.js | 11 + .../plugins/specialchar/dialogs/lang/th.js | 13 + .../plugins/specialchar/dialogs/lang/tr.js | 12 + .../plugins/specialchar/dialogs/lang/tt.js | 13 + .../plugins/specialchar/dialogs/lang/ug.js | 13 + .../plugins/specialchar/dialogs/lang/uk.js | 12 + .../plugins/specialchar/dialogs/lang/vi.js | 14 + .../plugins/specialchar/dialogs/lang/zh-cn.js | 9 + .../plugins/specialchar/dialogs/lang/zh.js | 12 + .../specialchar/dialogs/specialchar.js | 14 + .../ckeditor/plugins/table/dialogs/table.js | 21 + .../plugins/tabletools/dialogs/tableCell.js | 17 + .../plugins/templates/dialogs/templates.css | 84 + .../plugins/templates/dialogs/templates.js | 10 + .../plugins/templates/templates/default.js | 6 + .../templates/templates/images/template1.gif | Bin 0 -> 375 bytes .../templates/templates/images/template2.gif | Bin 0 -> 333 bytes .../templates/templates/images/template3.gif | Bin 0 -> 422 bytes .../static/ckeditor/plugins/wsc/LICENSE.md | 28 + .../static/ckeditor/plugins/wsc/README.md | 25 + .../ckeditor/plugins/wsc/dialogs/ciframe.html | 66 + .../plugins/wsc/dialogs/tmpFrameset.html | 52 + .../ckeditor/plugins/wsc/dialogs/wsc.css | 82 + .../ckeditor/plugins/wsc/dialogs/wsc.js | 74 + .../ckeditor/plugins/wsc/dialogs/wsc_ie.js | 11 + .../static/ckeditor/samples/ajax.html | 82 + .../static/ckeditor/samples/api.html | 207 + .../static/ckeditor/samples/appendto.html | 56 + .../samples/assets/inlineall/logo.png | Bin 0 -> 4283 bytes .../assets/outputxhtml/outputxhtml.css | 204 + .../ckeditor/samples/assets/posteddata.php | 59 + .../static/ckeditor/samples/assets/sample.jpg | Bin 0 -> 14449 bytes .../samples/assets/uilanguages/languages.js | 7 + .../ckeditor/samples/datafiltering.html | 401 + .../static/ckeditor/samples/divreplace.html | 141 + .../static/ckeditor/samples/index.html | 128 + .../static/ckeditor/samples/inlineall.html | 311 + .../static/ckeditor/samples/inlinebycode.html | 121 + .../ckeditor/samples/inlinetextarea.html | 110 + .../static/ckeditor/samples/jquery.html | 100 + .../plugins/dialog/assets/my_dialog.js | 48 + .../samples/plugins/dialog/dialog.html | 187 + .../samples/plugins/enterkey/enterkey.html | 103 + .../assets/outputforflash/outputforflash.fla | Bin 0 -> 85504 bytes .../assets/outputforflash/outputforflash.swf | Bin 0 -> 15571 bytes .../assets/outputforflash/swfobject.js | 18 + .../plugins/htmlwriter/outputforflash.html | 280 + .../plugins/htmlwriter/outputhtml.html | 221 + .../samples/plugins/magicline/magicline.html | 206 + .../samples/plugins/toolbar/toolbar.html | 232 + .../samples/plugins/wysiwygarea/fullpage.html | 77 + .../static/ckeditor/samples/readonly.html | 73 + .../ckeditor/samples/replacebyclass.html | 57 + .../ckeditor/samples/replacebycode.html | 56 + .../static/ckeditor/samples/sample.css | 365 + .../static/ckeditor/samples/sample.js | 50 + .../ckeditor/samples/sample_posteddata.php | 16 + .../static/ckeditor/samples/tabindex.html | 75 + .../static/ckeditor/samples/uicolor.html | 69 + .../static/ckeditor/samples/uilanguages.html | 119 + .../static/ckeditor/samples/xhtmlstyle.html | 231 + .../static/ckeditor/skins/moono/dialog.css | 5 + .../static/ckeditor/skins/moono/dialog_ie.css | 5 + .../ckeditor/skins/moono/dialog_ie7.css | 5 + .../ckeditor/skins/moono/dialog_ie8.css | 5 + .../ckeditor/skins/moono/dialog_iequirks.css | 5 + .../static/ckeditor/skins/moono/editor.css | 5 + .../ckeditor/skins/moono/editor_gecko.css | 5 + .../static/ckeditor/skins/moono/editor_ie.css | 5 + .../ckeditor/skins/moono/editor_ie7.css | 5 + .../ckeditor/skins/moono/editor_ie8.css | 5 + .../ckeditor/skins/moono/editor_iequirks.css | 5 + .../static/ckeditor/skins/moono/icons.png | Bin 0 -> 20833 bytes .../ckeditor/skins/moono/icons_hidpi.png | Bin 0 -> 67753 bytes .../ckeditor/skins/moono/images/arrow.png | Bin 0 -> 191 bytes .../ckeditor/skins/moono/images/close.png | Bin 0 -> 468 bytes .../skins/moono/images/hidpi/close.png | Bin 0 -> 1271 bytes .../skins/moono/images/hidpi/lock-open.png | Bin 0 -> 1329 bytes .../skins/moono/images/hidpi/lock.png | Bin 0 -> 1299 bytes .../skins/moono/images/hidpi/refresh.png | Bin 0 -> 1842 bytes .../ckeditor/skins/moono/images/lock-open.png | Bin 0 -> 349 bytes .../ckeditor/skins/moono/images/lock.png | Bin 0 -> 475 bytes .../ckeditor/skins/moono/images/refresh.png | Bin 0 -> 422 bytes .../static/ckeditor/skins/moono/readme.md | 51 + php/pic_switch_demo/static/ckeditor/styles.js | 111 + .../static/css/home_page/info.css | 314 + .../static/css/home_page/ljlj_index.css | 648 ++ .../static/css/home_page/shopBackground.css | 149 + php/pic_switch_demo/static/css/newReview.css | 152 + php/pic_switch_demo/static/css/shop.css | 745 ++ .../static/css/shopBackground.css | 146 + php/pic_switch_demo/static/css/zt_demo.css | 1382 +++ php/pic_switch_demo/static/images/Home_06.gif | Bin 0 -> 1307 bytes php/pic_switch_demo/static/images/Home_09.gif | Bin 0 -> 2320 bytes php/pic_switch_demo/static/images/Home_12.gif | Bin 0 -> 1171 bytes php/pic_switch_demo/static/images/Home_17.gif | Bin 0 -> 2423 bytes php/pic_switch_demo/static/images/big_03.gif | Bin 0 -> 1503 bytes php/pic_switch_demo/static/images/boxtop.jpg | Bin 0 -> 1999 bytes .../static/images/brandLogo.png | Bin 0 -> 902 bytes .../static/images/button_03.png | Bin 0 -> 1037 bytes .../static/images/button_05.png | Bin 0 -> 1032 bytes .../static/images/button_07.png | Bin 0 -> 1037 bytes .../static/images/button_08.png | Bin 0 -> 1035 bytes .../static/images/button_09.png | Bin 0 -> 1032 bytes .../static/images/button_10.png | Bin 0 -> 1032 bytes .../static/images/button_11.png | Bin 0 -> 1035 bytes .../static/images/button_12.png | Bin 0 -> 1032 bytes .../static/images/button_14.gif | Bin 0 -> 1188 bytes .../static/images/button_16.gif | Bin 0 -> 1245 bytes php/pic_switch_demo/static/images/check.png | Bin 0 -> 2922 bytes .../static/images/close_03.gif | Bin 0 -> 1332 bytes .../static/images/data_close.gif | Bin 0 -> 1343 bytes php/pic_switch_demo/static/images/error.png | Bin 0 -> 4900 bytes php/pic_switch_demo/static/images/favicon.ico | Bin 0 -> 3638 bytes .../static/images/home_page/11.jpg | Bin 0 -> 93623 bytes .../static/images/home_page/12.jpg | Bin 0 -> 3066 bytes .../static/images/home_page/Thumbs.db | Bin 0 -> 178688 bytes .../static/images/home_page/a.png | Bin 0 -> 5011 bytes .../static/images/home_page/banner_img_03.jpg | Bin 0 -> 1200 bytes .../static/images/home_page/banner_img_07.png | Bin 0 -> 1136 bytes .../static/images/home_page/banner_img_09.png | Bin 0 -> 1100 bytes .../images/home_page/button_left_03.gif | Bin 0 -> 1552 bytes .../images/home_page/button_left_06.gif | Bin 0 -> 1590 bytes .../images/home_page/button_right_06.gif | Bin 0 -> 1597 bytes .../static/images/home_page/erweima.jpg | Bin 0 -> 36110 bytes .../static/images/home_page/icon_03.gif | Bin 0 -> 1166 bytes .../static/images/home_page/icon_11.gif | Bin 0 -> 1288 bytes .../static/images/home_page/info_02.gif | Bin 0 -> 203675 bytes .../static/images/home_page/info_05.gif | Bin 0 -> 13535 bytes .../static/images/home_page/info_10.gif | Bin 0 -> 30761 bytes .../static/images/home_page/info_14.gif | Bin 0 -> 1355 bytes .../static/images/home_page/info_18.gif | Bin 0 -> 15423 bytes .../static/images/home_page/info_22.gif | Bin 0 -> 1433 bytes .../static/images/home_page/info_24.gif | Bin 0 -> 1347 bytes .../static/images/home_page/info_26.gif | Bin 0 -> 1563 bytes .../images/home_page/info_detail_03.gif | Bin 0 -> 73856 bytes .../images/home_page/info_detail_06.gif | Bin 0 -> 160569 bytes .../images/home_page/info_detail_09.gif | Bin 0 -> 46192 bytes .../images/home_page/info_detail_13.gif | Bin 0 -> 9348 bytes .../images/home_page/info_detail_17.gif | Bin 0 -> 18774 bytes .../static/images/home_page/left_nav_03.png | Bin 0 -> 1876 bytes .../static/images/home_page/left_nav_06.png | Bin 0 -> 1882 bytes .../static/images/home_page/left_nav_bg.gif | Bin 0 -> 1225 bytes .../static/images/home_page/line_06.gif | Bin 0 -> 1175 bytes .../static/images/home_page/picture_logo.png | Bin 0 -> 17928 bytes .../images/home_page/shop_index1_07.png | Bin 0 -> 5133 bytes .../static/images/home_page/shop_index_03.gif | Bin 0 -> 9692 bytes .../static/images/home_page/shop_index_06.gif | Bin 0 -> 1941 bytes .../static/images/home_page/shop_index_07.png | Bin 0 -> 6087 bytes .../static/images/home_page/shop_index_09.gif | Bin 0 -> 1703 bytes .../images/home_page/shop_index_100.gif | Bin 0 -> 6042 bytes .../images/home_page/shop_index_102.gif | Bin 0 -> 6346 bytes .../images/home_page/shop_index_104.gif | Bin 0 -> 6670 bytes .../static/images/home_page/shop_index_11.gif | Bin 0 -> 2194 bytes .../static/images/home_page/shop_index_18.gif | Bin 0 -> 1664 bytes .../static/images/home_page/shop_index_19.gif | Bin 0 -> 1253 bytes .../static/images/home_page/shop_index_22.jpg | Bin 0 -> 1453 bytes .../static/images/home_page/shop_index_30.jpg | Bin 0 -> 1284 bytes .../static/images/home_page/shop_index_34.gif | Bin 0 -> 3866 bytes .../static/images/home_page/shop_index_36.png | Bin 0 -> 1537 bytes .../static/images/home_page/shop_index_40.png | Bin 0 -> 1117 bytes .../static/images/home_page/shop_index_44.png | Bin 0 -> 1118 bytes .../static/images/home_page/shop_index_46.png | Bin 0 -> 1513 bytes .../static/images/home_page/shop_index_65.png | Bin 0 -> 1088 bytes .../static/images/home_page/shop_index_67.png | Bin 0 -> 1066 bytes .../static/images/home_page/shop_index_73.gif | Bin 0 -> 2329 bytes .../static/images/home_page/shop_index_76.gif | Bin 0 -> 2256 bytes .../static/images/home_page/shop_index_79.gif | Bin 0 -> 2240 bytes .../static/images/home_page/shop_index_82.gif | Bin 0 -> 2209 bytes .../static/images/home_page/shop_index_85.gif | Bin 0 -> 2306 bytes .../static/images/home_page/shop_index_93.gif | Bin 0 -> 4177 bytes .../static/images/home_page/shop_index_96.gif | Bin 0 -> 2080 bytes .../static/images/home_page/shop_index_98.gif | Bin 0 -> 3938 bytes .../images/home_page/shop_index_ceshi_03.gif | Bin 0 -> 3723 bytes .../static/images/home_page/toLeft.png | Bin 0 -> 1314 bytes .../static/images/home_page/toRight.png | Bin 0 -> 1319 bytes .../static/images/landing_03.gif | Bin 0 -> 2387 bytes .../static/images/landing_09.gif | Bin 0 -> 2601 bytes php/pic_switch_demo/static/images/listbg.jpg | Bin 0 -> 425 bytes .../static/images/loading_07.gif | Bin 0 -> 2574 bytes php/pic_switch_demo/static/images/logo_03.gif | Bin 0 -> 4519 bytes .../static/images/picviews.png | Bin 0 -> 1384 bytes php/pic_switch_demo/static/images/pl22_37.gif | Bin 0 -> 1305 bytes php/pic_switch_demo/static/images/right.gif | Bin 0 -> 1471 bytes .../static/images/state_14.png | Bin 0 -> 1174 bytes .../static/images/state_15.png | Bin 0 -> 1206 bytes .../static/images/state_17.png | Bin 0 -> 1209 bytes php/pic_switch_demo/static/images/time_03.gif | Bin 0 -> 1332 bytes php/pic_switch_demo/static/images/user_07.jpg | Bin 0 -> 3828 bytes php/pic_switch_demo/static/images/wating.gif | Bin 0 -> 6255 bytes php/pic_switch_demo/static/images/wrong.gif | Bin 0 -> 1330 bytes .../js/My97DatePicker/My97DatePicker.htm | 42 + .../static/js/My97DatePicker/WdatePicker.js | 34 + .../static/js/My97DatePicker/calendar.js | 7 + .../static/js/My97DatePicker/config.js | 12 + .../static/js/My97DatePicker/lang/en.js | 12 + .../static/js/My97DatePicker/lang/zh-cn.js | 12 + .../static/js/My97DatePicker/lang/zh-tw.js | 12 + .../js/My97DatePicker/skin/WdatePicker.css | 10 + .../js/My97DatePicker/skin/datePicker.gif | Bin 0 -> 1043 bytes .../skin/default/datepicker.css | 237 + .../js/My97DatePicker/skin/default/img.gif | Bin 0 -> 1578 bytes .../js/My97DatePicker/skin/whyGreen/bg.jpg | Bin 0 -> 307 bytes .../skin/whyGreen/datepicker.css | 243 + .../js/My97DatePicker/skin/whyGreen/img.gif | Bin 0 -> 1679 bytes .../static/js/changeRowColor.js | 32 + php/pic_switch_demo/static/js/common.js | 131 + .../js/home_page/DD_belatedPNG_0.0.8a-min.js | 13 + .../static/js/home_page/iepng.js | 3 + .../static/js/home_page/jquery-1.7.2.min.js | 4 + .../static/js/home_page/jquery.lazyload.js | 164 + .../static/js/home_page/ljlj_script.js | 241 + .../static/js/home_page/loading.gif | Bin 0 -> 1093 bytes .../static/js/jquery-1.7.2.min.js | 4 + .../static/js/jquery-1.8.1.min.js | 9301 +++++++++++++++++ .../static/js/jquery-1.9.0.min.js | 4 + php/pic_switch_demo/static/js/jquery.js | 4 + php/pic_switch_demo/static/js/jquery.min.map | 1 + .../static/js/lj_easydialog.js | 302 + php/pic_switch_demo/static/js/lj_funself.js | 55 + .../static/js/uploadify/jquery.uploadify.js | 1018 ++ .../js/uploadify/jquery.uploadify.min.js | 23 + .../static/js/uploadify/uploadify.css | 8 + .../static/js/uploadify/uploadify.swf | Bin 0 -> 12767 bytes .../static/js/validation/jquery.validate.js | 1231 +++ .../\350\257\264\346\230\216.txt" | 6 + 1137 files changed, 74389 insertions(+) create mode 100644 php/pic_switch_demo/images/1.jpg create mode 100644 php/pic_switch_demo/images/11.jpg create mode 100644 php/pic_switch_demo/images/2.jpg create mode 100644 php/pic_switch_demo/images/3.jpg create mode 100644 php/pic_switch_demo/pic_switch.html create mode 100644 php/pic_switch_demo/static/ckeditor/CHANGES.md create mode 100644 php/pic_switch_demo/static/ckeditor/LICENSE.md create mode 100644 php/pic_switch_demo/static/ckeditor/README.md create mode 100644 php/pic_switch_demo/static/ckeditor/adapters/jquery.js create mode 100644 php/pic_switch_demo/static/ckeditor/build-config.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckeditor.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/ckeditor.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/fckeditor.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/index.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/ckeditor.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/fckeditor.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popup.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popups.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/standalone.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popup.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popups.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/public_api.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/sample.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone_v1.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/changelog.txt create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder_v1.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/config.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/config.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/ckfinder_php5.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/connector.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/constants.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/img/info/article/201412/Images/art1213023158806.jpg create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/img/info/article/201412images/art1213023158806.jpg create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/bg.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ca.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/cs.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/cy.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/da.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/de.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/el.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/en.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/eo.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/es-mx.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/es.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/et.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fa.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fi.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fr.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/gu.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/he.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hi.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hr.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hu.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/it.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ja.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/lt.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/lv.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nb.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nl.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nn.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/no.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/pl.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/pt-br.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ro.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ru.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sk.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sl.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sr.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sv.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/tr.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/vi.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/zh-cn.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/zh-tw.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CommandHandlerBase.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CopyFiles.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CreateFolder.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DeleteFiles.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DeleteFolder.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DownloadFile.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/FileUpload.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/GetFiles.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/GetFolders.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/Init.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/LoadCookies.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/MoveFiles.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/QuickUpload.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/RenameFile.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/RenameFolder.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/Thumbnail.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/XmlCommandHandlerBase.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/AccessControlConfig.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Config.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Connector.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Factory.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/FolderHandler.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Hooks.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ImagesConfig.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Registry.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ResourceTypeConfig.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ThumbnailsConfig.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Xml.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/Base.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/FileUpload.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/Http.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/QuickUpload.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/FileSystem.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/Misc.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/Security.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/XmlNode.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/001.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/002.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/003.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/004.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/005.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/006.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/007.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/008.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/009.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/010.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/011.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/012.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/013.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/014.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/015.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/header.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/license.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/suggestions.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/toc.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/index.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/001.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/002.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/003.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/004.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/005.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/006.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/007.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/008.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/009.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/010.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/011.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/012.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/013.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/014.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/015.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/header.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/license.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/suggestions.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/toc.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/en/index.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/001.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/002.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/003.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/004.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/005.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/006.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/007.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/008.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/009.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/010.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/011.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/012.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/013.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/header.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/001.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/002.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/003.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/004.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/005.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/006.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/007.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/008.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/009.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/010.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/011.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/012.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/013.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/014.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/015.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/016.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/017.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/018.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/019.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/020.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/license.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/suggestions.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/toc.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/index.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/001.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/002.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/003.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/004.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/005.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/006.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/007.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/008.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/009.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/010.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/011.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/012.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/013.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/header.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/001.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/002.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/003.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/004.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/005.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/006.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/007.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/008.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/009.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/010.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/011.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/012.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/013.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/014.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/015.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/016.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/017.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/018.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/019.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/020.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/license.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/suggestions.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/toc.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/es/index.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/001.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/002.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/003.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/004.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/005.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/006.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/007.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/008.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/009.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/010.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/011.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/012.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/013.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/header.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/001.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/002.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/003.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/004.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/005.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/006.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/007.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/008.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/009.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/010.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/011.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/012.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/013.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/014.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/015.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/016.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/017.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/018.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/019.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/020.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/license.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/suggestions.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/toc.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/index.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/002.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/003.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_basket_clear.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_basket_drag.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_basket_empty.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_basket_file_menu.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_basket_remove.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_already_exists.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_copied.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_delete.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_display_01.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_display_02.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_display_03.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_display_04.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_drag_copy.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_drag_move.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_menu.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_moved.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_pane.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_rename.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize_both.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize_new.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize_overwrite.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize_resized.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize_thumbnails.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_select_hovered.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_select_selected.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_select_unselected.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_view_list.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_view_thumbnails.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_collapse.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_copied_from_basket.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_delete.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_expand.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_loading.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_menu.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_moved_from_basket.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_new.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_pane.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_rename.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_select.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_interface.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_menu_arrow.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_menu_arrows.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_resize_lock.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_resize_reset.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_resize_unlock.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_settings.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_status_empty.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_status_file.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_status_folder.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_toolbar.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_toolbar_help.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_toolbar_refresh.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_upload_01.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_upload_03.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_upload_04.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_upload_09.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_upload_10.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/other/help.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/files/other/help.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/001.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/002.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/003.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/004.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/005.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/006.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/007.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/008.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/009.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/010.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/011.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/012.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/013.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/header.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/001.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/002.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/003.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/004.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/005.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/006.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/007.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/008.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/009.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/010.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/011.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/012.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/013.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/014.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/015.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/016.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/017.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/018.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/019.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/020.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/license.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/suggestions.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/toc.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/index.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/001.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/002.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/003.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/004.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/005.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/006.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/007.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/008.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/009.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/010.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/011.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/012.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/013.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/014.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/015.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/header.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/license.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/suggestions.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/toc.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/index.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/install.txt create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/_translationstatus.txt create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/bg.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/ca.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/cs.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/cy.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/da.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/de.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/el.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/en.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/eo.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/es-mx.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/es.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/et.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/fa.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/fi.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/fr.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/gu.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/he.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/hi.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/hr.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/hu.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/it.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/ja.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/lt.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/lv.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/nb.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/nl.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/nn.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/no.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/pl.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/pt-br.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/ro.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/ru.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/sk.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/sl.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/sr.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/sv.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/tr.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/vi.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/zh-cn.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/lang/zh-tw.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/license.txt create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/lang/en.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/lang/pl.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/plugin.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/LICENSE create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/addon/mode/overlay.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/lib/codemirror.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/lib/codemirror.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/clike/clike.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/css/css.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/htmlmixed/htmlmixed.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/javascript/javascript.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/markdown/markdown.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/perl/perl.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/php/php.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/python/python.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/rst/rst.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/ruby/ruby.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/sass/sass.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/sql/sql.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/stex/stex.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/xml/xml.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/plugin.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/plugin.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/flashupload/Uploader.html create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/flashupload/flash/Uploader.swf create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/colorbox.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/border.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/controls.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderBottomCenter.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderBottomLeft.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderBottomRight.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderMiddleLeft.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderMiddleRight.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderTopCenter.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderTopLeft.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderTopRight.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/loading.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/loading_background.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/overlay.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/jquery.colorbox-min.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/jquery.min.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/license.txt create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/imageresize/images/mini.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/imageresize/plugin.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/imageresize/plugin.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/watermark/logo.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/watermark/plugin.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/zip/images/zip.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/plugins/zip/plugin.php create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/app.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/host.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/ckffolder.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/ckffolderopened.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/ckfminus.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/ckfnothumb.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/ckfplus.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/ai.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/avi.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/bmp.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/cs.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/default.icon.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/dll.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/doc.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/docx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/exe.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/fla.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/gif.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/jpg.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/js.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/mdb.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/mp3.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/ogg.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/pdf.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/ppt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/pptx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/rdp.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/swf.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/swt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/txt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/vsd.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/xls.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/xlsx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/xml.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/16/zip.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/ai.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/avi.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/bmp.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/cs.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/default.icon.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/dll.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/doc.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/docx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/exe.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/fla.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/gif.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/jpg.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/js.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/mdb.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/mp3.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/ogg.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/ogg.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/pdf.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/ppt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/pptx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/rdp.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/swf.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/swt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/txt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/vsd.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/xls.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/xlsx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/xml.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/icons/32/zip.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/loaders/16x16.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/loaders/32x32.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/spacer.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/sprites.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/sprites_ie6.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/toolbar/add.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/toolbar/clear_basket.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/toolbar/delete.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/toolbar/download.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/toolbar/help.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/toolbar/maximize.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/toolbar/refresh.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/toolbar/settings.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/images/toolbar/view.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/richcombo.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/skin.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/kama/uipanel.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/app.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/host.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/ckffolder.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/ckffolderopened.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/ckfminus.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/ckfnothumb.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/ckfplus.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/dialog_sides.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/dialog_sides.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/dialog_sides_rtl.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/ai.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/avi.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/bmp.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/cs.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/default.icon.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/dll.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/doc.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/docx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/exe.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/fla.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/gif.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/jpg.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/js.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/mdb.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/mp3.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/pdf.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/ppt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/pptx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/rdp.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/swf.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/swt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/txt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/vsd.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/xls.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/xlsx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/xml.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/16/zip.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/ai.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/avi.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/bmp.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/cs.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/default.icon.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/dll.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/doc.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/docx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/exe.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/fla.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/gif.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/jpg.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/js.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/mdb.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/mp3.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/pdf.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/ppt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/pptx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/rdp.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/swf.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/swt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/txt.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/vsd.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/xls.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/xlsx.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/xml.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/icons/32/zip.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/loaders/16x16.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/loaders/32x32.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/spacer.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/sprites.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/sprites_ie6.png create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/toolbar/add.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/toolbar/clear_basket.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/toolbar/delete.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/toolbar/download.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/toolbar/help.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/toolbar/maximize.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/toolbar/refresh.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/toolbar/settings.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/toolbar/view.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/images/toolbar_start.gif create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/richcombo.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/skin.js create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/skins/v1/uipanel.css create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/translations.txt create mode 100644 php/pic_switch_demo/static/ckeditor/ckfinder/userfiles/.htaccess create mode 100644 php/pic_switch_demo/static/ckeditor/config.js create mode 100644 php/pic_switch_demo/static/ckeditor/contents.css create mode 100644 php/pic_switch_demo/static/ckeditor/lang/af.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/ar.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/bg.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/bn.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/bs.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/ca.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/cs.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/cy.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/da.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/de.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/el.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/en-au.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/en-ca.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/en-gb.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/en.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/eo.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/es.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/et.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/eu.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/fa.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/fi.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/fo.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/fr-ca.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/fr.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/gl.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/gu.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/he.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/hi.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/hr.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/hu.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/id.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/is.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/it.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/ja.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/ka.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/km.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/ko.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/ku.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/lt.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/lv.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/mk.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/mn.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/ms.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/nb.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/nl.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/no.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/pl.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/pt-br.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/pt.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/ro.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/ru.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/si.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/sk.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/sl.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/sq.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/sr-latn.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/sr.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/sv.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/th.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/tr.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/tt.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/ug.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/uk.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/vi.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/zh-cn.js create mode 100644 php/pic_switch_demo/static/ckeditor/lang/zh.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/af.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/da.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/de.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/el.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/en.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/es.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/et.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/he.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/id.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/it.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/km.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/no.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/si.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/th.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/about/dialogs/about.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/about/dialogs/logo_ckeditor.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/clipboard/dialogs/paste.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/colordialog/dialogs/colordialog.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/dialog/dialogDefinition.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/div/dialogs/div.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/find/dialogs/find.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/flash/dialogs/flash.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/flash/images/placeholder.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/button.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/checkbox.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/form.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/hiddenfield.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/radio.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/select.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/textarea.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/textfield.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/forms/images/hiddenfield.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/icons.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/icons_hidpi.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/iframe/dialogs/iframe.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/iframe/images/placeholder.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/image/dialogs/image.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/image/images/noimage.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/link/dialogs/anchor.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/link/dialogs/link.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/link/images/anchor.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/link/images/hidpi/anchor.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/liststyle/dialogs/liststyle.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/magicline/images/hidpi/icon.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/magicline/images/icon-rtl.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/magicline/images/icon.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/pagebreak/images/pagebreak.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/pastefromword/filter/default.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/preview/preview.html create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/scayt/LICENSE.md create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/scayt/README.md create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/scayt/dialogs/options.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/scayt/dialogs/toolbar.css create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_address.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_blockquote.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_div.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h1.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h2.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h3.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h4.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h5.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h6.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_p.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_pre.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/dialogs/smiley.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/angel_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/angel_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/angry_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/angry_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/broken_heart.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/broken_heart.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/confused_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/confused_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/cry_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/cry_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/devil_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/devil_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/embaressed_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/embarrassed_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/embarrassed_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/envelope.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/envelope.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/heart.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/heart.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/kiss.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/kiss.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/lightbulb.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/lightbulb.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/omg_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/omg_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/regular_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/regular_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/sad_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/sad_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/shades_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/shades_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/teeth_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/teeth_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/thumbs_down.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/thumbs_down.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/thumbs_up.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/thumbs_up.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/tongue_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/tongue_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/tounge_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/wink_smile.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/smiley/images/wink_smile.png create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/af.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ar.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/bg.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ca.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/cs.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/cy.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/da.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/de.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/el.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/en.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/eo.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/es.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/et.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fa.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fi.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fr.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/gl.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/he.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/hr.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/hu.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/id.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/it.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ja.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/km.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ku.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/lt.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/lv.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/nb.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/nl.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/no.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pl.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pt.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ru.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/si.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sk.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sl.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sq.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sv.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/th.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/tr.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/tt.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ug.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/uk.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/vi.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/zh.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/specialchar.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/table/dialogs/table.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/tabletools/dialogs/tableCell.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/templates/dialogs/templates.css create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/templates/dialogs/templates.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/templates/templates/default.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/templates/templates/images/template1.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/templates/templates/images/template2.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/templates/templates/images/template3.gif create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/wsc/LICENSE.md create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/wsc/README.md create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/wsc/dialogs/ciframe.html create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/wsc/dialogs/tmpFrameset.html create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/wsc/dialogs/wsc.css create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/wsc/dialogs/wsc.js create mode 100644 php/pic_switch_demo/static/ckeditor/plugins/wsc/dialogs/wsc_ie.js create mode 100644 php/pic_switch_demo/static/ckeditor/samples/ajax.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/api.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/appendto.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/assets/inlineall/logo.png create mode 100644 php/pic_switch_demo/static/ckeditor/samples/assets/outputxhtml/outputxhtml.css create mode 100644 php/pic_switch_demo/static/ckeditor/samples/assets/posteddata.php create mode 100644 php/pic_switch_demo/static/ckeditor/samples/assets/sample.jpg create mode 100644 php/pic_switch_demo/static/ckeditor/samples/assets/uilanguages/languages.js create mode 100644 php/pic_switch_demo/static/ckeditor/samples/datafiltering.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/divreplace.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/index.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/inlineall.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/inlinebycode.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/inlinetextarea.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/jquery.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/dialog/assets/my_dialog.js create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/dialog/dialog.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/enterkey/enterkey.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/outputforflash.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/outputhtml.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/magicline/magicline.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/toolbar/toolbar.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/plugins/wysiwygarea/fullpage.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/readonly.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/replacebyclass.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/replacebycode.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/sample.css create mode 100644 php/pic_switch_demo/static/ckeditor/samples/sample.js create mode 100644 php/pic_switch_demo/static/ckeditor/samples/sample_posteddata.php create mode 100644 php/pic_switch_demo/static/ckeditor/samples/tabindex.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/uicolor.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/uilanguages.html create mode 100644 php/pic_switch_demo/static/ckeditor/samples/xhtmlstyle.html create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/dialog.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie7.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie8.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/dialog_iequirks.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/editor.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/editor_gecko.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie7.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie8.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/editor_iequirks.css create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/icons.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/icons_hidpi.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/images/arrow.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/images/close.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/images/hidpi/close.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/images/hidpi/lock-open.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/images/hidpi/lock.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/images/hidpi/refresh.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/images/lock-open.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/images/lock.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/images/refresh.png create mode 100644 php/pic_switch_demo/static/ckeditor/skins/moono/readme.md create mode 100644 php/pic_switch_demo/static/ckeditor/styles.js create mode 100644 php/pic_switch_demo/static/css/home_page/info.css create mode 100644 php/pic_switch_demo/static/css/home_page/ljlj_index.css create mode 100644 php/pic_switch_demo/static/css/home_page/shopBackground.css create mode 100644 php/pic_switch_demo/static/css/newReview.css create mode 100644 php/pic_switch_demo/static/css/shop.css create mode 100644 php/pic_switch_demo/static/css/shopBackground.css create mode 100644 php/pic_switch_demo/static/css/zt_demo.css create mode 100644 php/pic_switch_demo/static/images/Home_06.gif create mode 100644 php/pic_switch_demo/static/images/Home_09.gif create mode 100644 php/pic_switch_demo/static/images/Home_12.gif create mode 100644 php/pic_switch_demo/static/images/Home_17.gif create mode 100644 php/pic_switch_demo/static/images/big_03.gif create mode 100644 php/pic_switch_demo/static/images/boxtop.jpg create mode 100644 php/pic_switch_demo/static/images/brandLogo.png create mode 100644 php/pic_switch_demo/static/images/button_03.png create mode 100644 php/pic_switch_demo/static/images/button_05.png create mode 100644 php/pic_switch_demo/static/images/button_07.png create mode 100644 php/pic_switch_demo/static/images/button_08.png create mode 100644 php/pic_switch_demo/static/images/button_09.png create mode 100644 php/pic_switch_demo/static/images/button_10.png create mode 100644 php/pic_switch_demo/static/images/button_11.png create mode 100644 php/pic_switch_demo/static/images/button_12.png create mode 100644 php/pic_switch_demo/static/images/button_14.gif create mode 100644 php/pic_switch_demo/static/images/button_16.gif create mode 100644 php/pic_switch_demo/static/images/check.png create mode 100644 php/pic_switch_demo/static/images/close_03.gif create mode 100644 php/pic_switch_demo/static/images/data_close.gif create mode 100644 php/pic_switch_demo/static/images/error.png create mode 100644 php/pic_switch_demo/static/images/favicon.ico create mode 100644 php/pic_switch_demo/static/images/home_page/11.jpg create mode 100644 php/pic_switch_demo/static/images/home_page/12.jpg create mode 100644 php/pic_switch_demo/static/images/home_page/Thumbs.db create mode 100644 php/pic_switch_demo/static/images/home_page/a.png create mode 100644 php/pic_switch_demo/static/images/home_page/banner_img_03.jpg create mode 100644 php/pic_switch_demo/static/images/home_page/banner_img_07.png create mode 100644 php/pic_switch_demo/static/images/home_page/banner_img_09.png create mode 100644 php/pic_switch_demo/static/images/home_page/button_left_03.gif create mode 100644 php/pic_switch_demo/static/images/home_page/button_left_06.gif create mode 100644 php/pic_switch_demo/static/images/home_page/button_right_06.gif create mode 100644 php/pic_switch_demo/static/images/home_page/erweima.jpg create mode 100644 php/pic_switch_demo/static/images/home_page/icon_03.gif create mode 100644 php/pic_switch_demo/static/images/home_page/icon_11.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_02.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_05.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_10.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_14.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_18.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_22.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_24.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_26.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_detail_03.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_detail_06.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_detail_09.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_detail_13.gif create mode 100644 php/pic_switch_demo/static/images/home_page/info_detail_17.gif create mode 100644 php/pic_switch_demo/static/images/home_page/left_nav_03.png create mode 100644 php/pic_switch_demo/static/images/home_page/left_nav_06.png create mode 100644 php/pic_switch_demo/static/images/home_page/left_nav_bg.gif create mode 100644 php/pic_switch_demo/static/images/home_page/line_06.gif create mode 100644 php/pic_switch_demo/static/images/home_page/picture_logo.png create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index1_07.png create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_03.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_06.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_07.png create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_09.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_100.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_102.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_104.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_11.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_18.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_19.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_22.jpg create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_30.jpg create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_34.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_36.png create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_40.png create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_44.png create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_46.png create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_65.png create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_67.png create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_73.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_76.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_79.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_82.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_85.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_93.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_96.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_98.gif create mode 100644 php/pic_switch_demo/static/images/home_page/shop_index_ceshi_03.gif create mode 100644 php/pic_switch_demo/static/images/home_page/toLeft.png create mode 100644 php/pic_switch_demo/static/images/home_page/toRight.png create mode 100644 php/pic_switch_demo/static/images/landing_03.gif create mode 100644 php/pic_switch_demo/static/images/landing_09.gif create mode 100644 php/pic_switch_demo/static/images/listbg.jpg create mode 100644 php/pic_switch_demo/static/images/loading_07.gif create mode 100644 php/pic_switch_demo/static/images/logo_03.gif create mode 100644 php/pic_switch_demo/static/images/picviews.png create mode 100644 php/pic_switch_demo/static/images/pl22_37.gif create mode 100644 php/pic_switch_demo/static/images/right.gif create mode 100644 php/pic_switch_demo/static/images/state_14.png create mode 100644 php/pic_switch_demo/static/images/state_15.png create mode 100644 php/pic_switch_demo/static/images/state_17.png create mode 100644 php/pic_switch_demo/static/images/time_03.gif create mode 100644 php/pic_switch_demo/static/images/user_07.jpg create mode 100644 php/pic_switch_demo/static/images/wating.gif create mode 100644 php/pic_switch_demo/static/images/wrong.gif create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/My97DatePicker.htm create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/WdatePicker.js create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/calendar.js create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/config.js create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/lang/en.js create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/lang/zh-cn.js create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/lang/zh-tw.js create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/skin/WdatePicker.css create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/skin/datePicker.gif create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/skin/default/datepicker.css create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/skin/default/img.gif create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/skin/whyGreen/bg.jpg create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/skin/whyGreen/datepicker.css create mode 100644 php/pic_switch_demo/static/js/My97DatePicker/skin/whyGreen/img.gif create mode 100644 php/pic_switch_demo/static/js/changeRowColor.js create mode 100644 php/pic_switch_demo/static/js/common.js create mode 100644 php/pic_switch_demo/static/js/home_page/DD_belatedPNG_0.0.8a-min.js create mode 100644 php/pic_switch_demo/static/js/home_page/iepng.js create mode 100644 php/pic_switch_demo/static/js/home_page/jquery-1.7.2.min.js create mode 100644 php/pic_switch_demo/static/js/home_page/jquery.lazyload.js create mode 100644 php/pic_switch_demo/static/js/home_page/ljlj_script.js create mode 100644 php/pic_switch_demo/static/js/home_page/loading.gif create mode 100644 php/pic_switch_demo/static/js/jquery-1.7.2.min.js create mode 100644 php/pic_switch_demo/static/js/jquery-1.8.1.min.js create mode 100644 php/pic_switch_demo/static/js/jquery-1.9.0.min.js create mode 100644 php/pic_switch_demo/static/js/jquery.js create mode 100644 php/pic_switch_demo/static/js/jquery.min.map create mode 100644 php/pic_switch_demo/static/js/lj_easydialog.js create mode 100644 php/pic_switch_demo/static/js/lj_funself.js create mode 100644 php/pic_switch_demo/static/js/uploadify/jquery.uploadify.js create mode 100644 php/pic_switch_demo/static/js/uploadify/jquery.uploadify.min.js create mode 100644 php/pic_switch_demo/static/js/uploadify/uploadify.css create mode 100644 php/pic_switch_demo/static/js/uploadify/uploadify.swf create mode 100644 php/pic_switch_demo/static/js/validation/jquery.validate.js create mode 100644 "php/pic_switch_demo/\350\257\264\346\230\216.txt" diff --git a/php/pic_switch_demo/images/1.jpg b/php/pic_switch_demo/images/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c24f28e66242d82fdc408181d8a0964b9df6ba9 GIT binary patch literal 93623 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

J-B|=ccu#neI_!{2aESFgfxolORL3 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 oCApl1he+ZEzU8i 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�^Yfk*efn=epn&RQ(GM6k(A;`C^O&x3?Z~P^$ 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 Q@LcAP9f6b7>p#E$2N=LESO5S3 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/images/11.jpg b/php/pic_switch_demo/images/11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..379d2ccccd2455f98c7e6d1c9b6c0bc41138afb8 GIT binary patch literal 3066 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 U?0G;^+d@y!g7>jRsSk7PA5wt3vj6}9 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/images/2.jpg b/php/pic_switch_demo/images/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b51738a66eadb77e66d096c16338fb1947a9a03 GIT binary patch literal 93362 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 z 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

>eZ@-SZ)=~ZwAQP@#4fE|+7?hI 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%0DqC#lD4#L4VJ}xPxmGc`m}jp` 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ɚoG@#|5((}2Y(46EH>>o{N0 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%0Astv}(Pz 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 + + + +图片轮转 + + + + + + + +

+
+
    + +
  • + +
  • + +
  • + +
+
    + +
  • +
  • +
  • +
+ +
+ +
+ + + diff --git a/php/pic_switch_demo/static/ckeditor/CHANGES.md b/php/pic_switch_demo/static/ckeditor/CHANGES.md new file mode 100644 index 0000000..12b6062 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/CHANGES.md @@ -0,0 +1,705 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.4.6 + +**Security Updates:** + +* Fixed XSS vulnerability in the HTML parser reported by [Maco Cortes](https://www.facebook.com/Maaacoooo). + + Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode. + +**An upgrade is highly recommended!** + +New Features: + +* [#12501](http://dev.ckeditor.com/ticket/12501): Allowed dashes in element names in the [string format of allowed content rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules-section-string-format). +* [#12550](http://dev.ckeditor.com/ticket/12550): Added the `
` element to the [`CKEDITOR.dtd`](http://docs.ckeditor.com/#!/api/CKEDITOR.dtd). + +Fixed Issues: + +* [#12506](http://dev.ckeditor.com/ticket/12506): [Safari] Fixed: Cannot paste into inline editor if the page has `user-select: none` style. Thanks to [shaohua](https://github.com/shaohua)! +* [#12683](http://dev.ckeditor.com/ticket/12683): Fixed: [Filter](http://docs.ckeditor.com/#!/guide/dev_acf) fails to remove custom tags. Thanks to [timselier](https://github.com/timselier)! +* [#12489](http://dev.ckeditor.com/ticket/12489) and [#12491](http://dev.ckeditor.com/ticket/12491): Fixed: Various issues related to restoring the selection after performing operations on filler character. See the [fixed cases](http://dev.ckeditor.com/ticket/12491#comment:4). +* [#12621](http://dev.ckeditor.com/ticket/12621): Fixed: Cannot remove inline styles (bold, italic, etc.) in empty lines. +* [#12630](http://dev.ckeditor.com/ticket/12630): [Chrome] Fixed: Selection is placed outside the paragraph when the [New Page](http://ckeditor.com/addon/newpage) button is clicked. This patch significantly simplified the way how the initial selection (a selection after the content of the editable is overwritten) is being fixed. That might have fixed many related scenarios in all browsers. +* [#11647](http://dev.ckeditor.com/ticket/11647): Fixed: The [`editor.blur`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-blur) event is not fired on first blur after initializing the inline editor on an already focused element. +* [#12601](http://dev.ckeditor.com/ticket/12601): Fixed: [Strikethrough](http://ckeditor.com/addon/basicstyles) button tooltip spelling. +* [#12546](http://dev.ckeditor.com/ticket/12546): Fixed: The Preview tab in the [Document Properties](http://ckeditor.com/addon/docprops) dialog window is always disabled. +* [#12300](http://dev.ckeditor.com/ticket/12300): Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event fired on first navigation key press after typing. +* [#12141](http://dev.ckeditor.com/ticket/12141): Fixed: List items are lost when indenting a list item with content wrapped with a block element. +* [#12515](http://dev.ckeditor.com/ticket/12515): Fixed: Cursor is in the wrong position when undoing after adding an image and typing some text. +* [#12484](http://dev.ckeditor.com/ticket/12484): [Blink/Webkit] Fixed: DOM is changed outside the editor area in a certain case. +* [#12688](http://dev.ckeditor.com/ticket/12688): Improved the tests of the [styles system](http://docs.ckeditor.com/#!/api/CKEDITOR.style) and fixed two minor issues. +* [#12403](http://dev.ckeditor.com/ticket/12403): Fixed: Changing the [font](http://ckeditor.com/addon/font) style should not lead to nesting it in the previous style element. +* [#12609](http://dev.ckeditor.com/ticket/12609): Fixed: Incorrect `config.magicline_putEverywhere` name used for a [Magic Line](http://ckeditor.com/addon/magicline) all-encompassing [`config.magicline_everywhere`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-magicline_everywhere) configuration option. + + +## CKEditor 4.4.5 + +New Features: + +* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant). + +Fixed Issues: + +* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position. +* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)! +* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)! +* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `` tag is not created when `` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)! +* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)! +* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables. +* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated. +* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as "code snippet" (translatable). +* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `` elements. +* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy. +* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). +* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu. +* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor. +* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys. +* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body. +* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity. +* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode. +* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images. + + +## CKEditor 4.4.4 + +Fixed Issues: + +* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)! +* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word]((http://ckeditor.com/addon/pastefromword)) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others: + * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. + * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys. + * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin. +* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments. +* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*. +* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking. +* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented "Unspecified Error" thrown in various cases when IE8-9 does not allow access to `document.activeElement`. +* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it. +* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files. +* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it. +* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar. +* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator. +* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets. +* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `` in Compatibility Mode will no longer reset selection to the first line. +* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). +* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor. +* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image. + + +Other Changes: + +* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository. + +## CKEditor 4.4.3 + +**Security Updates:** + +* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/). + +**An upgrade is highly recommended!** + +New Features: + +* [#12164](http://dev.ckeditor.com/ticket/12164): Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window. + +Fixed Issues: + +* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: *Enter* key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)! +* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows. +* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed. +* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements). +* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available. +* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `` tags should be allowed everywhere, including inside the `` element. +* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified. + +## CKEditor 4.4.2 + +Important Notes: + +* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide. + Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/). + +New Features: + +* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots. + +Fixed Issues: + +* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)! +* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)! +* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration. +* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link. +* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved. +* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData). +* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside. +* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case). +* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click. +* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated. +* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `` elements created when joining adjacent elements (non-collapsed selection). +* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin. +* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role="radiogroup"` should be applied only to radio inputs' container. +* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell. +* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks. +* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine. +* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`. +* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions. +* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget. +* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script. +* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method. +* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node. + +## CKEditor 4.4.1 + +New Features: + +* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute. + +Fixed Issues: + +* [#11861](http://dev.ckeditor.com/ticket/11861): [Webkit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release. +* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [Webkit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)! +* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)! +* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `` element. +* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `` element. +* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample. +* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes. +* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor. +* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget. +* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width. +* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass). +* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)). +* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu. +* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode. +* [#11822](http://dev.ckeditor.com/ticket/11822): [Webkit] Fixed: Editing anchors by double-click is broken in some cases. +* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar. +* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window. +* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`. +* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table. +* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not "on" when clicking it while the editor is blurred. +* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly. +* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute. +* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin. +* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border. + +Other Changes: + +* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0. +* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer. +* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces. + +## CKEditor 4.4 + +**Important Notes:** + +* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated. +* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class="caption">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations. +* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them. +* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)). +* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided. + +New Features: + +* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties — `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features: + * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers. + * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods. + * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive). + * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules). +* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin: + * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images. + * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes. + If this setting is defined, the editor produces classes instead of inline styles for aligned images. + * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string. +* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type. +* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format. +* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). +* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far — the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library. +* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)). +* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles). +* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities. +* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source. + +Other Changes: + +* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects). +* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code. +* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that: + * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property. + * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event. + * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)). +* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version. + +Fixed Issues: + +* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div. +* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked. + +## CKEditor 4.3.5 + +New Features: + +* Added new translation: Tatar. + +Fixed Issues: + +* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode. +* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work. + +## CKEditor 4.3.4 + +Fixed Issues: + +* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard. +* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements. +* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache. +* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item. +* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable. +* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `"` or `'`. +* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin. +* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table. +* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor. +* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change. + +## CKEditor 4.3.3 + +Fixed Issues: + +* [#11500](http://dev.ckeditor.com/ticket/11500): [Webkit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root). +* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets. +* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method. +* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak). +* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior. +* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure. +* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab. +* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode. +* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered. +* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin. +* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row. +* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values. +* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast. +* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely. +* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument. +* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+. +* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set. +* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output. +* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). +* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected. + +## CKEditor 4.3.2 + +Fixed Issues: + +* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute. +* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements: + * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty. + * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues. + * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations. + * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization. +* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor. +* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements: + * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support. + * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support. +* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe. +* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl). +* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables. +* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin. +* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted. +* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached. +* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable. +* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode. +* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace. +* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode. +* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar. +* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget. +* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library. +* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable. +* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)). +* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor. +* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin. +* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on. +* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8. +* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables. +* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs. +* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly. +* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window. + +## CKEditor 4.3.1 + +**Important Notes:** + +* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)). +* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)). + +Fixed Issues: + +* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event. +* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method. +* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder. +* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu. +* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option. +* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor. +* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions. +* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes. +* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image. +* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image. +* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading. +* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget. +* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details. +* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer. +* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode. +* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item. +* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back. +* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more. +* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked. +* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle. +* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements. +* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors. +* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word. +* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded. +* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled. +* [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop. + +## CKEditor 4.3 + +New Features: + +* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support. +* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin. +* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle. +* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin. +* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems. +* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration. +* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets. +* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements: + * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)), + * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)), + * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)), + * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)), + * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)), + * fixing other minor bugs. +* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget. +* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter. +* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language. +* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields. +* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter). +* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG. + +Fixed Issues: + +* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget. +* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle. +* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image. +* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change. +* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables. +* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable. +* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused. +* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables. +* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample. +* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty. +* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor. +* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content. +* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System. +* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly. +* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset. +* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event. +* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin. +* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused. +* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu. +* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets. +* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System. +* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method. +* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop. +* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions. +* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data. +* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`. +* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea). + +## CKEditor 4.3 Beta + +New Features: + +* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System. + * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget). + * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties – normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). + * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content. + * Dynamic *Enter* mode values – [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode). + * Dynamic content filter instances – [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property. + * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method. + * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method. + * Dozens of new methods were introduced – most interesting ones: + * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find), + * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne), + * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange), + * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition), + * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element). +* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing. +* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget. +* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html). +* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley). + +## CKEditor 4.2.3 + +Fixed Issues: + +* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file. +* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette. +* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed. +* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline). +* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'. + +## CKEditor 4.2.2 + +Fixed Issues: + +* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs. +* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row. +* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret. +* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked. +* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified. +* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame. +* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area. +* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style. +* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin. +* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration. +* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842). +* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707). +* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced. +* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label. + +## CKEditor 4.2.1 + +Fixed Issues: + +* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error. +* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance. +* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core. +* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word. +* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word. +* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog. +* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used. +* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode. +* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases. +* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element. +* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list. +* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced. +* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration. +* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally. + +## CKEditor 4.2 + +**Important Notes:** + +* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6. + +* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder). + +New Features: + +* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock). +* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists. +* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906). +* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor. +* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. +* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added. +* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements — introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event. +* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor. + +Fixed Issues: + +* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin. +* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors. +* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData). + +## CKEditor 4.1.3 + +New Features: + +* Added new translation: Indonesian. + +Fixed Issues: + +* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers. +* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close". +* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin. +* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). +* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows. + +## CKEditor 4.1.2 + +New Features: + +* Added new translation: Sinhala. + +Fixed Issues: + +* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing. +* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts. +* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted. +* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered. +* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly). +* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files. +* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR). +* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows. +* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels. +* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances. +* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad. +* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template. +* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style. + +## CKEditor 4.1.1 + +New Features: + +* Added new translation: Albanian. + +Fixed Issues: + +* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell. +* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event. +* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin. +* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start. +* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view. +* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor). +* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode). +* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering. +* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed. +* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured. +* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases. +* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop. +* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state. +* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat). + +## CKEditor 4.1 + +Fixed Issues: + +* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases. +* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format. +* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore. +* Minor issues in plugin integration with Advanced Content Filter: + * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter. + * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter. + * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined. + +## CKEditor 4.1 RC + +New Features: + +* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration. + + Brand new data filtering system that works in 2 modes: + + * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its + current configuration can handle. + * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data + will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed. + + See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter). +* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances. +* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation. +* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances. +* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing. +* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string. +* Included in [#10103](http://dev.ckeditor.com/ticket/10103): + * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor. + * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized. +* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5. + +## CKEditor 4.0.3 + +Fixed Issues: + +* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled. +* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view. +* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy). + +## CKEditor 4.0.2 + +Fixed Issues: + +* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`. +* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins). +* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order. +* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set. +* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window. +* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin. +* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable. +* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll. +* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag. +* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode. +* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available. +* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors. +* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable. +* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes. +* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time. +* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases. +* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set. +* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release. +* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items. + +## CKEditor 4.0.1.1 + +Fixed Issues: + +* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample. + +## CKEditor 4.0.1 + +Fixed Issues: + +* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono). +* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). +* [Magic Line](http://ckeditor.com/addon/magicline) plugin: + * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line. + * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms. + * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case. +* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers. +* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word. +* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. +* Context menu: + * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus. + * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar. + * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element. +* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window. +* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space. +* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements. +* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types. +* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window. +* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly. +* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell. +* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog. +* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window. +* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`. +* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button. +* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified. +* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode. +* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images. +* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements. +* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles. +* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools). +* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window. +* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting. +* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs. +* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options. +* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor. +* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works. +* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration. +* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker. + + +## CKEditor 4.0 + +The first stable release of the new CKEditor 4 code line. + +The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever +possible. The list of relevant changes can be found in the [API Changes page of +the CKEditor 4 documentation][1]. + +[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes" diff --git a/php/pic_switch_demo/static/ckeditor/LICENSE.md b/php/pic_switch_demo/static/ckeditor/LICENSE.md new file mode 100644 index 0000000..0a239d2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/LICENSE.md @@ -0,0 +1,1264 @@ +Software License Agreement +========================== + +CKEditor - The text editor for Internet - http://ckeditor.com +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. In any case, your choice will not restrict any +recipient of your version of this software to use, reproduce, modify +and distribute this software under any of the above licenses. + +Sources of Intellectual Property Included in CKEditor +----------------------------------------------------- + +Where not otherwise indicated, all CKEditor content is authored by +CKSource engineers and consists of CKSource-owned intellectual +property. In some specific instances, CKEditor will incorporate work +done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand +and product names are trademarks, registered trademarks or service +marks of their respective holders. + +--- + +Appendix A: The GPL License +--------------------------- + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix B: The LGPL License +---------------------------- + +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix C: The MPL License +--------------------------- + +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] diff --git a/php/pic_switch_demo/static/ckeditor/README.md b/php/pic_switch_demo/static/ckeditor/README.md new file mode 100644 index 0000000..c5a55cd --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/README.md @@ -0,0 +1,39 @@ +CKEditor 4 +========== + +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +http://ckeditor.com - See LICENSE.md for license information. + +CKEditor is a text editor to be used inside web pages. It's not a replacement +for desktop text editors like Word or OpenOffice, but a component to be used as +part of web applications and websites. + +## Documentation + +The full editor documentation is available online at the following address: +http://docs.ckeditor.com + +## Installation + +Installing CKEditor is an easy task. Just follow these simple steps: + + 1. **Download** the latest version from the CKEditor website: + http://ckeditor.com. You should have already completed this step, but be + sure you have the very latest version. + 2. **Extract** (decompress) the downloaded file into the root of your website. + +**Note:** CKEditor is by default installed in the `ckeditor` folder. You can +place the files in whichever you want though. + +## Checking Your Installation + +The editor comes with a few sample pages that can be used to verify that +installation proceeded properly. Take a look at the `samples` directory. + +To test your installation, just call the following page at your website: + + http://<your site>/<CKEditor installation path>/samples/index.html + +For example: + + http://www.example.com/ckeditor/samples/index.html diff --git a/php/pic_switch_demo/static/ckeditor/adapters/jquery.js b/php/pic_switch_demo/static/ckeditor/adapters/jquery.js new file mode 100644 index 0000000..3ec908b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/adapters/jquery.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(a){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof a&&(a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b= +a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock", +!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit(); +return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee, +100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}}),CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k=this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise()); +return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}})))})(window.jQuery); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/build-config.js b/php/pic_switch_demo/static/ckeditor/build-config.js new file mode 100644 index 0000000..5a0c1ce --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/build-config.js @@ -0,0 +1,180 @@ +/** + * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * This file was added automatically by CKEditor builder. + * You may re-use it at any time to build CKEditor again. + * + * If you would like to build CKEditor online again + * (for example to upgrade), visit one the following links: + * + * (1) http://ckeditor.com/builder + * Visit online builder to build CKEditor from scratch. + * + * (2) http://ckeditor.com/builder/e6b8a045f8f984a69463975ca3e6524a + * Visit online builder to build CKEditor, starting with the same setup as before. + * + * (3) http://ckeditor.com/builder/download/e6b8a045f8f984a69463975ca3e6524a + * Straight download link to the latest version of CKEditor (Optimized) with the same setup as before. + * + * NOTE: + * This file is not used by CKEditor, you may remove it. + * Changing this file will not change your CKEditor configuration. + */ + +var CKBUILDER_CONFIG = { + skin: 'moono', + preset: 'full', + ignore: [ + '.bender', + 'bender.js', + 'bender-err.log', + 'bender-out.log', + 'dev', + '.DS_Store', + '.gitattributes', + '.gitignore', + 'Gruntfile.js', + 'gruntfile.js', + '.idea', + '.jscsrc', + '.jshintignore', + '.jshintrc', + '.mailmap', + 'node_modules', + 'package.json', + 'README.md', + 'tests' + ], + plugins : { + 'a11yhelp' : 1, + 'about' : 1, + 'basicstyles' : 1, + 'bidi' : 1, + 'blockquote' : 1, + 'clipboard' : 1, + 'colorbutton' : 1, + 'colordialog' : 1, + 'contextmenu' : 1, + 'dialogadvtab' : 1, + 'div' : 1, + 'elementspath' : 1, + 'enterkey' : 1, + 'entities' : 1, + 'filebrowser' : 1, + 'find' : 1, + 'flash' : 1, + 'floatingspace' : 1, + 'font' : 1, + 'format' : 1, + 'forms' : 1, + 'horizontalrule' : 1, + 'htmlwriter' : 1, + 'iframe' : 1, + 'image' : 1, + 'indentblock' : 1, + 'indentlist' : 1, + 'justify' : 1, + 'language' : 1, + 'link' : 1, + 'list' : 1, + 'liststyle' : 1, + 'magicline' : 1, + 'maximize' : 1, + 'newpage' : 1, + 'pagebreak' : 1, + 'pastefromword' : 1, + 'pastetext' : 1, + 'preview' : 1, + 'print' : 1, + 'removeformat' : 1, + 'resize' : 1, + 'save' : 1, + 'scayt' : 1, + 'selectall' : 1, + 'showblocks' : 1, + 'showborders' : 1, + 'smiley' : 1, + 'sourcearea' : 1, + 'specialchar' : 1, + 'stylescombo' : 1, + 'tab' : 1, + 'table' : 1, + 'tabletools' : 1, + 'templates' : 1, + 'toolbar' : 1, + 'undo' : 1, + 'wsc' : 1, + 'wysiwygarea' : 1 + }, + languages : { + 'af' : 1, + 'ar' : 1, + 'bg' : 1, + 'bn' : 1, + 'bs' : 1, + 'ca' : 1, + 'cs' : 1, + 'cy' : 1, + 'da' : 1, + 'de' : 1, + 'el' : 1, + 'en' : 1, + 'en-au' : 1, + 'en-ca' : 1, + 'en-gb' : 1, + 'eo' : 1, + 'es' : 1, + 'et' : 1, + 'eu' : 1, + 'fa' : 1, + 'fi' : 1, + 'fo' : 1, + 'fr' : 1, + 'fr-ca' : 1, + 'gl' : 1, + 'gu' : 1, + 'he' : 1, + 'hi' : 1, + 'hr' : 1, + 'hu' : 1, + 'id' : 1, + 'is' : 1, + 'it' : 1, + 'ja' : 1, + 'ka' : 1, + 'km' : 1, + 'ko' : 1, + 'ku' : 1, + 'lt' : 1, + 'lv' : 1, + 'mk' : 1, + 'mn' : 1, + 'ms' : 1, + 'nb' : 1, + 'nl' : 1, + 'no' : 1, + 'pl' : 1, + 'pt' : 1, + 'pt-br' : 1, + 'ro' : 1, + 'ru' : 1, + 'si' : 1, + 'sk' : 1, + 'sl' : 1, + 'sq' : 1, + 'sr' : 1, + 'sr-latn' : 1, + 'sv' : 1, + 'th' : 1, + 'tr' : 1, + 'tt' : 1, + 'ug' : 1, + 'uk' : 1, + 'vi' : 1, + 'zh' : 1, + 'zh-cn' : 1 + } +}; \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/ckeditor.js b/php/pic_switch_demo/static/ckeditor/ckeditor.js new file mode 100644 index 0000000..2bedfd2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckeditor.js @@ -0,0 +1,1018 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,e={timestamp:"EAPE",version:"4.4.6",revision:"08188c4",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var f=window.CKEDITOR_BASEPATH||"";if(!f)for(var d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var b=d[c].src.match(a);if(b){f=b[1];break}}-1==f.indexOf(":/")&&"//"!=f.slice(0,2)&&(f=0===f.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+ +f:location.href.match(/^[^\?]*\/(?:)/)[0]+f);if(!f)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return f}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&("/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a))&&(a+=(0<=a.indexOf("?")?"&":"?")+"t="+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded", +a,!1),d()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),d())}catch(c){}}function d(){for(var a;a=c.shift();)a()}var c=[];return function(d){function b(){try{document.documentElement.doScroll("left")}catch(m){setTimeout(b,1);return}a()}c.push(d);"complete"===document.readyState&&setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange", +a);window.attachEvent("onload",a);d=!1;try{d=!window.frameElement}catch(e){}document.documentElement.doScroll&&d&&b()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=e.getUrl;e.getUrl=function(a){return b.call(e,a)||c.call(e,a)}}return e}()); +CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var e=CKEDITOR.event.prototype,b;for(b in e)a[b]==null&&(a[b]=e[b])},CKEDITOR.event.prototype=function(){function a(a){var f=e(this);return f[a]||(f[a]=new b(a))}var e=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var f=0,d=this.listeners;f<d.length;f++)if(d[f].fn==a)return f;return-1}}; +return{define:function(b,f){var d=a.call(this,b);CKEDITOR.tools.extend(d,f,true)},on:function(b,f,d,e,l){function i(a,m,t,j){a={name:b,sender:this,editor:a,data:m,listenerData:e,stop:t,cancel:j,removeListener:g};return f.call(d,a)===false?false:a.data}function g(){t.removeListener(b,f)}var m=a.call(this,b);if(m.getListenerIndex(f)<0){m=m.listeners;d||(d=this);isNaN(l)&&(l=10);var t=this;i.fn=f;i.priority=l;for(var s=m.length-1;s>=0;s--)if(m[s].priority<=l){m.splice(s+1,0,i);return{removeListener:g}}m.unshift(i)}return{removeListener:g}}, +once:function(){var a=Array.prototype.slice.call(arguments),f=a[1];a[1]=function(a){a.removeListener();return f.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,f=function(){a=1},d=0,b=function(){d=1};return function(l,i,g){var m=e(this)[l],l=a,t=d;a=d=0;if(m){var s=m.listeners;if(s.length)for(var s=s.slice(0),y,p=0;p<s.length;p++){if(m.errorProof)try{y= +s[p].call(this,g,i,f,b)}catch(q){}else y=s[p].call(this,g,i,f,b);y===false?d=1:typeof y!="undefined"&&(i=y);if(a||d)break}}i=d?false:typeof i=="undefined"?true:i;a=l;d=t;return i}}(),fireOnce:function(a,f,d){f=this.fire(a,f,d);delete e(this)[a];return f},removeListener:function(a,f){var d=e(this)[a];if(d){var b=d.getListenerIndex(f);b>=0&&d.listeners.splice(b,1)}},removeAllListeners:function(){var a=e(this),f;for(f in a)delete a[f]},hasListeners:function(a){return(a=e(this)[a])&&a.listeners.length> +0}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,e,this)},CKEDITOR.editor.prototype.fireOnce=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,e,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); +CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),e={ie:a.indexOf("trident/")>-1,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,d=window.location.hostname;return a!=d&&a!="["+d+"]"},secure:location.protocol== +"https:"};e.gecko=navigator.product=="Gecko"&&!e.webkit&&!e.ie;if(e.webkit)a.indexOf("chrome")>-1?e.chrome=true:e.safari=true;var b=0;if(e.ie){b=e.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;e.ie9Compat=b==9;e.ie8Compat=b==8;e.ie7Compat=b==7;e.ie6Compat=b<7||e.quirks}if(e.gecko){var c=a.match(/rv:([\d\.]+)/);if(c){c=c[1].split(".");b=c[0]*1E4+(c[1]||0)*100+(c[2]||0)*1}}e.air&&(b=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));e.webkit&&(b=parseFloat(a.match(/ applewebkit\/(\d+)/)[1])); +e.version=b;e.isCompatible=e.iOS&&b>=534||!e.mobile&&(e.ie&&b>6||e.gecko&&b>=2E4||e.air&&b>=1||e.webkit&&b>=522||false);e.hidpi=window.devicePixelRatio>=2;e.needsBrFiller=e.gecko||e.webkit||e.ie&&b>10;e.needsNbspFiller=e.ie&&b<11;e.cssClass="cke_browser_"+(e.ie?"ie":e.gecko?"gecko":e.webkit?"webkit":"unknown");if(e.quirks)e.cssClass=e.cssClass+" cke_browser_quirks";if(e.ie)e.cssClass=e.cssClass+(" cke_browser_ie"+(e.quirks?"6 cke_browser_iequirks":e.version));if(e.air)e.cssClass=e.cssClass+" cke_browser_air"; +if(e.iOS)e.cssClass=e.cssClass+" cke_browser_ios";if(e.hidpi)e.cssClass=e.cssClass+" cke_hidpi";return e}()); +"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a= +CKEDITOR.loadFullCore,e=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():e&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},e*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={}; +(function(){var a=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,f=/</g,d=/"/g,h=/&/g,l=/>/g,i=/</g,g=/"/g;CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,f){if(!a&&!f)return true;if(!a||!f||a.length!=f.length)return false;for(var d=0;d<a.length;d++)if(a[d]!=f[d])return false;return true},clone:function(a){var f;if(a&&a instanceof Array){f=[];for(var d=0;d<a.length;d++)f[d]=CKEDITOR.tools.clone(a[d]); +return f}if(a===null||typeof a!="object"||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;f=new a.constructor;for(d in a)f[d]=CKEDITOR.tools.clone(a[d]);return f},capitalize:function(a,f){return a.charAt(0).toUpperCase()+(f?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var f=arguments.length,d,b;if(typeof(d=arguments[f-1])=="boolean")f--;else if(typeof(d=arguments[f-2])=="boolean"){b=arguments[f-1]; +f=f-2}for(var c=1;c<f;c++){var e=arguments[c],j;for(j in e)if(d===true||a[j]==null)if(!b||j in b)a[j]=e[j]}return a},prototypedCopy:function(a){var f=function(){};f.prototype=a;return new f},copy:function(a){var f={},d;for(d in a)f[d]=a[d];return f},isArray:function(a){return Object.prototype.toString.call(a)=="[object Array]"},isEmpty:function(a){for(var f in a)if(a.hasOwnProperty(f))return false;return true},cssVendorPrefix:function(a,f,d){if(d)return e+a+":"+f+";"+a+":"+f;d={};d[a]=f;d[e+a]=f; +return d},cssStyleToDomStyle:function(){var a=document.createElement("div").style,f=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a=="float"?f:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a=[].concat(a),f,d=[],b=0;b<a.length;b++)if(f=a[b])/@import|[{}]/.test(f)?d.push("<style>"+f+"</style>"):d.push('<link type="text/css" rel=stylesheet href="'+f+'">');return d.join("")}, +htmlEncode:function(a){return(""+a).replace(b,"&").replace(c,">").replace(f,"<")},htmlDecode:function(a){return a.replace(h,"&").replace(l,">").replace(i,"<")},htmlEncodeAttr:function(a){return a.replace(d,""").replace(f,"<").replace(c,">")},htmlDecodeAttr:function(a){return a.replace(g,'"').replace(i,"<").replace(l,">")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,f){var d=f(a);d.prototype= +a.prototype;return d},setTimeout:function(a,f,d,b,c){c||(c=window);d||(d=c);return c.setTimeout(function(){b?a.apply(d,[].concat(b)):a.apply(d)},f||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(f){return f.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(f){return f.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(f){return f.replace(a,"")}}(),indexOf:function(a,f){if(typeof f=="function")for(var d=0,b=a.length;d<b;d++){if(f(a[d]))return d}else{if(a.indexOf)return a.indexOf(f); +d=0;for(b=a.length;d<b;d++)if(a[d]===f)return d}return-1},search:function(a,f){var d=CKEDITOR.tools.indexOf(a,f);return d>=0?a[d]:null},bind:function(a,f){return function(){return a.apply(f,arguments)}},createClass:function(a){var f=a.$,d=a.base,b=a.privates||a._,c=a.proto,a=a.statics;!f&&(f=function(){d&&this.base.apply(this,arguments)});if(b)var e=f,f=function(){var a=this._||(this._={}),f;for(f in b){var d=b[f];a[f]=typeof d=="function"?CKEDITOR.tools.bind(d,this):d}e.apply(this,arguments)};if(d){f.prototype= +this.prototypedCopy(d.prototype);f.prototype.constructor=f;f.base=d;f.baseProto=d.prototype;f.prototype.base=function(){this.base=d.prototype.base;d.apply(this,arguments);this.base=arguments.callee}}c&&this.extend(f.prototype,c,true);a&&this.extend(f,a,true);return f},addFunction:function(f,d){return a.push(function(){return f.apply(d||this,arguments)})-1},removeFunction:function(f){a[f]=null},callFunction:function(f){var d=a[f];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a= +/^-?\d+\.?\d*px$/,f;return function(d){f=CKEDITOR.tools.trim(d+"")+"px";return a.test(f)?f:d||""}}(),convertToPx:function(){var a;return function(f){if(!a){a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(f)){a.setStyle("width",f);return a.$.clientWidth}return f}}(),repeat:function(a,f){return Array(f+1).join(a)},tryThese:function(){for(var a, +f=0,d=arguments.length;f<d;f++){var b=arguments[f];try{a=b();break}catch(c){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var f=arguments,d=this;window.setTimeout(function(){a.apply(d,f)},0)}},normalizeCssText:function(a,f){var d=[],b,c=CKEDITOR.tools.parseCssText(a,true,f);for(b in c)d.push(b+":"+c[b]);d.sort();return d.length?d.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, +function(a,f,d,b){a=[f,d,b];for(f=0;f<3;f++)a[f]=("0"+parseInt(a[f],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a,f,d){var b={};if(d){d=new CKEDITOR.dom.element("span");d.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(d.getAttribute("style")||"")}if(!a||a==";")return b;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,d,m){if(f){d=d.toLowerCase();d=="font-family"&&(m=m.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,",")); +m=CKEDITOR.tools.trim(m)}b[d]=m});return b},writeCssText:function(a,f){var d,b=[];for(d in a)b.push(d+":"+a[d]);f&&b.sort();return b.join("; ")},objectCompare:function(a,f,d){var b;if(!a&&!f)return true;if(!a||!f)return false;for(b in a)if(a[b]!=f[b])return false;if(!d)for(b in f)if(a[b]!=f[b])return false;return true},objectKeys:function(a){var f=[],d;for(d in a)f.push(d);return f},convertArrayToObject:function(a,f){var d={};arguments.length==1&&(f=true);for(var b=0,c=a.length;b<c;++b)d[a[b]]=f; +return d},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(f){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,f){function d(){c=(new Date).getTime();b=false;f()}var b,c=0;return{input:function(){if(!b){var f=(new Date).getTime()-c;f<a?b=setTimeout(d,a-f):d()}},reset:function(){b&&clearTimeout(b);b=c=0}}},enableHtml5Elements:function(a,f){for(var d=["abbr","article","aside","audio","bdi","canvas","data", +"datalist","details","figcaption","figure","footer","header","hgroup","mark","meter","nav","output","progress","section","summary","time","video"],b=d.length,c;b--;){c=a.createElement(d[b]);f&&a.appendChild(c)}},checkIfAnyArrayItemMatches:function(a,f){for(var d=0,b=a.length;d<b;++d)if(a[d].match(f))return true;return false},checkIfAnyObjectPropertyMatches:function(a,f){for(var d in a)if(d.match(f))return true;return false},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="}})(); +CKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,e=function(a,f){for(var d=CKEDITOR.tools.clone(a),b=1;b<arguments.length;b++){var f=arguments[b],c;for(c in f)delete d[c]}return d},b={},c={},f={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},d={command:1,link:1,meta:1,noscript:1,script:1,style:1},h={},l={"#":1},i={center:1,dir:1,noframes:1}; +a(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},l,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(c,f,b,i);e={a:e(b,{a:1,button:1}),abbr:b,address:c, +area:h,article:c,aside:c,audio:a({source:1,track:1},c),b:b,base:h,bdi:b,bdo:b,blockquote:c,body:c,br:h,button:e(b,{a:1,button:1}),canvas:b,caption:c,cite:b,code:b,col:h,colgroup:{col:1},command:h,datalist:a({option:1},b),dd:c,del:b,details:a({summary:1},c),dfn:b,div:c,dl:{dt:1,dd:1},dt:c,em:b,embed:h,fieldset:a({legend:1},c),figcaption:c,figure:a({figcaption:1},c),footer:c,form:c,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},d),header:c,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:h,html:a({head:1, +body:1},c,d),i:b,iframe:l,img:h,input:h,ins:b,kbd:b,keygen:h,label:b,legend:b,li:c,link:h,main:c,map:c,mark:b,menu:a({li:1},c),meta:h,meter:e(b,{meter:1}),nav:c,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:l,output:b,p:b,param:h,pre:b,progress:e(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:l,section:c,select:{optgroup:1,option:1},small:b,source:h,span:b,strong:b,style:l,sub:b,summary:b,sup:b,table:{caption:1,colgroup:1,thead:1, +tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:c,textarea:l,tfoot:{tr:1},th:c,thead:{tr:1},time:e(b,{time:1}),title:l,tr:{th:1,td:1},track:h,u:b,ul:{li:1},"var":b,video:a({source:1,track:1},c),wbr:h,acronym:b,applet:a({param:1},c),basefont:h,big:b,center:c,dialog:h,dir:{li:1},font:b,isindex:h,noframes:c,strike:b,tt:b};a(e,{$block:a({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},f,i),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1, +form:1,header:1,hgroup:1,main:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,main:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1},$inline:b,$list:{dl:1,ol:1, +ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},e.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1, +sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return e}();CKEDITOR.dom.event=function(a){this.$=a}; +CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a=a+CKEDITOR.CTRL;this.$.shiftKey&&(a=a+CKEDITOR.SHIFT);this.$.altKey&&(a=a+CKEDITOR.ALT);return a},preventDefault:function(a){var e=this.$;e.preventDefault?e.preventDefault():e.returnValue=false;a&&this.stopPropagation()},stopPropagation:function(){var a=this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=true},getTarget:function(){var a= +this.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2; +CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(a){if(a)this.$=a}; +CKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(c){typeof CKEDITOR!="undefined"&&a.fire(b,new CKEDITOR.dom.event(c))}};return{getPrivate:function(){var a;if(!(a=this.getCustomData("_")))this.setCustomData("_",a={});return a},on:function(e){var b=this.getCustomData("_cke_nativeListeners");if(!b){b={};this.setCustomData("_cke_nativeListeners",b)}if(!b[e]){b=b[e]=a(this,e);this.$.addEventListener?this.$.addEventListener(e,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&& +this.$.attachEvent("on"+e,b)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData("_cke_nativeListeners"),c=b&&b[a];if(c){this.$.removeEventListener?this.$.removeEventListener(a,c,false):this.$.detachEvent&&this.$.detachEvent("on"+a,c);delete b[a]}}},removeAllListeners:function(){var a=this.getCustomData("_cke_nativeListeners"),b;for(b in a){var c=a[b];this.$.detachEvent? +this.$.detachEvent("on"+b,c):this.$.removeEventListener&&this.$.removeEventListener(b,c,false);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}(); +(function(a){var e={};CKEDITOR.on("reset",function(){e={}});a.equals=function(a){try{return a&&a.$===this.$}catch(c){return false}};a.setCustomData=function(a,c){var f=this.getUniqueId();(e[f]||(e[f]={}))[a]=c;return this};a.getCustomData=function(a){var c=this.$["data-cke-expando"];return(c=c&&e[c])&&a in c?c[a]:null};a.removeCustomData=function(a){var c=this.$["data-cke-expando"],c=c&&e[c],f,d;if(c){f=c[a];d=a in c;delete c[a]}return d?f:null};a.clearCustomData=function(){this.removeAllListeners(); +var a=this.$["data-cke-expando"];a&&delete e[a]};a.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)})(CKEDITOR.dom.domObject.prototype); +CKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?"document":a.nodeType==CKEDITOR.NODE_ELEMENT?"element":a.nodeType==CKEDITOR.NODE_TEXT?"text":a.nodeType==CKEDITOR.NODE_COMMENT?"comment":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](a):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11; +CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16; +CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,e){a.append(this,e);return a},clone:function(a,e){var b=this.$.cloneNode(a),c=function(f){f["data-cke-expando"]&&(f["data-cke-expando"]=false);if(f.nodeType==CKEDITOR.NODE_ELEMENT){e||f.removeAttribute("id",false);if(a)for(var f=f.childNodes,d=0;d<f.length;d++)c(f[d])}};c(b);return new CKEDITOR.dom.node(b)},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$, +a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var e=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var f=c.parentNode;f&&e.unshift(this.getIndex.call({$:c},a));c=f}return e},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function e(a,f){var b= +f?a.nextSibling:a.previousSibling;return!b||b.nodeType!=CKEDITOR.NODE_TEXT?null:b.nodeValue?b:e(b,f)}var b=this.$,c=-1,f;if(!this.$.parentNode||a&&b.nodeType==CKEDITOR.NODE_TEXT&&!b.nodeValue&&!e(b)&&!e(b,true))return-1;do if(!a||!(b!=this.$&&b.nodeType==CKEDITOR.NODE_TEXT&&(f||!b.nodeValue))){c++;f=b.nodeType==CKEDITOR.NODE_TEXT}while(b=b.previousSibling);return c},getNextSourceNode:function(a,e,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getFirst&&this.getFirst(),f; +if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getNext()}for(;!a&&(f=(f||this).getParent());){if(b&&b(f,true)===false)return null;a=f.getNext()}return!a||b&&b(a)===false?null:e&&e!=a.type?a.getNextSourceNode(false,e,b):a},getPreviousSourceNode:function(a,e,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getLast&&this.getLast(),f;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getPrevious()}for(;!a&& +(f=(f||this).getParent());){if(b&&b(f,true)===false)return null;a=f.getPrevious()}return!a||b&&b(a)===false?null:e&&a.type!=e?a.getPreviousSourceNode(false,e,b):a},getPrevious:function(a){var e=this.$,b;do b=(e=e.previousSibling)&&e.nodeType!=10&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getNext:function(a){var e=this.$,b;do b=(e=e.nextSibling)&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getParent:function(a){var e=this.$.parentNode;return e&&(e.nodeType==CKEDITOR.NODE_ELEMENT|| +a&&e.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(e):null},getParents:function(a){var e=this,b=[];do b[a?"push":"unshift"](e);while(e=e.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var e=this.contains?this:this.getParent();do if(e.contains(a))return e;while(e=e.getParent());return null},getPosition:function(a){var e=this.$,b=a.$;if(e.compareDocumentPosition)return e.compareDocumentPosition(b);if(e== +b)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(e.contains){if(e.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(e))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in e)return e.sourceIndex<0||b.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:e.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var e=this.getAddress(),a=a.getAddress(), +b=Math.min(e.length,a.length),c=0;c<=b-1;c++)if(e[c]!=a[c]){if(c<b)return e[c]<a[c]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;break}return e.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,e){var b=this.$,c,f;if(!e)b=b.parentNode;if(typeof a=="function"){f=true;c=a}else{f=false;c=function(f){f=typeof f.nodeName=="string"?f.nodeName.toLowerCase():"";return typeof a=="string"?f== +a:f in a}}for(;b;){if(c(f?new CKEDITOR.dom.node(b):b))return new CKEDITOR.dom.node(b);try{b=b.parentNode}catch(d){b=null}}return null},hasAscendant:function(a,e){var b=this.$;if(!e)b=b.parentNode;for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return true;b=b.parentNode}return false},move:function(a,e){a.append(this.remove(),e)},remove:function(a){var e=this.$,b=e.parentNode;if(b){if(a)for(;a=e.firstChild;)b.insertBefore(e.removeChild(a),e);b.removeChild(e)}return this},replace:function(a){this.insertBefore(a); +a.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&&(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(b-e.length);this.$.removeChild(this.$.firstChild)}}else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a=this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(e.length); +this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{a.remove();continue}}break}if(CKEDITOR.env.needsBrFiller)(a=this.$.lastChild)&&(a.type==1&&a.nodeName.toLowerCase()=="br")&&a.parentNode.removeChild(a)},isReadOnly:function(){var a=this;this.type!=CKEDITOR.NODE_ELEMENT&&(a=this.getParent());if(a&&typeof a.$.isContentEditable!="undefined")return!(a.$.isContentEditable||a.data("cke-editable"));for(;a;){if(a.data("cke-editable"))break;if(a.getAttribute("contentEditable")=="false")return true; +if(a.getAttribute("contentEditable")=="true")break;a=a.getParent()}return!a}});CKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,e=a.compatMode=="CSS1Compat";return{width:(e?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(e?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop|| +a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}});CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var e=new CKEDITOR.dom.element("link");e.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(e)}},appendStyleText:function(a){if(this.$.createStyleSheet){var e=this.$.createStyleSheet("");e.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return e|| +b.$.sheet},createElement:function(a,e){var b=new CKEDITOR.dom.element(a,this);if(e){e.attributes&&b.setAttributes(e.attributes);e.styles&&b.setStyles(e.styles)}return b},createText:function(a){return new CKEDITOR.dom.text(a,this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(e){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,e){for(var b= +this.$.documentElement,c=0;b&&c<a.length;c++){var f=a[c];if(e)for(var d=-1,h=0;h<b.childNodes.length;h++){var l=b.childNodes[h];if(!(e===true&&l.nodeType==3&&l.previousSibling&&l.previousSibling.nodeType==3)){d++;if(d==f){b=l;break}}}else b=b.childNodes[f]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,e){!(CKEDITOR.env.ie&&document.documentMode<=8)&&e&&(a=e+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; +return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$&\n<script data-cke-temp="1">('+ +CKEDITOR.tools.fixDomain+")();<\/script>"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");if(!a){a=this.$.createDocumentFragment();CKEDITOR.tools.enableHtml5Elements(a,true);this.setCustomData("html5ShivFrag",a)}return a}});CKEDITOR.dom.nodeList=function(a){this.$=a}; +CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){if(a<0||a>=this.$.length)return null;return(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.element.get=function(a){return(a=typeof a=="string"?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))}; +CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,e){var b=new CKEDITOR.dom.element("div",e);b.setHtml(a);return b.getFirst().remove()}; +CKEDITOR.dom.element.setMarker=function(a,e,b,c){var f=e.getCustomData("list_marker_id")||e.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),d=e.getCustomData("list_marker_names")||e.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[f]=e;d[b]=1;return e.setCustomData(b,c)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var e in a)CKEDITOR.dom.element.clearMarkers(a,a[e],1)}; +CKEDITOR.dom.element.clearMarkers=function(a,e,b){var c=e.getCustomData("list_marker_names"),f=e.getCustomData("list_marker_id"),d;for(d in c)e.removeCustomData(d);e.removeCustomData("list_marker_names");if(b){e.removeCustomData("list_marker_id");delete a[f]}}; +(function(){function a(a){var d=true;if(!a.$.id){a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber();d=false}return function(){d||a.removeAttribute("id")}}function e(a,d){return"#"+a.$.id+" "+d.split(/,\s*/).join(", #"+a.$.id+" ")}function b(a){for(var d=0,b=0,e=c[a].length;b<e;b++)d=d+(parseInt(this.getComputedStyle(c[a][b])||0,10)||0);return d}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(a){var d=this.$.className;d&&(RegExp("(?:^|\\s)"+a+"(?:\\s|$)", +"").test(d)||(d=d+(" "+a)));this.$.className=d||a;return this},removeClass:function(a){var d=this.getAttribute("class");if(d){a=RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","i");if(a.test(d))(d=d.replace(a,"").replace(/^\s+/,""))?this.setAttribute("class",d):this.removeAttribute("class")}return this},hasClass:function(a){return RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","").test(this.getAttribute("class"))},append:function(a,d){typeof a=="string"&&(a=this.getDocument().createElement(a));d?this.$.insertBefore(a.$,this.$.firstChild): +this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var d=new CKEDITOR.dom.element("div",this.getDocument());d.setHtml(a);d.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!=null?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is||!a.is("br")){a=this.getDocument().createElement("br"); +CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}}},breakParent:function(a){var d=new CKEDITOR.dom.range(this.getDocument());d.setStartAfter(this);d.setEndAfter(a);a=d.extractContents();d.insertNode(this.remove());a.insertAfterNode(this)},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a){var d=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?d.contains(a.getParent().$):d!=a.$&&d.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)&16)},focus:function(){function a(){try{this.$.focus()}catch(f){}} +return function(d){d?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&& +(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{var d=this.$;if(this.getParent())return d.innerHTML=a;var b=this.getDocument()._getHtml5ShivFrag();b.appendChild(d);d.innerHTML=a;b.removeChild(d);return a}catch(c){this.$.innerHTML="";d=new CKEDITOR.dom.element("body",this.getDocument());d.$.innerHTML=a;for(d=d.getChildren();d.count();)this.append(d.getItem(0));return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p"); +a.innerHTML="x";a=a.textContent;return function(d){this.$[a?"textContent":"innerText"]=d}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a;case "checked":a=this.$.attributes.getNamedItem(a); +return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie?function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}: +function(a){var d=this.getWindow().$.getComputedStyle(this.$,null);return d?d.getPropertyValue(a):""},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:CKEDITOR.env.ie?function(){var a=this.$.tabIndex;a===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&&(a=-1);return a}:CKEDITOR.env.webkit?function(){var a=this.$.tabIndex;if(a===void 0){a= +parseInt(this.getAttribute("tabindex"),10);isNaN(a)&&(a=-1)}return a}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&document.documentMode<=8){var d=this.$.scopeName;d!="HTML"&&(a=d.toLowerCase()+":"+a)}this.getName=function(){return a}; +return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var d=this.$.firstChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getNext(a));return d},getLast:function(a){var d=this.$.lastChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getPrevious(a));return d},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if(typeof arguments[0]=="object")return!!arguments[0][a];for(var d=0;d<arguments.length;d++)if(arguments[d]== +a)return true;return false},isEditable:function(a){var d=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[d]||CKEDITOR.dtd.$empty[d]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[d]||CKEDITOR.dtd.span;return!(!a||!a["#"])}return true},isIdentical:function(a){var d=this.clone(0,1),a=a.clone(0,1);d.removeAttributes(["_moz_dirty", +"data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(d.$.isEqualNode){d.$.style.cssText=CKEDITOR.tools.normalizeCssText(d.$.style.cssText);a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return d.$.isEqualNode(a.$)}d=d.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var b=this.getParent();if(b.type==CKEDITOR.NODE_ELEMENT){b= +b.clone();b.setHtml(d);d=b.getHtml();b.setHtml(a);a=b.getHtml()}}return d==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",d,b;if(a&&CKEDITOR.env.webkit){d=this.getWindow();if(!d.equals(CKEDITOR.document.getWindow())&&(b=d.$.frameElement))a=(new CKEDITOR.dom.element(b)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false;for(var a=this.getChildren(),d=0,b=a.count();d< +b;d++){var c=a.getItem(d);if(!(c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-bookmark"))&&(c.type==CKEDITOR.NODE_ELEMENT&&!c.isEmptyInlineRemoveable()||c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText())))return false}return true},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,d=0;d<a.length;d++){var b=a[d];switch(b.nodeName){case "class":if(this.getAttribute("class"))return true;case "data-cke-expando":continue;default:if(b.specified)return true}}return false}: +function(){var a=this.$.attributes,d=a.length,b={"data-cke-expando":1,_moz_dirty:1};return d>0&&(d>2||!b[a[0].nodeName]||d==2&&!b[a[1].nodeName])},hasAttribute:function(){function a(d){var f=this.$.attributes.getNamedItem(d);if(this.getName()=="input")switch(d){case "class":return this.$.className.length>0;case "checked":return!!this.$.checked;case "value":d=this.getAttribute("type");return d=="checkbox"||d=="radio"?this.$.value!="on":!!this.$.value}return!f?false:f.specified}return CKEDITOR.env.ie? +CKEDITOR.env.version<8?function(d){return d=="name"?!!this.$.name:a.call(this,d)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,d){var b=this.$,a=a.$;if(b!=a){var c;if(d)for(;c=b.lastChild;)a.insertBefore(b.removeChild(c),a.firstChild);else for(;c=b.firstChild;)a.appendChild(b.removeChild(c))}},mergeSiblings:function(){function a(d,b,f){if(b&&b.type==CKEDITOR.NODE_ELEMENT){for(var c=[];b.data("cke-bookmark")||b.isEmptyInlineRemoveable();){c.push(b); +b=f?b.getNext():b.getPrevious();if(!b||b.type!=CKEDITOR.NODE_ELEMENT)return}if(d.isIdentical(b)){for(var e=f?d.getLast():d.getFirst();c.length;)c.shift().move(d,!f);b.moveChildren(d,!f);b.remove();e&&e.type==CKEDITOR.NODE_ELEMENT&&e.mergeSiblings()}}}return function(d){if(d===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(),show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a, +b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d,b){d=="class"?this.$.className=b:d=="style"?this.$.style.cssText=b:d=="tabindex"?this.$.tabIndex=b:d=="checked"?this.$.checked=b:d=="contenteditable"?a.call(this,"contentEditable",b):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(d,b){if(d=="src"&&b.match(/^http:\/\//))try{a.apply(this,arguments)}catch(c){}else a.apply(this,arguments); +return this}:a}(),setAttributes:function(a){for(var d in a)this.setAttribute(d,a[d]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=0;b< +a.length;b++)this.removeAttribute(a[b]);else for(b in a)a.hasOwnProperty(b)&&this.removeAttribute(b)},removeStyle:function(a){var b=this.$.style;if(!b.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var c=["top","left","right","bottom"],e;a=="border"&&(e=["color","style","width"]);for(var b=[],i=0;i<c.length;i++)if(e)for(var g=0;g<e.length;g++)b.push([a,c[i],e[g]].join("-"));else b.push([a,c[i]].join("-"));for(a=0;a<b.length;a++)this.removeStyle(b[a])}else{b.removeProperty?b.removeProperty(a): +b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,b){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=b;return this},setStyles:function(a){for(var b in a)this.setStyle(b,a[b]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", +"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,e=b.count();c<e;c++){a=b.getItem(c);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a=this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0,c=0,e=this.getDocument(),i=e.getBody(),g=e.$.compatMode=="BackCompat";if(document.documentElement.getBoundingClientRect){var m= +this.$.getBoundingClientRect(),t=e.$.documentElement,s=t.clientTop||i.$.clientTop||0,y=t.clientLeft||i.$.clientLeft||0,p=true;if(CKEDITOR.env.ie){p=e.getDocumentElement().contains(this);e=e.getBody().contains(this);p=g&&e||!g&&p}if(p){b=m.left+(!g&&t.scrollLeft||i.$.scrollLeft);b=b-y;c=m.top+(!g&&t.scrollTop||i.$.scrollTop);c=c-s}}else{i=this;for(e=null;i&&!(i.getName()=="body"||i.getName()=="html");){b=b+(i.$.offsetLeft-i.$.scrollLeft);c=c+(i.$.offsetTop-i.$.scrollTop);if(!i.equals(this)){b=b+(i.$.clientLeft|| +0);c=c+(i.$.clientTop||0)}for(;e&&!e.equals(i);){b=b-e.$.scrollLeft;c=c-e.$.scrollTop;e=e.getParent()}e=i;i=(m=i.$.offsetParent)?new CKEDITOR.dom.element(m):null}}if(a){i=this.getWindow();e=a.getWindow();if(!i.equals(e)&&i.$.frameElement){a=(new CKEDITOR.dom.element(i.$.frameElement)).getDocumentPosition(a);b=b+a.x;c=c+a.y}}if(!document.documentElement.getBoundingClientRect&&CKEDITOR.env.gecko&&!g){b=b+(this.$.clientLeft?1:0);c=c+(this.$.clientTop?1:0)}return{x:b,y:c}},scrollIntoView:function(a){var b= +this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var c=b.getWindow();try{var e=c.$.frameElement;e&&(b=new CKEDITOR.dom.element(e))}catch(i){}}}while(b=b.getParent())}},scrollIntoParent:function(a,b,c){var e,i,g,m;function t(b,d){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b,d);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+d}} +function s(a,b){var d={x:0,y:0};if(!a.is(p?"body":"html")){var c=a.$.getBoundingClientRect();d.x=c.left;d.y=c.top}c=a.getWindow();if(!c.equals(b)){c=s(CKEDITOR.dom.element.get(c.$.frameElement),b);d.x=d.x+c.x;d.y=d.y+c.y}return d}function y(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());g=a.getDocument();var p=g.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=p?g.getBody():g.getDocumentElement());g=a.getWindow();i=s(this,g);var q=s(a,g),j=this.$.offsetHeight; +e=this.$.offsetWidth;var u=a.$.clientHeight,v=a.$.clientWidth;g=i.x-y(this,"left")-q.x||0;m=i.y-y(this,"top")-q.y||0;e=i.x+e+y(this,"right")-(q.x+v)||0;i=i.y+j+y(this,"bottom")-(q.y+u)||0;if(m<0||i>0)t(0,b===true?m:b===false?i:m<0?m:i);if(c&&(g<0||e>0))t(g<0?g:e,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",true);c&&this.removeAttribute("aria-disabled"); +break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",true);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off");this.removeClass(b+"_on");this.removeClass(b+"_disabled");c&&this.removeAttribute("aria-pressed");c&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)}, +copyAttributes:function(a,b){for(var c=this.$.attributes,b=b||{},e=0;e<c.length;e++){var i=c[e],g=i.nodeName.toLowerCase(),m;if(!(g in b))if(g=="checked"&&(m=this.getAttribute(g)))a.setAttribute(g,m);else if(!CKEDITOR.env.ie||this.hasAttribute(g)){m=this.getAttribute(g);if(m===null)m=i.nodeValue;a.setAttribute(g,m)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a); +this.moveChildren(a);this.getParent()&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(b,c){var f=b.childNodes;if(c>=0&&c<f.length)return f[c]}return function(b){var c=this.$;if(b.slice)for(;b.length>0&&c;)c=a(c,b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){this.on("contextmenu",function(a){a.data.getTarget().hasClass("cke_enable_context_menu")|| +a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a,b);return null},getEditor:function(){var a=CKEDITOR.instances,b,c;for(b in a){c=a[b];if(c.element.equals(this)&&c.elementMode!= +CKEDITOR.ELEMENT_MODE_APPENDTO)return c}return null},find:function(b){var c=a(this),b=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(e(this,b)));c();return b},findOne:function(b){var c=a(this),b=this.$.querySelector(e(this,b));c();return b?new CKEDITOR.dom.element(b):null},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var e=a(this);if(e!==false)for(var c=this.getChildren(),i=0;i<c.count();i++){e=c.getItem(i);e.type==CKEDITOR.NODE_ELEMENT?e.forEach(a,b):(!b||e.type==b)&&a(e)}}});var c={width:["border-left-width", +"border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,c,e){if(typeof c=="number"){if(e&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))c=c-b.call(this,a);this.setStyle(a,c+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a,c){var e=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;c&&(e=e-b.call(this,a));return e}})(); +CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a}; +CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)}},!0,{append:1,appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}); +(function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var d,f=c.startContainer;d=c.endContainer;var m=c.startOffset,e=c.endOffset,h,E=this.guard,k=this.type,n=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var r=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),o=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(e):d.getNext();this._.guardLTR=function(a,b){return(!b||!r.equals(a))&&(!o|| +!a.equals(o))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var g=f.type==CKEDITOR.NODE_ELEMENT?f:f.getParent(),D=f.type==CKEDITOR.NODE_ELEMENT?m?f.getChild(m-1):null:f.getPrevious();this._.guardRTL=function(a,b){return(!b||!g.equals(a))&&(!D||!a.equals(D))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var i=a?this._.guardRTL:this._.guardLTR;h=E?function(a,b){return i(a,b)===false?false:E(a,b)}:i;if(this.current)d=this.current[n](false,k,h);else{if(a)d.type== +CKEDITOR.NODE_ELEMENT&&(d=e>0?d.getChild(e-1):h(d,true)===false?null:d.getPreviousSourceNode(true,k,h));else{d=f;if(d.type==CKEDITOR.NODE_ELEMENT&&!(d=d.getChild(m)))d=h(f,true)===false?null:f.getNextSourceNode(true,k,h)}d&&h(d)===false&&(d=null)}for(;d&&!this._.end;){this.current=d;if(!this.evaluator||this.evaluator(d)!==false){if(!b)return d}else if(b&&this.evaluator)return false;d=d[n](false,k,h)}this.end();return this.current=null}function e(b){for(var c,d=null;c=a.call(this,b);)d=c;return d} +function b(a){if(g(a))return false;if(a.type==CKEDITOR.NODE_TEXT)return true;if(a.type==CKEDITOR.NODE_ELEMENT){if(a.is(CKEDITOR.dtd.$inline)||a.is("hr")||a.getAttribute("contenteditable")=="false")return true;var b;if(b=!CKEDITOR.env.needsBrFiller)if(b=a.is(m))a:{b=0;for(var c=a.getChildCount();b<c;++b)if(!g(a.getChild(b))){b=false;break a}b=true}if(b)return true}return false}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1}, +next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return a.call(this,0,1)!==false},checkBackward:function(){return a.call(this,1,1)!==false},lastForward:function(){return e.call(this)},lastBackward:function(){return e.call(this,1)},reset:function(){delete this.current;this._={}}}});var c={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1, +"table-caption":1},f={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return this.getComputedStyle("float")=="none"&&!(this.getComputedStyle("position")in f)&&c[this.getComputedStyle("display")]?true:!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a))};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark= +function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(d){var f,m;f=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(m=d.getParent())&&c(m);f=a?f:f||c(d);return!!(b^f)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible=function(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit? +1:0;return function(d){if(b(d))d=1;else{d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());d=d.$.offsetWidth<=c}return!!(a^d)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!h(a)&&!l(a)}return function(c){var f=CKEDITOR.env.needsBrFiller?c.is&&c.is("br"):c.getText&&d.test(c.getText());if(f){f=c.getParent();c=c.getNext(b);f=f.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())}return!!(a^ +f)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var d=/^[\t\r\n ]*(?: |\xa0)$/,h=CKEDITOR.dom.walker.whitespaces(),l=CKEDITOR.dom.walker.bookmark(),i=CKEDITOR.dom.walker.temp();CKEDITOR.dom.walker.ignored=function(a){return function(b){b=h(b)||l(b)||i(b);return!!(a^b)}};var g=CKEDITOR.dom.walker.ignored(),m=function(a){var b={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block); +CKEDITOR.dom.walker.editable=function(a){return function(c){return!!(a^b(c))}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(l(a)||h(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&&d.test(a.getText()))?a:false}})(); +CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var e=a instanceof CKEDITOR.dom.document;this.document=e?a:a.getDocument();this.root=e?a.getBody():a}; +(function(){function a(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(true),f=CKEDITOR.dom.walker.bogus();return function(e){if(c(e)||b(e))return true;if(f(e)&&!a)return a=true;return e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant("pre")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(d)?false:true}}function e(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?true:!a&&h(d)|| +d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function b(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&g(a)&&(b=a);return i(a)&&!(h(a)&&a.equals(b))})}}var c=function(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},f=function(a,b,c,d){a.optimizeBookmark();var f=a.startContainer,e=a.endContainer,j=a.startOffset,u=a.endOffset,h,g;if(e.type==CKEDITOR.NODE_TEXT)e=e.split(u); +else if(e.getChildCount()>0)if(u>=e.getChildCount()){e=e.append(a.document.createText(""));g=true}else e=e.getChild(u);if(f.type==CKEDITOR.NODE_TEXT){f.split(j);f.equals(e)&&(e=f.getNext())}else if(j)if(j>=f.getChildCount()){f=f.append(a.document.createText(""));h=true}else f=f.getChild(j).getPrevious();else{f=f.append(a.document.createText(""),1);h=true}var j=f.getParents(),u=e.getParents(),k,n,r;for(k=0;k<j.length;k++){n=j[k];r=u[k];if(!n.equals(r))break}for(var o=c,i,D,l,z=k;z<j.length;z++){i= +j[z];o&&!i.equals(f)&&(D=o.append(i.clone()));for(i=i.getNext();i;){if(i.equals(u[z])||i.equals(e))break;l=i.getNext();if(b==2)o.append(i.clone(true));else{i.remove();b==1&&o.append(i)}i=l}o&&(o=D)}o=c;for(c=k;c<u.length;c++){i=u[c];b>0&&!i.equals(e)&&(D=o.append(i.clone()));if(!j[c]||i.$.parentNode!=j[c].$.parentNode)for(i=i.getPrevious();i;){if(i.equals(j[c])||i.equals(f))break;l=i.getPrevious();if(b==2)o.$.insertBefore(i.$.cloneNode(true),o.$.firstChild);else{i.remove();b==1&&o.$.insertBefore(i.$, +o.$.firstChild)}i=l}o&&(o=D)}if(b==2){n=a.startContainer;if(n.type==CKEDITOR.NODE_TEXT){n.$.data=n.$.data+n.$.nextSibling.data;n.$.parentNode.removeChild(n.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data;a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(n&&r&&(f.$.parentNode!=n.$.parentNode||e.$.parentNode!=r.$.parentNode)){b=r.getIndex();h&&r.$.parentNode==f.$.parentNode&&b--;if(d&&n.type==CKEDITOR.NODE_ELEMENT){d=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none"> </span>', +a.document);d.insertAfter(n);n.mergeSiblings(false);a.moveToBookmark({startNode:d})}else a.setStart(r.getParent(),b)}a.collapse(true)}h&&f.remove();g&&e.$.parentNode&&e.remove()},d={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},h=CKEDITOR.dom.walker.bogus(),l=/^[\t\r\n ]*(?: |\xa0)$/,i=CKEDITOR.dom.walker.editable(),g=CKEDITOR.dom.walker.ignored(true);CKEDITOR.dom.range.prototype= +{clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this._setEndContainer(this.startContainer);this.endOffset=this.startOffset}else{this._setStartContainer(this.endContainer);this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document); +this.collapsed||f(this,2,a);return a},deleteContents:function(a){this.collapsed||f(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||f(this,1,b,a);return b},createBookmark:function(a){var b,c,d,f,e=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml(" ");if(a){d="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",d+(e?"C":"S"))}if(!e){c=b.clone();c.setHtml(" "); +a&&c.setAttribute("id",d+"E");f=this.clone();f.collapse();f.insertNode(c)}f=this.clone();f.collapse(true);f.insertNode(b);if(c){this.setStartAfter(b);this.setEndBefore(c)}else this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(e?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:e}},createBookmark2:function(){function a(c){var d=c.container,f=c.offset,e;e=d;var m=f;e=e.type!=CKEDITOR.NODE_ELEMENT||m===0||m==e.getChildCount()?0:e.getChild(m-1).type==CKEDITOR.NODE_TEXT&&e.getChild(m).type== +CKEDITOR.NODE_TEXT;if(e){d=d.getChild(f-1);f=d.getLength()}d.type==CKEDITOR.NODE_ELEMENT&&f>1&&(f=d.getChild(f-1).getIndex(true)+1);if(d.type==CKEDITOR.NODE_TEXT){e=d;for(m=0;(e=e.getPrevious())&&e.type==CKEDITOR.NODE_TEXT;)m=m+e.getLength();e=m;if(d.getText())f=f+e;else{m=d.getPrevious(b);if(e){f=e;d=m?m.getNext():d.getParent().getFirst()}else{d=d.getParent();f=m?m.getIndex(true)+1:0}}}c.container=d;c.offset=f}var b=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,true);return function(b){var c=this.collapsed, +d={container:this.startContainer,offset:this.startOffset},f={container:this.endContainer,offset:this.endOffset};if(b){a(d);c||a(f)}return{start:d.container.getAddress(b),end:c?null:f.container.getAddress(b),startOffset:d.offset,endOffset:f.offset,normalized:b,collapsed:c,is2:true}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a): +this.collapse(true)}else{b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode;a=c?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a);a.remove()}else this.collapse(true)}},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,f;if(a.type==CKEDITOR.NODE_ELEMENT){f=a.getChildCount();if(f>c)a=a.getChild(c);else if(f<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild; +a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){f=b.getChildCount();if(f>d)b=b.getChild(d).getPreviousSourceNode(true);else if(f<1)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset- +1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&& +this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,f=this.collapsed;if((!a||f)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength()){d=c.getIndex()+1;c=c.getParent()}else{var e=c.split(d),d=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(e,this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset= +this.endOffset+1}else{d=c.getIndex();c=c.getParent()}this.setStart(c,d);if(f){this.collapse(true);return}}c=this.endContainer;d=this.endOffset;if(!b&&!f&&c&&c.type==CKEDITOR.NODE_TEXT){if(d){d>=c.getLength()||c.split(d);d=c.getIndex()+1}else d=c.getIndex();c=c.getParent();this.setEnd(c,d)}},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var f=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break; +var e=this.getCommonAncestor(),j=this.root,h,i,g,k,n,r=false,o,l;o=this.startContainer;var D=this.startOffset;if(o.type==CKEDITOR.NODE_TEXT){if(D){o=!CKEDITOR.tools.trim(o.substring(0,D)).length&&o;r=!!o}if(o&&!(k=o.getPrevious()))g=o.getParent()}else{D&&(k=o.getChild(D-1)||o.getLast());k||(g=o)}for(g=c(g);g||k;){if(g&&!k){!n&&g.equals(e)&&(n=true);if(f?g.isBlockBoundary():!j.contains(g))break;if(!r||g.getComputedStyle("display")!="inline"){r=false;n?h=g:this.setStartBefore(g)}k=g.getPrevious()}for(;k;){o= +false;if(k.type==CKEDITOR.NODE_COMMENT)k=k.getPrevious();else{if(k.type==CKEDITOR.NODE_TEXT){l=k.getText();d.test(l)&&(k=null);o=/[\s\ufeff]$/.test(l)}else if((k.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&k.is("br"))&&!k.data("cke-bookmark"))if(r&&CKEDITOR.dtd.$removeEmpty[k.getName()]){l=k.getText();if(d.test(l))k=null;else for(var D=k.$.getElementsByTagName("*"),J=0,z;z=D[J++];)if(!CKEDITOR.dtd.$removeEmpty[z.nodeName.toLowerCase()]){k=null;break}k&&(o=!!l.length)}else k=null;o&&(r?n?h=g:g&&this.setStartBefore(g): +r=true);if(k){o=k.getPrevious();if(!g&&!o){g=k;k=null;break}k=o}else g=null}}g&&(g=c(g.getParent()))}o=this.endContainer;D=this.endOffset;g=k=null;n=r=false;var L=function(a,b){var c=new CKEDITOR.dom.range(j);c.setStart(a,b);c.setEndAt(j,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),f;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f=c.next();){if(f.type!=CKEDITOR.NODE_TEXT)return false;l=f!=a?f.getText():f.substring(b);if(d.test(l))return false}return true}; +if(o.type==CKEDITOR.NODE_TEXT)if(CKEDITOR.tools.trim(o.substring(D)).length)r=true;else{r=!o.getLength();if(D==o.getLength()){if(!(k=o.getNext()))g=o.getParent()}else L(o,D)&&(g=o.getParent())}else(k=o.getChild(D))||(g=o);for(;g||k;){if(g&&!k){!n&&g.equals(e)&&(n=true);if(f?g.isBlockBoundary():!j.contains(g))break;if(!r||g.getComputedStyle("display")!="inline"){r=false;n?i=g:g&&this.setEndAfter(g)}k=g.getNext()}for(;k;){o=false;if(k.type==CKEDITOR.NODE_TEXT){l=k.getText();L(k,0)||(k=null);o=/^[\s\ufeff]/.test(l)}else if(k.type== +CKEDITOR.NODE_ELEMENT){if((k.$.offsetWidth>0||b&&k.is("br"))&&!k.data("cke-bookmark"))if(r&&CKEDITOR.dtd.$removeEmpty[k.getName()]){l=k.getText();if(d.test(l))k=null;else{D=k.$.getElementsByTagName("*");for(J=0;z=D[J++];)if(!CKEDITOR.dtd.$removeEmpty[z.nodeName.toLowerCase()]){k=null;break}}k&&(o=!!l.length)}else k=null}else o=1;o&&r&&(n?i=g:this.setEndAfter(g));if(k){o=k.getNext();if(!g&&!o){g=k;k=null;break}k=o}else g=null}g&&(g=c(g.getParent()))}if(h&&i){e=h.contains(i)?i:h;this.setStartBefore(e); +this.setEndAfter(e)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:g=new CKEDITOR.dom.range(this.root);j=this.root;g.setStartAt(j,CKEDITOR.POSITION_AFTER_START);g.setEnd(this.startContainer,this.startOffset);g=new CKEDITOR.dom.walker(g);var B,w,H=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),C=null,A=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="false")if(C){if(C.equals(a)){C=null;return}}else C= +a;else if(C)return;var b=H(a);b||(B=a);return b},f=function(a){var b=A(a);!b&&(a.is&&a.is("br"))&&(w=a);return b};g.guard=A;g=g.lastBackward();B=B||j;this.setStartAt(B,!B.is("br")&&(!g&&this.checkStartOfBlock()||g&&B.contains(g))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){g=this.clone();g=new CKEDITOR.dom.walker(g);var x=CKEDITOR.dom.walker.whitespaces(),F=CKEDITOR.dom.walker.bookmark();g.evaluator=function(a){return!x(a)&&!F(a)};if((g=g.previous())&& +g.type==CKEDITOR.NODE_ELEMENT&&g.is("br"))break}g=this.clone();g.collapse();g.setEndAt(j,CKEDITOR.POSITION_BEFORE_END);g=new CKEDITOR.dom.walker(g);g.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?f:A;B=C=w=null;g=g.lastForward();B=B||j;this.setEndAt(B,!g&&this.checkEndOfBlock()||g&&B.contains(g)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);w&&this.setEndAfter(w)}},shrink:function(a,b,c){if(!this.collapsed){var a=a||CKEDITOR.SHRINK_TEXT,d=this.clone(),f=this.startContainer,e=this.endContainer, +j=this.startOffset,g=this.endOffset,h=1,i=1;if(f&&f.type==CKEDITOR.NODE_TEXT)if(j)if(j>=f.getLength())d.setStartAfter(f);else{d.setStartBefore(f);h=0}else d.setStartBefore(f);if(e&&e.type==CKEDITOR.NODE_TEXT)if(g)if(g>=e.getLength())d.setEndAfter(e);else{d.setEndAfter(e);i=0}else d.setEndBefore(e);var d=new CKEDITOR.dom.walker(d),k=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var n;d.guard=function(b,d){if(k(b))return true; +if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(n)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return false;!d&&b.type==CKEDITOR.NODE_ELEMENT&&(n=b);return true};if(h)(f=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(f,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);if(i){d.reset();(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d, +b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!h&&!i)}},insertNode:function(a){this.optimizeBookmark();this.trim(false,true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer, +a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this._setStartContainer(a);this.startOffset=b;if(!this.endContainer){this._setEndContainer(a);this.endOffset=b}c(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex()+1;a=a.getParent()}this._setEndContainer(a); +this.endOffset=b;if(!this.startContainer){this._setStartContainer(a);this.startOffset=b}c(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type== +CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}c(this)},setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a);break; +case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}c(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();d.appendBogus();this.insertNode(d);this.moveToBookmark(c);return d},splitBlock:function(a){var b=new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),d=b.block,f=c.block,e=null;if(!b.blockLimit.equals(c.blockLimit))return null; +if(a!="br"){if(!d){d=this.fixBlock(true,a);f=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}f||(f=this.fixBlock(false,a))}a=d&&this.checkStartOfBlock();b=f&&this.checkEndOfBlock();this.deleteContents();if(d&&d.equals(f))if(b){e=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(f,CKEDITOR.POSITION_AFTER_END);f=null}else if(a){e=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d=null}else{f= +this.splitElement(d);d.is("ul","ol")||d.appendBogus()}return{previousBlock:d,nextBlock:f,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:e}},splitElement:function(a){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false);b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())|| +d.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),f=d.block||d.blockLimit,e;f&&!f.equals(d.root)&&!f.getFirst(a(f));){e=f.getParent();this[b?"setEndAt":"setStartAt"](f,CKEDITOR.POSITION_AFTER_END);f.remove(1);f=e}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer, +this.root)},checkBoundaryOfElement:function(a,b){var c=b==CKEDITOR.START,d=this.clone();d.collapse(c);d[c?"setStartAt":"setEndAt"](a,c?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=e(c);return d[c?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var b=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.ltrim(b.substring(0,c));l.test(b)&&this.trim(0,1)}this.trim();b=new CKEDITOR.dom.elementPath(this.startContainer, +this.root);c=this.clone();c.collapse(true);c.setStartAt(b.block||b.blockLimit,CKEDITOR.POSITION_AFTER_START);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkBackward()},checkEndOfBlock:function(){var b=this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.rtrim(b.substring(c));l.test(b)&&this.trim(1,0)}this.trim();b=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(false);c.setEndAt(b.block||b.blockLimit,CKEDITOR.POSITION_BEFORE_END); +b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type== +CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")=="false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(false)){this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var c= +0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&l.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable()){this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);c=1}else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START); +else if(a.getAttribute("contenteditable")=="false"&&a.is(CKEDITOR.dtd.$block)){this.setStartBefore(a);this.setEndAfter(a);return true}var d=a,f=c,e=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(e=d[b?"getLast":"getFirst"](g));!f&&!e&&(e=d[b?"getPrevious":"getNext"](g));a=e}return!!c},moveToClosestEditablePosition:function(a,b){var c=new CKEDITOR.dom.range(this.root),d=0,f,e=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];c.moveToPosition(a,e[b?0:1]);if(a.is(CKEDITOR.dtd.$block)){if(f= +c[b?"getNextEditableNode":"getPreviousEditableNode"]()){d=1;if(f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block)&&f.getAttribute("contenteditable")=="false"){c.setStartAt(f,CKEDITOR.POSITION_BEFORE_START);c.setEndAt(f,CKEDITOR.POSITION_AFTER_END)}else c.moveToPosition(f,e[b?1:0])}}else d=1;d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,true)},getEnclosedNode:function(){var a= +this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a= +this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:b(),getPreviousEditableNode:b(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span> </span>",this.document),b,c,d,f=this.clone();f.optimize();if(d=f.startContainer.type==CKEDITOR.NODE_TEXT){c=f.startContainer.getText();b=f.startContainer.split(f.startOffset);a.insertAfter(f.startContainer)}else f.insertNode(a);a.scrollIntoView();if(d){f.startContainer.setText(c); +b.remove()}a.remove()},_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict"; +(function(){function a(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function e(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function b(a,c,d,f){a:{f==null&&(f=e(d));for(var h;h=f.shift();)if(h.getDtd().p){f={element:h,remaining:f};break a}f=null}if(!f)return 0;if((h=CKEDITOR.filter.instances[f.element.data("cke-filter")])&& +!h.check(c))return b(a,c,d,f.remaining);c=new CKEDITOR.dom.range(f.element);c.selectNodeContents(f.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:f.element,container:d,remaining:f.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return false;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var f=/^[\r\n\t ]+$/,d=CKEDITOR.dom.walker.bookmark(false,true), +h=CKEDITOR.dom.walker.whitespaces(true),l=function(a){return d(a)&&h(a)},i={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var e,h,s,y,p,a=a||"p";if(this._.nestedEditable){if(e=this._.nestedEditable.iterator.getNextParagraph(a)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return e}this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return this._.nestedEditable.iterator.getNextParagraph(a)}this._.nestedEditable= +null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var q=this.range.clone();h=q.startPath();var j=q.endPath(),u=!q.collapsed&&c(q,h.block),v=!q.collapsed&&c(q,j.block,1);q.shrink(CKEDITOR.SHRINK_ELEMENT,true);u&&q.setStartAt(h.block,CKEDITOR.POSITION_BEFORE_END);v&&q.setEndAt(j.block,CKEDITOR.POSITION_AFTER_START);h=q.endContainer.hasAscendant("pre",true)||q.startContainer.hasAscendant("pre",true);q.enlarge(this.forceBrBreak&&!h||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS: +CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!q.collapsed){h=new CKEDITOR.dom.walker(q.clone());j=CKEDITOR.dom.walker.bookmark(true,true);h.evaluator=j;this._.nextNode=h.next();h=new CKEDITOR.dom.walker(q.clone());h.evaluator=j;h=h.previous();this._.lastNode=h.getNextSourceNode(true,null,q.root);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){j=this.range.clone();j.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END); +if(j.checkEndOfBlock()){j=new CKEDITOR.dom.elementPath(j.endContainer,j.root);this._.lastNode=(j.block||j.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode||!q.root.contains(this._.lastNode)){this._.lastNode=this._.docEndMarker=q.document.createText("");this._.lastNode.insertAfter(h)}q=null}this._.started=1;h=q}j=this._.nextNode;q=this._.lastNode;for(this._.nextNode=null;j;){var u=0,v=j.hasAscendant("pre"),E=j.type!=CKEDITOR.NODE_ELEMENT,k=0;if(E)j.type==CKEDITOR.NODE_TEXT&&f.test(j.getText())&& +(E=0);else{var n=j.getName();if(CKEDITOR.dtd.$block[n]&&j.getAttribute("contenteditable")=="false"){e=j;b(this,a,e);break}else if(j.isBlockBoundary(this.forceBrBreak&&!v&&{br:1})){if(n=="br")E=1;else if(!h&&!j.getChildCount()&&n!="hr"){e=j;s=j.equals(q);break}if(h){h.setEndAt(j,CKEDITOR.POSITION_BEFORE_START);if(n!="br")this._.nextNode=j}u=1}else{if(j.getFirst()){if(!h){h=this.range.clone();h.setStartAt(j,CKEDITOR.POSITION_BEFORE_START)}j=j.getFirst();continue}E=1}}if(E&&!h){h=this.range.clone(); +h.setStartAt(j,CKEDITOR.POSITION_BEFORE_START)}s=(!u||E)&&j.equals(q);if(h&&!u)for(;!j.getNext(l)&&!s;){n=j.getParent();if(n.isBlockBoundary(this.forceBrBreak&&!v&&{br:1})){u=1;E=0;s||n.equals(q);h.setEndAt(n,CKEDITOR.POSITION_BEFORE_END);break}j=n;E=1;s=j.equals(q);k=1}E&&h.setEndAt(j,CKEDITOR.POSITION_AFTER_END);j=this._getNextSourceNode(j,k,q);if((s=!j)||u&&h)break}if(!e){if(!h){this._.docEndMarker&&this._.docEndMarker.remove();return this._.nextNode=null}e=new CKEDITOR.dom.elementPath(h.startContainer, +h.root);j=e.blockLimit;u={div:1,th:1,td:1};e=e.block;if(!e&&j&&!this.enforceRealBlocks&&u[j.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!j.equals(h.root))e=j;else if(!e||this.enforceRealBlocks&&e.is(i)){e=this.range.document.createElement(a);h.extractContents().appendTo(e);e.trim();h.insertNode(e);y=p=true}else if(e.getName()!="li"){if(!h.checkStartOfBlock()||!h.checkEndOfBlock()){e=e.clone(false);h.extractContents().appendTo(e);e.trim();p=h.splitBlock();y=!p.wasStartOfBlock;p=!p.wasEndOfBlock; +h.insertNode(e)}}else if(!s)this._.nextNode=e.equals(q)?null:this._getNextSourceNode(h.getBoundaryNodes().endNode,1,q)}if(y)(y=e.getPrevious())&&y.type==CKEDITOR.NODE_ELEMENT&&(y.getName()=="br"?y.remove():y.getLast()&&y.getLast().$.nodeName.toLowerCase()=="br"&&y.getLast().remove());if(p)(y=e.getLast())&&y.type==CKEDITOR.NODE_ELEMENT&&y.getName()=="br"&&(!CKEDITOR.env.needsBrFiller||y.getPrevious(d)||y.getNext(d))&&y.remove();if(!this._.nextNode)this._.nextNode=s||e.equals(q)||!q?null:this._getNextSourceNode(e, +1,q);return e},_getNextSourceNode:function(a,b,c){function f(a){return!(a.equals(c)||a.equals(e))}for(var e=this.range.root,a=a.getNextSourceNode(b,null,f);!d(a);)a=a.getNextSourceNode(b,null,f);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); +CKEDITOR.command=function(a,e){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return false;this.editorFocus&&a.focus();return this.fire("exec")===false?true:e.exec.call(this,a,b)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}if(!this.checkAllowed(true)){this.disable();return true}this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&& +this.disable();return this.fire("refresh",{editor:a,path:b})===false?true:e.refresh&&e.refresh.apply(this,arguments)!==false};var b;this.checkAllowed=function(c){return!c&&typeof b=="boolean"?b:b=a.activeFilter.checkFeature(this)};CKEDITOR.tools.extend(this,e,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!e.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)}; +CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return false;this.previousState=this.state;this.state=a;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF? +this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; +CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; +(function(){function a(a,b,c,d,f){var e,n,a=[];for(e in b){n=b[e];n=typeof n=="boolean"?{}:typeof n=="function"?{match:n}:L(n);if(e.charAt(0)!="$")n.elements=e;if(c)n.featureName=c.toLowerCase();var j=n;j.elements=h(j.elements,/\s+/)||null;j.propertiesOnly=j.propertiesOnly||j.elements===true;var k=/\s*,\s*/,r=void 0;for(r in C){j[r]=h(j[r],k)||null;var x=j,o=A[r],w=h(j[A[r]],k),p=j[r],g=[],i=true,F=void 0;w?i=false:w={};for(F in p)if(F.charAt(0)=="!"){F=F.slice(1);g.push(F);w[F]=true;i=false}for(;F= +g.pop();){p[F]=p["!"+F];delete p["!"+F]}x[o]=(i?false:w)||null}j.match=j.match||null;d.push(n);a.push(n)}for(var b=f.elements,f=f.generic,D,c=0,d=a.length;c<d;++c){e=L(a[c]);n=e.classes===true||e.styles===true||e.attributes===true;j=e;r=o=k=void 0;for(k in C)j[k]=u(j[k]);x=true;for(r in A){k=A[r];o=j[k];w=[];p=void 0;for(p in o)p.indexOf("*")>-1?w.push(RegExp("^"+p.replace(/\*/g,".*")+"$")):w.push(p);o=w;if(o.length){j[k]=o;x=false}}j.nothingRequired=x;j.noProperties=!(j.attributes||j.classes||j.styles); +if(e.elements===true||e.elements===null)f[n?"unshift":"push"](e);else{j=e.elements;delete e.elements;for(D in j)if(b[D])b[D][n?"unshift":"push"](e);else b[D]=[e]}}}function e(a,c,d,f){if(!a.match||a.match(c))if(f||l(a,c)){if(!a.propertiesOnly)d.valid=true;if(!d.allAttributes)d.allAttributes=b(a.attributes,c.attributes,d.validAttributes);if(!d.allStyles)d.allStyles=b(a.styles,c.styles,d.validStyles);if(!d.allClasses){a=a.classes;c=c.classes;f=d.validClasses;if(a)if(a===true)a=true;else{for(var e=0, +n=c.length,j;e<n;++e){j=c[e];f[j]||(f[j]=a(j))}a=false}else a=false;d.allClasses=a}}}function b(a,b,c){if(!a)return false;if(a===true)return true;for(var d in b)c[d]||(c[d]=a(d));return false}function c(a,b,c){if(!a.match||a.match(b)){if(a.noProperties)return false;c.hadInvalidAttribute=f(a.attributes,b.attributes)||c.hadInvalidAttribute;c.hadInvalidStyle=f(a.styles,b.styles)||c.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var d=false,e=a===true,n=b.length;n--;)if(e||a(b[n])){b.splice(n,1);d= +true}a=d}else a=false;c.hadInvalidClass=a||c.hadInvalidClass}}function f(a,b){if(!a)return false;var c=false,d=a===true,f;for(f in b)if(d||a(f)){delete b[f];c=true}return c}function d(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return false;a._.cachedChecks={};return true}function h(a,b){if(!a)return false;if(a===true)return a;if(typeof a=="string"){a=B(a);return a=="*"?true:CKEDITOR.tools.convertArrayToObject(a.split(b))}if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a): +false;var c={},d=0,f;for(f in a){c[f]=a[f];d++}return d?c:false}function l(a,b){if(a.nothingRequired)return true;var c,d,f,e;if(f=a.requiredClasses){e=b.classes;for(c=0;c<f.length;++c){d=f[c];if(typeof d=="string"){if(CKEDITOR.tools.indexOf(e,d)==-1)return false}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(e,d))return false}}return i(b.styles,a.requiredStyles)&&i(b.attributes,a.requiredAttributes)}function i(a,b){if(!b)return true;for(var c=0,d;c<b.length;++c){d=b[c];if(typeof d=="string"){if(!(d in +a))return false}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return false}return true}function g(a){if(!a)return{};for(var a=a.split(/\s*,\s*/).sort(),b={};a.length;)b[a.shift()]=w;return b}function m(a){for(var b,c,d,f,e={},n=1,a=B(a);b=a.match(x);){if(c=b[2]){d=t(c,"styles");f=t(c,"attrs");c=t(c,"classes")}else d=f=c=null;e["$"+n++]={elements:b[1],classes:c,styles:d,attributes:f};a=a.slice(b[0].length)}return e}function t(a,b){var c=a.match(F[b]);return c?B(c[1]):null}function s(a){var b= +a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes["class"];if(!a.styles)a.styles=CKEDITOR.tools.parseCssText(b||"",1);if(!a.classes)a.classes=c?c.split(/\s+/):[]}function y(a,b,d,f){var k=0,r;if(f.toHtml)b.name=b.name.replace(G,"$1");if(f.doCallbacks&&a.elementCallbacks){a:for(var x=a.elementCallbacks,h=0,o=x.length,w;h<o;++h)if(w=x[h](b)){r=w;break a}if(r)return r}if(f.doTransform)if(r=a._.transformations[b.name]){s(b);for(x=0;x<r.length;++x)n(a,b,r[x]);q(b)}if(f.doFilter){a:{x=b.name; +h=a._;a=h.allowedRules.elements[x];r=h.allowedRules.generic;x=h.disallowedRules.elements[x];h=h.disallowedRules.generic;o=f.skipRequired;w={valid:false,validAttributes:{},validClasses:{},validStyles:{},allAttributes:false,allClasses:false,allStyles:false,hadInvalidAttribute:false,hadInvalidClass:false,hadInvalidStyle:false};var p,g;if(!a&&!r)a=null;else{s(b);if(x){p=0;for(g=x.length;p<g;++p)if(c(x[p],b,w)===false){a=null;break a}}if(h){p=0;for(g=h.length;p<g;++p)c(h[p],b,w)}if(a){p=0;for(g=a.length;p< +g;++p)e(a[p],b,w,o)}if(r){p=0;for(g=r.length;p<g;++p)e(r[p],b,w,o)}a=w}}if(!a){d.push(b);return z}if(!a.valid){d.push(b);return z}g=a.validAttributes;var i=a.validStyles;r=a.validClasses;var x=b.attributes,F=b.styles,h=b.classes,o=b.classBackup,C=b.styleBackup,u,A,D=[];w=[];var v=/^data-cke-/;p=false;delete x.style;delete x["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(u in x)if(!g[u])if(v.test(u)){if(u!=(A=u.replace(/^data-cke-saved-/,""))&&!g[A]){delete x[u];p=true}}else{delete x[u]; +p=true}if(!a.allStyles||a.hadInvalidStyle){for(u in F)a.allStyles||i[u]?D.push(u+":"+F[u]):p=true;if(D.length)x.style=D.sort().join("; ")}else if(C)x.style=C;if(!a.allClasses||a.hadInvalidClass){for(u=0;u<h.length;++u)(a.allClasses||r[h[u]])&&w.push(h[u]);w.length&&(x["class"]=w.sort().join(" "));o&&w.length<o.split(/\s+/).length&&(p=true)}else o&&(x["class"]=o);p&&(k=z);if(!f.skipFinalValidation&&!j(b)){d.push(b);return z}}if(f.toHtml)b.name=b.name.replace($,"cke:$1");return k}function p(a){var b= +[],c;for(c in a)c.indexOf("*")>-1&&b.push(c.replace(/\*/g,".*"));return b.length?RegExp("^(?:"+b.join("|")+")$"):null}function q(a){var b=a.attributes,c;delete b.style;delete b["class"];if(c=CKEDITOR.tools.writeCssText(a.styles,true))b.style=c;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function j(a){switch(a.name){case "a":if(!a.children.length&&!a.attributes.name)return false;break;case "img":if(!a.attributes.src)return false}return true}function u(a){if(!a)return false;if(a===true)return true; +var b=p(a);return function(c){return c in a||b&&c.match(b)}}function v(){return new CKEDITOR.htmlParser.element("br")}function E(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.name=="br"||J.$block[a.name])}function k(a,b,c){var d=a.name;if(J.$empty[d]||!a.children.length)if(d=="hr"&&b=="br")a.replaceWith(v());else{a.parent&&c.push({check:"it",el:a.parent});a.remove()}else if(J.$block[d]||d=="tr")if(b=="br"){if(a.previous&&!E(a.previous)){b=v();b.insertBefore(a)}if(a.next&&!E(a.next)){b=v();b.insertAfter(a)}a.replaceWithChildren()}else{var d= +a.children,f;b:{f=J[b];for(var e=0,n=d.length,j;e<n;++e){j=d[e];if(j.type==CKEDITOR.NODE_ELEMENT&&!f[j.name]){f=false;break b}}f=true}if(f){a.name=b;a.attributes={};c.push({check:"parent-down",el:a})}else{f=a.parent;for(var e=f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||f.name=="body",k,r,n=d.length;n>0;){j=d[--n];if(e&&(j.type==CKEDITOR.NODE_TEXT||j.type==CKEDITOR.NODE_ELEMENT&&J.$inline[j.name])){if(!k){k=new CKEDITOR.htmlParser.element(b);k.insertAfter(a);c.push({check:"parent-down",el:k})}k.add(j, +0)}else{k=null;r=J[f.name]||J.span;j.insertAfter(a);f.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(j.type==CKEDITOR.NODE_ELEMENT&&!r[j.name])&&c.push({check:"el-up",el:j})}}a.remove()}}else if(d=="style")a.remove();else{a.parent&&c.push({check:"it",el:a.parent});a.replaceWithChildren()}}function n(a,b,c){var d,f;for(d=0;d<c.length;++d){f=c[d];if((!f.check||a.check(f.check,false))&&(!f.left||f.left(b))){f.right(b,aa);break}}}function r(a,b){var c=b.getDefinition(),d=c.attributes,f=c.styles,e,n,j,k;if(a.name!= +c.element)return false;for(e in d)if(e=="class"){c=d[e].split(/\s+/);for(j=a.classes.join("|");k=c.pop();)if(j.indexOf(k)==-1)return false}else if(a.attributes[e]!=d[e])return false;for(n in f)if(a.styles[n]!=f[n])return false;return true}function o(a,b){var c,d;if(typeof a=="string")c=a;else if(a instanceof CKEDITOR.style)d=a;else{c=a[0];d=a[1]}return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function M(a){return function(b){return r(b,a)}}function D(a){return function(b,c){c[a](b)}} +var J=CKEDITOR.dtd,z=1,L=CKEDITOR.tools.copy,B=CKEDITOR.tools.trim,w="cke-test",H=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=false;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a= +this.editor=a;this.customConfig=true;var b=a.config.allowedContent;if(b===true)this.disabled=true;else{if(!b)this.customConfig=false;this.allow(b,"config",1);this.allow(a.config.extraAllowedContent,"extra",1);this.allow(H[a.enterMode]+" "+H[a.shiftEnterMode],"default",1);this.disallow(a.config.disallowedContent)}}else{this.customConfig=false;this.allow(a,"default",1)}};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,f){if(!d(this,b,f))return false;var e,n;if(typeof b=="string")b= +m(b);else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,f);e=b.getDefinition();b={};f=e.attributes;b[e.element]=e={styles:e.styles,requiredStyles:e.styles&&CKEDITOR.tools.objectKeys(e.styles)};if(f){f=L(f);e.classes=f["class"]?f["class"].split(/\s+/):null;e.requiredClasses=e.classes;delete f["class"];e.attributes=f;e.requiredAttributes=f&&CKEDITOR.tools.objectKeys(f)}}else if(CKEDITOR.tools.isArray(b)){for(e=0;e<b.length;++e)n= +this.allow(b[e],c,f);return n}a(this,b,c,this.allowedContent,this._.allowedRules);return true},applyTo:function(a,b,c,d){if(this.disabled)return false;var f=this,e=[],n=this.editor&&this.editor.config.protectedSource,r,x=false,h={doFilter:!c,doTransform:true,doCallbacks:true,toHtml:b};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if(a.attributes["data-cke-filter"]=="off")return false;if(!b||!(a.name=="span"&&~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))){r=y(f, +a,e,h);if(r&z)x=true;else if(r&2)return false}}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));c=[];var j,k,o;if(n)for(k=0;k<n.length;++k)if((o=d.match(n[k]))&&o[0].length==d.length){c=true;break a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);d.children.length==1&&(j=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&y(f,j,c,h);c=!c.length}c||e.push(a)}},null,true);e.length&&(x=true);for(var o, +a=[],d=H[d||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)],p;c=e.pop();)c.type==CKEDITOR.NODE_ELEMENT?k(c,d,a):c.remove();for(;o=a.pop();){c=o.el;if(c.parent){p=J[c.parent.name]||J.span;switch(o.check){case "it":J.$removeEmpty[c.name]&&!c.children.length?k(c,d,a):j(c)||k(c,d,a);break;case "el-up":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!p[c.name]&&k(c,d,a);break;case "parent-down":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!p[c.name]&&k(c.parent,d,a)}}}return x},checkFeature:function(a){if(this.disabled|| +!a)return true;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=true},disallow:function(b){if(!d(this,b,true))return false;typeof b=="string"&&(b=m(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return true},addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],f;for(b=0;b<a.length&&!f;++b){c=a[b];if((typeof c=="string"||c instanceof CKEDITOR.style)&&this.check(c))f=c}if(f){for(b=0;b<a.length;++b)d.push(o(a[b], +f));this.addTransformations(d)}}},addElementCallback:function(a){if(!this.elementCallbacks)this.elementCallbacks=[];this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return true;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):true},addTransformations:function(a){var b, +c;if(!this.disabled&&a){var d=this._.transformations,f;for(f=0;f<a.length;++f){b=a[f];var e=void 0,n=void 0,j=void 0,k=void 0,r=void 0,x=void 0;c=[];for(n=0;n<b.length;++n){j=b[n];if(typeof j=="string"){j=j.split(/\s*:\s*/);k=j[0];r=null;x=j[1]}else{k=j.check;r=j.left;x=j.right}if(!e){e=j;e=e.element?e.element:k?k.match(/^([a-z0-9]+)/i)[0]:e.left.getDefinition().element}r instanceof CKEDITOR.style&&(r=M(r));c.push({check:k==e?null:k,left:r,right:typeof x=="string"?D(x):x})}b=e;d[b]||(d[b]=[]);d[b].push(c)}}}, +check:function(a,b,c){if(this.disabled)return true;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return true;return false}var f,e;if(typeof a=="string"){e=a+"<"+(b===false?"0":"1")+(c?"1":"0")+">";if(e in this._.cachedChecks)return this._.cachedChecks[e];d=m(a).$1;f=d.styles;var j=d.classes;d.name=d.elements;d.classes=j=j?j.split(/\s*,\s*/):[];d.styles=g(f);d.attributes=g(d.attributes);d.children=[];j.length&&(d.attributes["class"]=j.join(" "));if(f)d.attributes.style= +CKEDITOR.tools.writeCssText(d.styles);f=d}else{d=a.getDefinition();f=d.styles;j=d.attributes||{};if(f){f=L(f);j.style=CKEDITOR.tools.writeCssText(f,true)}else f={};f={name:d.element,attributes:j,classes:j["class"]?j["class"].split(/\s+/):[],styles:f,children:[]}}var j=CKEDITOR.tools.clone(f),k=[],r;if(b!==false&&(r=this._.transformations[f.name])){for(d=0;d<r.length;++d)n(this,f,r[d]);q(f)}y(this,j,k,{doFilter:true,doTransform:b!==false,skipRequired:!c,skipFinalValidation:!c});b=k.length>0?false: +CKEDITOR.tools.objectCompare(f.attributes,j.attributes,true)?true:false;typeof a=="string"&&(this._.cachedChecks[e]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var f=a.slice(),e;if(this.check(H[c]))return c;for(d||(f=f.reverse());e=f.pop();)if(this.check(e))return b[e];return CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent; +delete this.disallowedContent}};var C={styles:1,attributes:1,classes:1},A={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},x=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,F={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},G=/^cke:(object|embed|param)$/,$=/^(object|embed|param)$/,aa=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a, +"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];if(d){/^\d+$/.test(d)&&(d=d+"px");a.styles[c]=d}}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],f=d&&d.match(/^(\d+)(?:\.\d*)?px$/);f?a.attributes[c]=f[1]:d==w&&(a.attributes[c]=w)}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b= +a.attributes.align;if(b=="left"||b=="right")a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if(b=="left"||b=="right")a.attributes.align=b}delete a.styles["float"]},matchesStyle:r,transform:function(a,b){if(typeof b=="string")a.name=b;else{var c=b.getDefinition(),d=c.styles,f=c.attributes,e,j,n,k;a.name=c.element;for(e in f)if(e=="class"){c=a.classes.join("|");for(n=f[e].split(/\s+/);k=n.pop();)c.indexOf(k)==-1&& +a.classes.push(k)}else a.attributes[e]=f[e];for(j in d)a.styles[j]=d[j]}}}})(); +(function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);if(a)this.currentActive=a;if(!this.hasFocus&&!this._.locked){(a=CKEDITOR.currentInstance)&&a.focusManager.blur(1);this.hasFocus=true;(a=this._.editor.container)&&a.addClass("cke_focus");this._.editor.fire("focus")}}, +lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(a){function e(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?e.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;e.call(this)},b,this)}},add:function(a,e){var b=a.getCustomData("focusmanager");if(!b|| +b!=this){b&&b.remove(a);var b="focus",c="blur";if(e)if(CKEDITOR.env.ie){b="focusin";c="focusout"}else CKEDITOR.event.useCapture=1;var f={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,f.focus,this);a.on(c,f.blur,this);if(e)CKEDITOR.event.useCapture=0;a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",f)}},remove:function(a){a.removeCustomData("focusmanager");var e=a.removeCustomData("focusmanager_handlers");a.removeListener("blur", +e.blur);a.removeListener("focus",e.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this}; +(function(){var a,e=function(b){var b=b.data,f=b.getKeystroke(),d=this.keystrokes[f],e=this._.editor;a=e.fire("key",{keyCode:f,domEvent:b})===false;if(!a){d&&(a=e.execCommand(d,{from:"keystrokeHandler"})!==false);a||(a=!!this.blockedKeystrokes[f])}a&&b.preventDefault(true);return!a},b=function(b){if(a){a=false;b.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",e,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}})(); +(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,e,b){if(!a||!CKEDITOR.lang.languages[a])a=this.detect(e, +a);var c=this,e=function(){c[a].dir=c.rtl[a]?"rtl":"ltr";b(a,c[a])};this[a]?e():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),e,this)},detect:function(a,e){var b=this.languages,e=e||navigator.userLanguage||navigator.language||a,c=e.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),f=c[1],c=c[2];b[f+"-"+c]?f=f+"-"+c:b[f]||(f=null);CKEDITOR.lang.detect=f?function(){return f}:function(a){return a};return f||a}}})(); +CKEDITOR.scriptLoader=function(){var a={},e={};return{load:function(b,c,f,d){var h=typeof b=="string";h&&(b=[b]);f||(f=CKEDITOR);var l=b.length,i=[],g=[],m=function(a){c&&(h?c.call(f,a):c.call(f,i,g))};if(l===0)m(true);else{var t=function(a,b){(b?i:g).push(a);if(--l<=0){d&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");m(b)}},s=function(b,c){a[b]=1;var d=e[b];delete e[b];for(var f=0;f<d.length;f++)d[f](b,c)},y=function(b){if(a[b])t(b,true);else{var d=e[b]||(e[b]=[]);d.push(t);if(!(d.length> +1)){var f=new CKEDITOR.dom.element("script");f.setAttributes({type:"text/javascript",src:b});if(c)if(CKEDITOR.env.ie&&CKEDITOR.env.version<11)f.$.onreadystatechange=function(){if(f.$.readyState=="loaded"||f.$.readyState=="complete"){f.$.onreadystatechange=null;s(b,true)}};else{f.$.onload=function(){setTimeout(function(){s(b,true)},0)};f.$.onerror=function(){s(b,false)}}f.appendTo(CKEDITOR.document.getHead())}}};d&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var p=0;p<l;p++)y(b[p])}}, +queue:function(){function a(){var b;(b=c[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var c=[];return function(f,d){var e=this;c.push({scriptUrl:f,callback:function(){d&&d.apply(this,arguments);c.shift();a.call(e)}});c.length==1&&a.call(this)}}()}}();CKEDITOR.resourceManager=function(a,e){this.basePath=a;this.fileName=e;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}}; +CKEDITOR.resourceManager.prototype={add:function(a,e){if(this.registered[a])throw'[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.';var b=this.registered[a]=e||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var e=this.externals[a];return CKEDITOR.getUrl(e&&e.dir||this.basePath+a+"/")},getFilePath:function(a){var e=this.externals[a]; +return CKEDITOR.getUrl(this.getPath(a)+(e?e.file:this.fileName+".js"))},addExternal:function(a,e,b){for(var a=a.split(","),c=0;c<a.length;c++){var f=a[c];b||(e=e.replace(/[^\/]+$/,function(a){b=a;return""}));this.externals[f]={dir:e,file:b||this.fileName+".js"}}},load:function(a,e,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var c=this.loaded,f=this.registered,d=[],h={},l={},i=0;i<a.length;i++){var g=a[i];if(g)if(!c[g]&&!f[g]){var m=this.getFilePath(g);d.push(m);m in h||(h[m]=[]);h[m].push(g)}else l[g]= +this.get(g)}CKEDITOR.scriptLoader.load(d,function(a,d){if(d.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+h[d[0]].join(",")+'" was not found at "'+d[0]+'".';for(var f=0;f<a.length;f++)for(var p=h[a[f]],g=0;g<p.length;g++){var j=p[g];l[j]=this.get(j);c[j]=1}e.call(b,l)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"); +CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(a){var e={};return function(b,c,f){var d={},h=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(d,a);var b=[],m;for(m in a){var l=a[m],s=l&&l.requires;if(!e[m]){if(l.icons)for(var y=l.icons.split(","),p=y.length;p--;)CKEDITOR.skin.addIcon(y[p],l.path+"icons/"+(CKEDITOR.env.hidpi&&l.hidpi?"hidpi/":"")+y[p]+".png");e[m]=1}if(s){s.split&&(s=s.split(","));for(l=0;l<s.length;l++)d[s[l]]||b.push(s[l])}}if(b.length)h.call(this, +b);else{for(m in d){l=d[m];if(l.onLoad&&!l.onLoad._called){l.onLoad()===false&&delete d[m];l.onLoad._called=1}}c&&c.call(f||window,d)}},this)};h.call(this,b)}});CKEDITOR.plugins.setLang=function(a,e,b){var c=this.get(a),a=c.langEntries||(c.langEntries={}),c=c.lang||(c.lang=[]);c.split&&(c=c.split(","));CKEDITOR.tools.indexOf(c,e)==-1&&c.push(e);a[e]=b};CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this}; +CKEDITOR.ui.prototype={add:function(a,e,b){b.name=a.toLowerCase();var c=this.items[a]={type:e,command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(c,b)},get:function(a){return this.instances[a]},create:function(a){var e=this.items[a],b=e&&this._.handlers[e.type],c=e&&e.command&&this.editor.getCommand(e.command),b=b&&b.create.apply(this,e.args);this.instances[a]=b;c&&c.uiItems.push(b);if(b&&!b.type)b.type=e.type;return b},addHandler:function(a,e){this._.handlers[a]= +e},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+"_"+a}};CKEDITOR.event.implementOn(CKEDITOR.ui); +(function(){function a(a,c,d){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(c!==void 0){if(c instanceof CKEDITOR.dom.element){if(!d)throw Error("One of the element modes must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&d==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!(d==CKEDITOR.ELEMENT_MODE_INLINE?c.is(CKEDITOR.dtd.$editable)||c.is("textarea"):d==CKEDITOR.ELEMENT_MODE_REPLACE? +!c.is(CKEDITOR.dtd.$nonBodyContent):1))throw Error('The specified element mode is not supported on element: "'+c.getName()+'".');this.element=c;this.elementMode=d;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(c.getId()||c.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||e();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this); +this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",b);this.on("selectionChange",function(a){f(this,a.data.path)});this.on("activeFilterChange",function(){f(this,this.elementPath(),true)});this.on("mode",b);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){h(this,a)},0,this)}function e(){do var a="editor"+ +++s;while(CKEDITOR.instances[a]);return a}function b(){var a=this.commands,b;for(b in a)c(this,a[b])}function c(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function f(a,b,c){if(b){var d,f,e=a.commands;for(f in e){d=e[f];(c||d.contextSensitive)&&d.refresh(a,b)}}}function d(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=y[b]||(y[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)==b|| +!d(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};d(a)});return true}function h(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}c=a.config;a.readOnly=!(!c.readOnly&&!(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled"):a.element.isReadOnly():a.elementMode== +CKEDITOR.ELEMENT_MODE_REPLACE&&a.element.hasAttribute("disabled")));a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):false;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;if(c.skin)CKEDITOR.skinName=c.skin;a.fireOnce("configLoaded");a.dataProcessor= +new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);l(a)});if(b&&b.customConfig!=null)a.config.customConfig=b.customConfig;d(a)||a.fireOnce("customConfigLoaded")}function l(a){CKEDITOR.skin.loadPart("editor",function(){i(a)})}function i(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title=typeof d=="string"||d===false?d:[a.lang.editor,a.name].join(", ");if(!a.config.contentsLangDirection)a.config.contentsLangDirection= +a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");g(a)})}function g(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);m(a)})}function m(a){var b=a.config,c=b.plugins,d=b.extraPlugins,f=b.removePlugins;if(d)var e=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(e,""),c=c+(","+d);if(f)var k=RegExp("(?:^|,)(?:"+f.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(k,"");CKEDITOR.env.air&& +(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],f=[],e=[];a.plugins=c;for(var j in c){var h=c[j],g=h.lang,i=null,u=h.requires,w;CKEDITOR.tools.isArray(u)&&(u=u.join(","));if(u&&(w=u.match(k)))for(;u=w.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+b+'" plugin.');},0,null,[u,j]);if(g&&!a.lang[j]){g.split&&(g=g.split(","));if(CKEDITOR.tools.indexOf(g,a.langCode)>= +0)i=a.langCode;else{i=a.langCode.replace(/-.*/,"");i=i!=a.langCode&&CKEDITOR.tools.indexOf(g,i)>=0?i:CKEDITOR.tools.indexOf(g,"en")>=0?"en":g[0]}if(!h.langEntries||!h.langEntries[i])e.push(CKEDITOR.getUrl(h.path+"lang/"+i+".js"));else{a.lang[j]=h.langEntries[i];i=null}}f.push(i);d.push(h)}CKEDITOR.scriptLoader.load(e,function(){for(var c=["beforeInit","init","afterInit"],e=0;e<c.length;e++)for(var n=0;n<d.length;n++){var j=d[n];e===0&&(f[n]&&j.lang&&j.langEntries)&&(a.lang[j.name]=j.langEntries[f[n]]); +if(j[c[e]])j[c[e]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(n=0;n<a.config.blockedKeystrokes.length;n++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[n]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function t(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b): +a.setHtml(b);return true}return false}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var s=0,y={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var d=new CKEDITOR.command(this,b);this.mode&&c(this,d);return this.commands[a]=d},_attachToForm:function(){function a(d){b.updateElement();b._.required&&(!c.getValue()&&b.fire("required")===false)&&d.data.preventDefault()}var b=this,c=b.element,d=new CKEDITOR.dom.element(c.$.form);if(c.is("textarea")&& +d){d.on("submit",a);if(d.$.submit&&d.$.submit.call&&d.$.submit.apply)d.$.submit=CKEDITOR.tools.override(d.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}});b.on("destroy",function(){d.removeListener("submit",a)})}},destroy:function(a){this.fire("beforeDestroy");!a&&t.call(this);this.editable(null);this.filter.destroy();delete this.filter;delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed", +null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==false){d.returnValue=c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec", +d)!==false)return d.returnValue}return false},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string"){var b=this.element;b&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&& +(a=b.is("textarea")?b.getValue():b.getHtml())}return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,b,c){var d=true,f=b;if(b&&typeof b=="object"){c=b.internal;f=b.callback;d=!b.noSnapshot}!c&&d&&this.fire("saveSnapshot");if(f||!c)this.once("dataReady",function(a){!c&&d&&this.fire("saveSnapshot");f&&f.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=a==null||a;if(this.readOnly!= +a){this.readOnly=a;this.keystrokeHandler.blockedKeystrokes[8]=+a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b){this.fire("insertHtml",{dataValue:a,mode:b})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this.status=="ready"&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return t.call(this)}, +setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,f=b.length;f--;){c=b[f];d=0;if(CKEDITOR.tools.isArray(c)){d=c[1];c=c[0]}d?a[c]=d:delete a[c]}},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){if(!a)a=this.filter;if(this.activeFilter!==a){this.activeFilter=a;this.fire("activeFilterChange");a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode), +a.getAllowedEnterMode(this.shiftEnterMode,true))}},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b){this.activeEnterMode=a;this.activeShiftEnterMode=b;this.fire("activeEnterModeChange")}}})})();CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3; +CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}}; +(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,e={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,f,d=0,h;c=this._.htmlPartsRegex.exec(b);){f=c.index;if(f>d){d=b.substring(d,f);if(h)h.push(d);else this.onText(d)}d= +this._.htmlPartsRegex.lastIndex;if(f=c[1]){f=f.toLowerCase();if(h&&CKEDITOR.dtd.$cdata[f]){this.onCDATA(h.join(""));h=null}if(!h){this.onTagClose(f);continue}}if(h)h.push(c[0]);else if(f=c[3]){f=f.toLowerCase();if(!/="/.test(f)){var l={},i,g=c[4];c=!!c[5];if(g)for(;i=a.exec(g);){var m=i[1].toLowerCase();i=i[2]||i[3]||i[4]||"";l[m]=!i&&e[m]?m:CKEDITOR.tools.htmlDecodeAttr(i)}this.onTagOpen(f,l,c);!h&&CKEDITOR.dtd.$cdata[f]&&(h=[])}}else if(f=c[2])this.onComment(f)}if(b.length>d)this.onText(b.substring(d, +b.length))}}})(); +CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("<",a)},openTagClose:function(a,e){e?this._.output.push(" />"):this._.output.push(">")},attribute:function(a,e){typeof e=="string"&&(e=CKEDITOR.tools.htmlEncodeAttr(e));this._.output.push(" ",a,'="',e,'"')},closeTag:function(a){this._.output.push("</",a,">")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("<\!--",a,"--\>")},write:function(a){this._.output.push(a)}, +reset:function(){this._.output=[];this._.indent=false},getHtml:function(a){var e=this._.output.join("");a&&this.reset();return e}}});"use strict"; +(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,e=CKEDITOR.tools.indexOf(a,this),b=this.previous,c=this.next;b&&(b.next=c);c&&(c.previous=b);a.splice(e,1);this.parent=null},replaceWith:function(a){var e=this.parent.children,b=CKEDITOR.tools.indexOf(e,this),c=a.previous=this.previous,f=a.next=this.next;c&&(c.next=a);f&&(f.previous=a);e[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var e=a.parent.children, +b=CKEDITOR.tools.indexOf(e,a),c=a.next;e.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;c&&(c.previous=this);this.parent=a.parent},insertBefore:function(a){var e=a.parent.children,b=CKEDITOR.tools.indexOf(e,a);e.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var e=typeof a=="function"?a:typeof a=="string"?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&& +b.type==CKEDITOR.NODE_ELEMENT;){if(e(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this);return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}})();"use strict";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:false}}; +CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,e){var b=this.value;if(!(b=a.onComment(e,b,this))){this.remove();return false}if(typeof b!="string"){this.replaceWith(b);return false}this.value=b;return true},writeHtml:function(a,e){e&&this.filter(e);a.comment(this.value)}});"use strict"; +(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,e){if(!(this.value=a.onText(e,this.value,this))){this.remove();return false}},writeHtml:function(a,e){e&&this.filter(e);a.text(this.value)}})})();"use strict"; +(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}}; +(function(){function a(a){return a.attributes["data-cke-survive"]?false:a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var e=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),f={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml= +function(d,h,l){function i(a){var b;if(j.length>0)for(var c=0;c<j.length;c++){var d=j[c],f=d.name,e=CKEDITOR.dtd[f],k=v.name&&CKEDITOR.dtd[v.name];if((!k||k[f])&&(!a||!e||e[a]||!CKEDITOR.dtd[a])){if(!b){g();b=1}d=d.clone();d.parent=v;v=d;j.splice(c,1);c--}else if(f==v.name){t(v,v.parent,1);c--}}}function g(){for(;u.length;)t(u.shift(),v)}function m(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))? +c.value=d:a.children.length=b-1}}function t(b,c,d){var c=c||v||q,f=v;if(b.previous===void 0){if(s(c,b)){v=c;p.onTagOpen(l,{});b.returnPoint=c=v}m(b);(!a(b)||b.children.length)&&c.add(b);b.name=="pre"&&(k=false);b.name=="textarea"&&(E=false)}if(b.returnPoint){v=b.returnPoint;delete b.returnPoint}else v=d?c:f}function s(a,b){if((a==q||a.name=="body")&&l&&(!a.name||CKEDITOR.dtd[a.name][l])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&& +!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function y(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"||a=="dd"&&b=="dt":false}var p=new CKEDITOR.htmlParser,q=h instanceof CKEDITOR.htmlParser.element?h:typeof h=="string"?new CKEDITOR.htmlParser.element(h):new CKEDITOR.htmlParser.fragment,j=[],u=[],v=q,E=q.name=="textarea",k=q.name=="pre";p.onTagOpen=function(d,f,h,l){f=new CKEDITOR.htmlParser.element(d,f);if(f.isUnknown&&h)f.isEmpty= +true;f.isOptionalClose=l;if(a(f))j.push(f);else{if(d=="pre")k=true;else{if(d=="br"&&k){v.add(new CKEDITOR.htmlParser.text("\n"));return}d=="textarea"&&(E=true)}if(d=="br")u.push(f);else{for(;;){l=(h=v.name)?CKEDITOR.dtd[h]||(v._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!f.isUnknown&&!v.isUnknown&&!l[d])if(v.isOptionalClose)p.onTagClose(h);else if(d in b&&h in b){h=v.children;(h=h[h.length-1])&&h.name=="li"||t(h=new CKEDITOR.htmlParser.element("li"),v);!f.returnPoint&&(f.returnPoint=v); +v=h}else if(d in CKEDITOR.dtd.$listItem&&!y(d,h))p.onTagOpen(d=="li"?"ul":"dl",{},0,1);else if(h in e&&!y(d,h)){!f.returnPoint&&(f.returnPoint=v);v=v.parent}else{h in CKEDITOR.dtd.$inline&&j.unshift(v);if(v.parent)t(v,v.parent,1);else{f.isOrphan=1;break}}else break}i(d);g();f.parent=v;f.isEmpty?t(f):v=f}}};p.onTagClose=function(a){for(var b=j.length-1;b>=0;b--)if(a==j[b].name){j.splice(b,1);return}for(var c=[],d=[],f=v;f!=q&&f.name!=a;){f._.isBlockLike||d.unshift(f);c.push(f);f=f.returnPoint||f.parent}if(f!= +q){for(b=0;b<c.length;b++){var e=c[b];t(e,e.parent)}v=f;f._.isBlockLike&&g();t(f,f.parent);if(f==v)v=v.parent;j=j.concat(d)}a=="body"&&(l=false)};p.onText=function(a){if((!v._.hasInlineStarted||u.length)&&!k&&!E){a=CKEDITOR.tools.ltrim(a);if(a.length===0)return}var b=v.name,d=b?CKEDITOR.dtd[b]||(v._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!E&&!d["#"]&&b in e){p.onTagOpen(f[b]||"");p.onText(a)}else{g();i();!k&&!E&&(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=new CKEDITOR.htmlParser.text(a); +if(s(v,a))this.onTagOpen(l,{},0,1);v.add(a)}};p.onCDATA=function(a){v.add(new CKEDITOR.htmlParser.cdata(a))};p.onComment=function(a){g();i();v.add(new CKEDITOR.htmlParser.comment(a))};p.parse(d);for(g();v!=q;)t(v,v.parent,1);m(q);return q};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length=== +0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this;this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,false,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)this.children[b].filter(a, +c)===false&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var f=this.getFilterContext();if(c&&!this.parent&&b)b.onRoot(f,this);b&&this.filterChildren(b,false,f);b=0;c=this.children;for(f=c.length;b<f;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var f=a(this);if(f!==false)for(var c=this.children,e=0;e<c.length;e++){f=c[e];f.type==CKEDITOR.NODE_ELEMENT?f.forEach(a,b):(!b||f.type==b)&&a(f)}},getFilterContext:function(a){return a|| +{}}}})();"use strict"; +(function(){function a(){this.rules=[]}function e(b,c,f,d){var e,l;for(e in c){(l=b[e])||(l=b[e]=new a);l.add(c[e],f,d)}}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,c){var f;if(typeof c=="number")f=c;else if(c&&"priority"in +c)f=c.priority;typeof f!="number"&&(f=10);typeof c!="object"&&(c={});a.elementNames&&this.elementNameRules.addMany(a.elementNames,f,c);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,f,c);a.elements&&e(this.elementsRules,a.elements,f,c);a.attributes&&e(this.attributesRules,a.attributes,f,c);a.text&&this.textRules.add(a.text,f,c);a.comment&&this.commentRules.add(a.comment,f,c);a.root&&this.rootRules.add(a.root,f,c)},applyTo:function(a){a.filter(this)},onElementName:function(a,c){return this.elementNameRules.execOnName(a, +c)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,f){return this.textRules.exec(a,c,f)},onComment:function(a,c,f){return this.commentRules.exec(a,c,f)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var f=[this.elementsRules["^"],this.elementsRules[c.name],this.elementsRules.$],d,e=0;e<3;e++)if(d=f[e]){d=d.exec(a,c,this);if(d===false)return null;if(d&&d!=c)return this.onNode(a,d);if(c.parent&&!c.name)break}return c}, +onNode:function(a,c){var f=c.type;return f==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):f==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):f==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,f,d){return(f=this.attributesRules[f])?f.exec(a,d,c,this):d}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,f){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:f})},addMany:function(a, +c,f){for(var d=[this.findIndex(c),0],e=0,l=a.length;e<l;e++)d.push({value:a[e],priority:c,options:f});this.rules.splice.apply(this.rules,d)},findIndex:function(a){for(var c=this.rules,f=c.length-1;f>=0&&a<c[f].priority;)f--;return f+1},exec:function(a,c){var f=c instanceof CKEDITOR.htmlParser.node||c instanceof CKEDITOR.htmlParser.fragment,d=Array.prototype.slice.call(arguments,1),e=this.rules,l=e.length,i,g,m,t;for(t=0;t<l;t++){if(f){i=c.type;g=c.name}m=e[t];if(!(a.nonEditable&&!m.options.applyToAll|| +a.nestedEditable&&m.options.excludeNestedEditable)){m=m.value.apply(null,d);if(m===false||f&&m&&(m.name!=g||m.type!=i))return m;m!=null&&(d[0]=c=m)}}return c},execOnName:function(a,c){for(var f=0,d=this.rules,e=d.length,l;c&&f<e;f++){l=d[f];!(a.nonEditable&&!l.options.applyToAll||a.nestedEditable&&l.options.excludeNestedEditable)&&(c=c.replace(l.value[0],l.value[1]))}return c}}})(); +(function(){function a(a,e){function n(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function r(a,f){return function(e){if(e.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var j=[],k=b(e),x,r;if(k)for(w(k,1)&&j.push(k);k;){if(d(k)&&(x=c(k))&&w(x))if((r=c(x))&&!d(r))j.push(x);else{n(o).insertAfter(x);x.remove()}k=k.previous}for(k=0;k<j.length;k++)j[k].remove();if(j=(typeof f=="function"?f(e):f)!==false)if(!o&&!CKEDITOR.env.needsBrFiller&& +e.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)j=false;else if(!o&&!CKEDITOR.env.needsBrFiller&&(document.documentMode>7||e.name in CKEDITOR.dtd.tr||e.name in CKEDITOR.dtd.$listItem))j=false;else{j=b(e);j=!j||e.name=="form"&&j.name=="input"}j&&e.add(n(a))}}}function w(a,b){if((!o||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(j))){if(c.index){(new CKEDITOR.htmlParser.text(a.value.substring(0, +c.index))).insertBefore(a);a.value=c[0]}if(!CKEDITOR.env.needsBrFiller&&o&&(!b||a.parent.name in i))return true;if(!o)if((c=a.previous)&&c.name=="br"||!c||d(c))return true}return false}var g={elements:{}},o=e=="html",i=CKEDITOR.tools.extend({},k),C;for(C in i)"#"in v[C]||delete i[C];for(C in i)g.elements[C]=r(o,a.config.fillEmptyBlocks);g.root=r(o,false);g.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e=b.attributes;if("data-cke-bogus"in e||"data-cke-eol"in +e)delete e["data-cke-bogus"];else{for(e=b.next;e&&f(e);)e=e.next;var j=c(b);!e&&d(b.parent)?h(b.parent,n(a)):d(e)&&(j&&!d(j))&&n(a).insertBefore(e)}}}}(o);return g}function e(a,b){return a!=CKEDITOR.ENTER_BR&&b!==false?a==CKEDITOR.ENTER_DIV?"div":"p":false}function b(a){for(a=a.children[a.children.length-1];a&&f(a);)a=a.previous;return a}function c(a){for(a=a.previous;a&&f(a);)a=a.previous;return a}function f(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&& +a.attributes["data-cke-bookmark"]}function d(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in k||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function h(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;if(c){c.next=b;b.previous=c}}function l(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function i(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}} +function g(a){return a.replace(D,function(a,b,c){return"<"+b+c.replace(J,function(a,b){return z.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function m(a,b){return a.replace(b,function(a,b,c){a.indexOf("<textarea")===0&&(a=b+y(c).replace(/</g,"<").replace(/>/g,">")+"</textarea>");return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function t(a){return a.replace(w,function(a,b){return decodeURIComponent(b)})}function s(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g, +function(a){return"<\!--"+u+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function y(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function p(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function q(a,b){for(var c=[],d=b.config.protectedSource,f=b._.dataStore||(b._.dataStore= +{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),j=0;j<d.length;j++)a=a.replace(d[j],function(a){a=a.replace(e,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(e,function(a,b,d){return"<\!--"+u+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g, +"%2D%2D")+"--\>"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g,function(a){return a.replace(/<\!--\{cke_protected\}([^>]*)--\>/g,function(a,b){f[f.id]=decodeURIComponent(b);return"{cke_protected_"+f.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,f){return"<"+c+d+">"+p(y(f),b)+"</"+c+">"})}CKEDITOR.htmlDataProcessor=function(b){var c,d,f=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter; +this.htmlFilter=d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(n);c.addRules(r,{applyToAll:true});c.addRules(a(b,"data"),{applyToAll:true});d.addRules(o);d.addRules(M,{applyToAll:true});d.addRules(a(b,"html"),{applyToAll:true});b.on("toHtml",function(a){var a=a.data,c=a.dataValue,d,c=q(c,b),c=m(c,B),c=g(c),c=m(c,L),c=c.replace(H,"$1cke:$2"),c=c.replace(A,"<cke:$1$2></cke:$1>"),c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi, +"$1data-cke-"+CKEDITOR.rnd+"-$2");d=a.context||b.editable().getName();var f;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&d=="pre"){d="div";c="<pre>"+c+"</pre>";f=1}d=b.document.createElement(d);d.setHtml("a"+c);c=d.getHtml().substr(1);c=c.replace(RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");f&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(C,"$1$2");c=t(c);c=y(c);d=a.fixForBody===false?false:e(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,d);if(d){f=c; +if(!f.children.length&&CKEDITOR.dtd[f.name][d]){d=new CKEDITOR.htmlParser.element(d);f.add(d)}}a.dataValue=c},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,true,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(f.dataFilter,true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue= +s(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\/?>/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,e(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(f.htmlFilter,true)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,false,true)},null,null,11);b.on("toDataFormat",function(a){var c= +a.data.dataValue,d=f.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(true);c=y(c);c=p(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var f=this.editor,e,j,k;if(b&&typeof b=="object"){e=b.context;c=b.fixForBody;d=b.dontFilter;j=b.filter;k=b.enterMode}else e=b;!e&&e!==null&&(e=f.editable().getName());return f.fire("toHtml",{dataValue:a,context:e,fixForBody:c,dontFilter:d,filter:j||f.filter,enterMode:k||f.enterMode}).dataValue},toDataFormat:function(a, +b){var c,d,f;if(b){c=b.context;d=b.filter;f=b.enterMode}!c&&c!==null&&(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:f||this.editor.enterMode}).dataValue}};var j=/(?: |\xa0)$/,u="{cke_protected}",v=CKEDITOR.dtd,E=["caption","colgroup","col","thead","tfoot","tbody"],k=CKEDITOR.tools.extend({},v.$blockLimit,v.$block),n={elements:{input:l,textarea:l}},r={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/, +""]]},o={elements:{embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;if(c)a.attributes.width=c;if(b)a.attributes.height=b}},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}}},M={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false; +for(var c=["name","href","src"],d,f=0;f<c.length;f++){d="data-cke-saved-"+c[f];d in b&&delete b[c[f]]}}return a},table:function(a){a.children.slice(0).sort(function(a,b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(E,a.name);d=CKEDITOR.tools.indexOf(E,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=a.parent?a.getIndex():-1;d=b.parent?b.getIndex():-1}return c>d?1:-1})},param:function(a){a.children=[];a.isEmpty=true;return a},span:function(a){a.attributes["class"]=="Apple-style-span"&& +delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];if(b&&b.value)b.value=CKEDITOR.tools.trim(b.value);if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b=a.children[0];!b&&h(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:i,textarea:i},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g, +""))||false}}};if(CKEDITOR.env.ie)M.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};var D=/<(a|area|img|input|source)\b([^>]*)>/gi,J=/([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,z=/^(href|src|name)$/i,L=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,B=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,w=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,H=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi, +C=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,A=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict"; +CKEDITOR.htmlParser.element=function(a,e){this.name=a;this.attributes=e||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&&!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; +CKEDITOR.htmlParser.cssStyle=function(a){var e={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,f){c=="font-family"&&(f=f.replace(/["']/g,""));e[c.toLowerCase()]=f});return{rules:e,populate:function(a){var c=this.toString();if(c)a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c},toString:function(){var a=[],c; +for(c in e)e[c]&&a.push(c,":",e[c],";");return a.join("")}}}; +(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(typeof a=="string"?b.name==a:b.name in a)}}var e=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,e,l,b=d.getFilterContext(b);if(b.off)return true; +if(!d.parent)a.onRoot(b,d);for(;;){e=d.name;if(!(l=a.onElementName(b,e))){this.remove();return false}d.name=l;if(!(d=a.onElement(b,d))){this.remove();return false}if(d!==this){this.replaceWith(d);return false}if(d.name==e)break;if(d.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(d);return false}if(!d.name){this.replaceWithChildren();return false}}e=d.attributes;var i,g;for(i in e){g=i;for(l=e[i];;)if(g=a.onAttributeName(b,i))if(g!=i){delete e[i];i=g}else break;else{delete e[i];break}g&&((l=a.onAttribute(b, +d,g,l))===false?delete e[g]:e[g]=l)}d.isEmpty||this.filterChildren(a,false,b);return true},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var d=this.name,h=[],l=this.attributes,i,g;a.openTag(d,l);for(i in l)h.push([i,l[i]]);a.sortAttributes&&h.sort(e);i=0;for(g=h.length;i<g;i++){l=h[i];a.attribute(l[0],l[1])}a.openTagClose(d,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(d)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a= +this.children,b=a.length;b;)a[--b].insertAfter(this);this.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;typeof b!="function"&&(b=a(b));for(var f=0,d=this.children.length;f<d;++f)if(b(this.children[f]))return this.children[f];return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){for(var a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children,b=0, +d=a.length;b<d;++b)a[b].parent=this},getOuterHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),d=this.clone(),e=0;e<b.length;++e)b[e].parent=d;d.children=b;if(b[0])b[0].previous=null;if(a>0)this.children[a-1].next=null;this.parent.add(d,this.getIndex()+1);return d},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes["class"]||"";this.attributes["class"]=b+(b?" ":"")+ +a}},removeClass:function(a){var b=this.attributes["class"];if(b)(b=CKEDITOR.tools.trim(b.replace(RegExp("(?:\\s+|^)"+a+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"]},hasClass:function(a){var b=this.attributes["class"];return!b?false:RegExp("(?:^|\\s)"+a+"(?=\\s|$)").test(b)},getFilterContext:function(a){var b=[];a||(a={off:false,nonEditable:false,nestedEditable:false});!a.off&&this.attributes["data-cke-processor"]=="off"&&b.push("off",true);!a.nonEditable&&this.attributes.contenteditable== +"false"?b.push("nonEditable",true):a.nonEditable&&(!a.nestedEditable&&this.attributes.contenteditable=="true")&&b.push("nestedEditable",true);if(b.length)for(var a=CKEDITOR.tools.copy(a),d=0;d<b.length;d=d+2)a[b[d]]=b[d+1];return a}},true)})(); +(function(){var a={},e=/{([^}]+)}/g,b=/([\\'])/g,c=/\n/g,f=/\r/g;CKEDITOR.template=function(d){if(a[d])this.output=a[d];else{var h=d.replace(b,"\\$1").replace(c,"\\n").replace(f,"\\r").replace(e,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=a[d]=Function("data","buffer","return buffer?buffer.push('"+h+"'):['"+h+"'].join('');")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document); +CKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on("focus",function(){if(CKEDITOR.currentInstance!=a){CKEDITOR.currentInstance=a;CKEDITOR.fire("currentInstance")}});a.on("blur",function(){if(CKEDITOR.currentInstance==a){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,a)};CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]}; +(function(){var a={};CKEDITOR.addTemplate=function(e,b){var c=a[e];if(c)return c;c={name:e,source:b};CKEDITOR.fire("template",c);return a[e]=new CKEDITOR.template(c.source)};CKEDITOR.getTemplate=function(e){return a[e]}})();(function(){var a=[];CKEDITOR.addCss=function(e){a.push(e)};CKEDITOR.getCss=function(){return a.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2; +CKEDITOR.TRISTATE_DISABLED=0; +(function(){CKEDITOR.inline=function(a,e){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var b=new CKEDITOR.editor(e,a,CKEDITOR.ELEMENT_MODE_INLINE),c=a.is("textarea")?a:null;if(c){b.setData(c.getValue(),null,true);a=CKEDITOR.dom.element.createFromHtml('<div contenteditable="'+!!b.readOnly+'" class="cke_textarea_inline">'+c.getValue()+"</div>",CKEDITOR.document); +a.insertAfter(c);c.hide();c.$.form&&b._attachToForm()}else b.setData(a.getHtml(),null,true);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode="wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){if(c){b.container.clearCustomData();b.container.remove();c.show()}b.element.clearCustomData();delete b.element});return b}; +CKEDITOR.inlineAll=function(){var a,e,b;for(b in CKEDITOR.dtd.$editable)for(var c=CKEDITOR.document.getElementsByTag(b),f=0,d=c.count();f<d;f++){a=c.getItem(f);if(a.getAttribute("contenteditable")=="true"){e={element:a,config:{}};CKEDITOR.fire("inline",e)!==false&&CKEDITOR.inline(a,e.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass="ckeditor"; +(function(){function a(a,f,d,h){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var l=new CKEDITOR.editor(f,a,h);if(h==CKEDITOR.ELEMENT_MODE_REPLACE){a.setStyle("visibility","hidden");l._.required=a.hasAttribute("required");a.removeAttribute("required")}d&&l.setData(d,null,true);l.on("loaded",function(){b(l);h==CKEDITOR.ELEMENT_MODE_REPLACE&&(l.config.autoUpdateElement&& +a.$.form)&&l._attachToForm();l.setMode(l.config.startupMode,function(){l.resetDirty();l.status="ready";l.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,l)})});l.on("destroy",e);return l}function e(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData();if(this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){b.show();this._.required&&b.setAttribute("required","required")}delete this.element}}function b(a){var b=a.name,d=a.element,e=a.elementMode, +l=a.fire("uiSpace",{space:"top",html:""}).html,i=a.fire("uiSpace",{space:"bottom",html:""}).html,g=new CKEDITOR.template('<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application"'+(a.title?' aria-labelledby="cke_{name}_arialbl"':"")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':"")+'<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'), +b=CKEDITOR.dom.element.createFromHtml(g.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:l?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+l+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:i?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+i+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(e==CKEDITOR.ELEMENT_MODE_REPLACE){d.hide();b.insertAfter(d)}else d.append(b); +a.container=b;l&&a.ui.space("top").unselectable();i&&a.ui.space("bottom").unselectable();d=a.config.width;e=a.config.height;d&&b.setStyle("width",CKEDITOR.tools.cssLength(d));e&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(e));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,f){return a(b,f,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b,f,d){return a(b,f,d,CKEDITOR.ELEMENT_MODE_APPENDTO)}; +CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var d=null,e=a[b];if(e.name||e.id){if(typeof arguments[0]=="string"){if(!RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)").test(e.className))continue}else if(typeof arguments[0]=="function"){d={};if(arguments[0](e,d)===false)continue}this.replace(e,d)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var d=this,e= +this._.modes;if(!(a==d.mode||!e||!e[a])){d.fire("beforeSetMode",a);if(d.mode){var l=d.checkDirty(),e=d._.previousModeData,i,g=0;d.fire("beforeModeUnload");d.editable(0);d._.previousMode=d.mode;d._.previousModeData=i=d.getData(1);if(d.mode=="source"&&e==i){d.fire("lockSnapshot",{forceUpdate:true});g=1}d.ui.space("contents").setHtml("");d.mode=""}else d._.previousModeData=d.getData(1);this._.modes[a](function(){d.mode=a;l!==void 0&&!l&&d.resetDirty();g?d.fire("unlockSnapshot"):a=="wysiwyg"&&d.fire("saveSnapshot"); +setTimeout(function(){d.fire("mode");b&&b.call(d)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,d,e){var l=this.container,i=this.ui.space("contents"),g=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement,e=e?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):l;e.setSize("width",a,true);g&&(g.style.width="1%");i.setStyle("height",Math.max(b-(d?0:(e.$.offsetHeight||0)-(i.$.clientHeight||0)),0)+"px");g&&(g.style.width= +"100%");this.fire("resize")};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg"; +(function(){function a(a){var b=a.editor,d=a.data.path,f=d.blockLimit,k=a.data.selection,n=k.getRanges()[0],r;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(k=e(k,d)){k.appendBogus();r=CKEDITOR.env.ie}if(h(b,d.block,f)&&n.collapsed&&!n.getCommonAncestor().isReadOnly()){d=n.clone();d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);f=new CKEDITOR.dom.walker(d);f.guard=function(a){return!c(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()};if(!f.checkForward()||d.checkStartOfBlock()&& +d.checkEndOfBlock()){b=n.fixBlock(true,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p");if(!CKEDITOR.env.needsBrFiller)(b=b.getFirst(c))&&(b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?: |\xa0)$/))&&b.remove();r=1;a.cancel()}}r&&n.select()}function e(a,b){if(a.isFake)return 0;var d=b.block||b.blockLimit,e=d&&d.getLast(c);if(d&&d.isBlockBoundary()&&(!e||!(e.type==CKEDITOR.NODE_ELEMENT&&e.isBlockBoundary()))&&!d.is("pre")&&!d.getBogus())return d}function b(a){var b=a.data.getTarget(); +if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}}function c(a){return s(a)&&y(a)}function f(a,b){return function(c){var d=CKEDITOR.dom.element.get(c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget);(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function d(a){function b(a){return function(b,e){e&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(f))&&(d=b);if(!e&&c(b)&&(!a||!m(b)))return false}}var d,e=a.getRanges()[0],a=a.root,f={table:1,ul:1,ol:1, +dl:1};if(e.startPath().contains(f)){var n=e.clone();n.collapse(1);n.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(n);a.guard=b();a.checkBackward();if(d){n=e.clone();n.collapse();n.setEndAt(d,CKEDITOR.POSITION_AFTER_END);a=new CKEDITOR.dom.walker(n);a.guard=b(true);d=false;a.checkForward();return d}}return null}function h(a,b,c){return a.config.autoParagraph!==false&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&a.editable().equals(c)&&!b||b&&b.getAttribute("contenteditable")=="true"} +function l(a){a.editor.focus();a.editor.fire("saveSnapshot")}function i(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function g(a,b,c){for(var d=a.getCommonAncestor(b),b=a=c?b:a;(a=a.getParent())&&!d.equals(a)&&a.getChildCount()==1;)b=a;b.remove()}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=false;this.setup()},proto:{focus:function(){var a; +if(CKEDITOR.env.webkit&&!this.hasFocus){a=this.editor._.previousActive||this.getDocument().getActive();if(this.contains(a)){a.focus();return}}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]()}catch(b){if(!CKEDITOR.env.ie)throw b;}if(CKEDITOR.env.safari&&!this.isInline()){a=CKEDITOR.document.getActive();a.equals(this.getWindow().getFrame())||this.getWindow().focus()}},on:function(a,b){var c=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a= +a=="focus"?"focusin":"focusout";b=f(b,this);c[0]=a;c[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this,c)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c, +b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&&(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}},changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertHtml:function(a,b){l(this);p(this,b||"html",a)},insertText:function(a){l(this);var b=this.editor,c=b.getSelection().getStartElement().hasAscendant("pre", +true)?CKEDITOR.ENTER_BR:b.activeEnterMode,b=c==CKEDITOR.ENTER_BR,d=CKEDITOR.tools,a=d.htmlEncode(a.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"    "),c=c==CKEDITOR.ENTER_P?"p":"div";if(!b){var e=/\n{2}/g;if(e.test(a))var f="<"+c+">",r="</"+c+">",a=f+a.replace(e,function(){return r+f})+r}a=a.replace(/\n/g,"<br>");b||(a=a.replace(RegExp("<br>(?=</"+c+">)"),function(a){return d.repeat(a,2)}));a=a.replace(/^ | $/g," ");a=a.replace(/(>|\s) /g,function(a,b){return b+" "}).replace(/ (?=<)/g, +" ");p(this,"text",a)},insertElement:function(a,b){b?this.insertElementIntoRange(a,b):this.insertElementIntoSelection(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode,e=a.getName(),f=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return false;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&q(b);var r,g;if(f)for(;(r=b.getCommonAncestor(0,1))&&(g=CKEDITOR.dtd[r.getName()])&&(!g||!g[e]);)if(r.getName()in +CKEDITOR.dtd.span)b.splitElement(r);else if(b.checkStartOfBlock()&&b.checkEndOfBlock()){b.setStartBefore(r);b.collapse(true);r.remove()}else b.splitBlock(d==CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a);return true},insertElementIntoSelection:function(a){l(this);var b=this.editor,d=b.activeEnterMode,b=b.getSelection(),e=b.getRanges()[0],f=a.getName(),f=CKEDITOR.dtd.$block[f];if(this.insertElementIntoRange(a,e)){e.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);if(f)if((f=a.getNext(function(a){return c(a)&& +!m(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block))f.getDtd()["#"]?e.moveToElementEditStart(f):e.moveToElementEditEnd(a);else if(!f&&d!=CKEDITOR.ENTER_BR){f=e.fixBlock(true,d==CKEDITOR.ENTER_DIV?"div":"p");e.moveToElementEditStart(f)}}b.selectRanges([e]);i(this)},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();if(this.status=="unloaded")this.status="ready";this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml(); +a||(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},fixInitialSelection:function(){function a(){var b=c.getDocument().$,d=b.getSelection(),e;if(d.anchorNode&&d.anchorNode==c.$)e=true;else if(CKEDITOR.env.webkit){var f= +c.getDocument().getActive();f&&(f.equals(c)&&!d.anchorNode)&&(e=true)}if(e){e=new CKEDITOR.dom.range(c);e.moveToElementEditStart(c);b=b.createRange();b.setStart(e.startContainer.$,e.startOffset);b.collapse(true);d.removeAllRanges();d.addRange(b)}}function b(){var a=c.getDocument().$,d=a.selection,e=c.getDocument().getActive();if(d.type=="None"&&e.equals(c)){d=new CKEDITOR.dom.range(c);a=a.body.createTextRange();d.moveToElementEditStart(c);d=d.startContainer;d.type!=CKEDITOR.NODE_ELEMENT&&(d=d.getParent()); +a.moveToElementText(d.$);a.collapse(true);a.select()}}var c=this;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){if(this.hasFocus){this.focus();b()}}else if(this.hasFocus){this.focus();a()}else this.once("focus",function(){a()},null,null,-999)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(t,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot", +function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)}, +this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur", +function(){this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus(this)},this)}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var e=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var f=a.config.contentsLangDirection; +this.getDirection(1)!=f&&this.changeAttr("dir",f);var h=CKEDITOR.getCss();if(h){f=e.getHead();if(!f.getCustomData("stylesheet")){h=e.appendStyleText(h);h=new CKEDITOR.dom.element(h.ownerNode||h.owningElement);f.setCustomData("stylesheet",h);h.data("cke-temp",1)}}f=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",f+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a=a.data,b=(new CKEDITOR.dom.elementPath(a.getTarget(), +this)).contains("a");b&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});var k={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.domEvent.getKey(),e;if(c in k){var b=a.getSelection(),f,g=b.getRanges()[0],h=g.startPath(),i,m,l,c=c==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(f=b.getSelectedElement())||(f=d(b))){a.fire("saveSnapshot");g.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START);f.remove();g.select();a.fire("saveSnapshot");e=1}else if(g.collapsed)if((i= +h.block)&&(l=i[c?"getPrevious":"getNext"](s))&&l.type==CKEDITOR.NODE_ELEMENT&&l.is("table")&&g[c?"checkStartOfBlock":"checkEndOfBlock"]()){a.fire("saveSnapshot");g[c?"checkEndOfBlock":"checkStartOfBlock"]()&&i.remove();g["moveToElementEdit"+(c?"End":"Start")](l);g.select();a.fire("saveSnapshot");e=1}else if(h.blockLimit&&h.blockLimit.is("td")&&(m=h.blockLimit.getAscendant("table"))&&g.checkBoundaryOfElement(m,c?CKEDITOR.START:CKEDITOR.END)&&(l=m[c?"getPrevious":"getNext"](s))){a.fire("saveSnapshot"); +g["moveToElementEdit"+(c?"End":"Start")](l);g.checkStartOfBlock()&&g.checkEndOfBlock()?l.remove():g.select();a.fire("saveSnapshot");e=1}else if((m=h.contains(["td","th","caption"]))&&g.checkBoundaryOfElement(m,c?CKEDITOR.START:CKEDITOR.END))e=1}return!e});a.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(b){if(b.data.getKeystroke()in k&&!this.getFirst(c)){this.appendBogus();b=a.createRange();b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);b.select()}}); +this.attachListener(this,"dblclick",function(b){if(a.readOnly)return false;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie||this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")&&!c.isReadOnly()){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button== +2){b=b.data.getTarget();if(!b.getOuterHtml().replace(t,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){b=b.data.domEvent.getKey();if(b in k){var c=b==8,d=a.getSelection().getRanges()[0], +b=d.startPath();if(d.collapsed){var e;a:{var f=b.block;if(f)if(d[c?"checkStartOfBlock":"checkEndOfBlock"]())if(!d.moveToClosestEditablePosition(f,!c)||!d.collapsed)e=false;else{if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var h=d.startContainer.getChild(d.startOffset-(c?1:0));if(h&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("hr")){a.fire("saveSnapshot");h.remove();e=true;break a}}if((d=d.startPath().block)&&(!d||!d.contains(f))){a.fire("saveSnapshot");var i;(i=(c?d:f).getBogus())&&i.remove();e=a.getSelection(); +i=e.createBookmarks();(c?f:d).moveChildren(c?d:f,false);b.lastElement.mergeSiblings();g(f,d,!c);e.selectBookmarks(i);e=true}}else e=false;else e=false}if(!e)return}else{c=d;e=b.block;i=c.endPath().block;if(!e||!i||e.equals(i))b=false;else{a.fire("saveSnapshot");(f=e.getBogus())&&f.remove();c.deleteContents();if(i.getParent()){i.moveChildren(e,false);b.lastElement.mergeSiblings();g(e,i,true)}c=a.getSelection().getRanges()[0];c.collapse(1);c.select();b=true}if(!b)return}a.getSelection().scrollIntoView(); +a.fire("saveSnapshot");return false}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref",c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}}this.editor.fire("contentDomUnload"); +delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var m=CKEDITOR.dom.walker.bogus(),t=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,s=CKEDITOR.dom.walker.whitespaces(true),y=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded", +function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty();c.fire("lockSnapshot");a(b);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated", +function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label;if(d)if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('<span id="'+e+'" class="cke_voice_label">'+d+"</span>");c.append(d);a.changeAttr("aria-describedby",e)}}})}); +CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var p=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,k,n,h=[],i=d.range.startContainer;e=d.range.startPath();for(var i=g[i.getName()],o=0,l=c.getChildren(),m=l.count(),D=-1,p=-1,M=0,s=e.contains(g.$list);o<m;++o){e=l.getItem(o);if(a(e)){k=e.getName();if(s&&k in CKEDITOR.dtd.$list)h=h.concat(b(e,d));else{n=!!i[k];if(k=="br"&&e.data("cke-eol")&& +(!o||o==m-1)){M=(f=o?h[o-1].node:l.getItem(o+1))&&(!a(f)||!f.is("br"));f=f&&a(f)&&g.$block[f.getName()]}D==-1&&!n&&(D=o);n||(p=o);h.push({isElement:1,isLineBreak:M,isBlock:e.isBlockBoundary(),hasBlockSibling:f,node:e,name:k,allowed:n});f=M=0}}else h.push({isElement:0,node:e,allowed:1})}if(D>-1)h[D].firstNotAllowed=1;if(p>-1)h[p].lastNotAllowed=1;return h}function d(b,c){var e=[],f=b.getChildren(),k=f.count(),n,h=0,i=g[c],o=!b.is(g.$inline)||b.is("br");for(o&&e.push(" ");h<k;h++){n=f.getItem(h);a(n)&& +!n.is(i)?e=e.concat(d(n,c)):e.push(n)}o&&e.push(" ");return e}function e(b){return b&&a(b)&&(b.is(g.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function f(b,c,d,e){var n=b.clone(),g,h;n.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((g=(new CKEDITOR.dom.walker(n)).next())&&a(g)&&o[g.getName()]&&(h=g.getPrevious())&&a(h)&&!h.getParent().equals(b.startContainer)&&d.contains(h)&&e.contains(g)&&g.isIdentical(h)){g.moveChildren(h);g.remove();f(b,c,d,e)}}function n(b,c){function d(b,c){if(c.isBlock&&c.isElement&& +!c.node.is("br")&&a(b)&&b.is("br")){b.remove();return 1}}var e=c.endContainer.getChild(c.endOffset),f=c.endContainer.getChild(c.endOffset-1);e&&d(e,b[b.length-1]);if(f&&d(f,b[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var g=CKEDITOR.dtd,o={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},l={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},m=CKEDITOR.tools.extend({},g.$inline);delete m.br;return function(o,z,p){var B=o.editor,w=B.getSelection().getRanges()[0], +H=false;if(z=="unfiltered_html"){z="html";H=true}if(!w.checkReadOnly()){var C=(new CKEDITOR.dom.elementPath(w.startContainer,w.root)).blockLimit||w.root,z={type:z,dontFilter:H,editable:o,editor:B,range:w,blockLimit:C,mergeCandidates:[],zombies:[]},B=z.range,H=z.mergeCandidates,A,x,F,G;if(z.type=="text"&&B.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){A=CKEDITOR.dom.element.createFromHtml("<span> </span>",B.document);B.insertNode(A);B.setStartAfter(A)}x=new CKEDITOR.dom.elementPath(B.startContainer); +z.endPath=F=new CKEDITOR.dom.elementPath(B.endContainer);if(!B.collapsed){var C=F.block||F.blockLimit,s=B.getCommonAncestor();C&&(!C.equals(s)&&!C.contains(s)&&B.checkEndOfBlock())&&z.zombies.push(C);B.deleteContents()}for(;(G=a(B.startContainer)&&B.startContainer.getChild(B.startOffset-1))&&a(G)&&G.isBlockBoundary()&&x.contains(G);)B.moveToPosition(G,CKEDITOR.POSITION_BEFORE_END);f(B,z.blockLimit,x,F);if(A){B.setEndBefore(A);B.collapse();A.remove()}A=B.startPath();if(C=A.contains(e,false,1)){B.splitElement(C); +z.inlineStylesRoot=C;z.inlineStylesPeak=A.lastElement}A=B.createBookmark();(C=A.startNode.getPrevious(c))&&a(C)&&e(C)&&H.push(C);(C=A.startNode.getNext(c))&&a(C)&&e(C)&&H.push(C);for(C=A.startNode;(C=C.getParent())&&e(C);)H.push(C);B.moveToBookmark(A);if(A=p){A=z.range;if(z.type=="text"&&z.inlineStylesRoot){G=z.inlineStylesPeak;B=G.getDocument().createText("{cke-peak}");for(H=z.inlineStylesRoot.getParent();!G.equals(H);){B=B.appendTo(G.clone());G=G.getParent()}p=B.getOuterHtml().split("{cke-peak}").join(p)}G= +z.blockLimit.getName();if(/^\s+|\s+$/.test(p)&&"span"in CKEDITOR.dtd[G])var y='<span data-cke-marker="1"> </span>',p=y+p+y;p=z.editor.dataProcessor.toHtml(p,{context:null,fixForBody:false,dontFilter:z.dontFilter,filter:z.editor.activeFilter,enterMode:z.editor.activeEnterMode});G=A.document.createElement("body");G.setHtml(p);if(y){G.getFirst().remove();G.getLast().remove()}if((y=A.startPath().block)&&!(y.getChildCount()==1&&y.getBogus()))a:{var t;if(G.getChildCount()==1&&a(t=G.getFirst())&&t.is(l)){y= +t.getElementsByTag("*");A=0;for(H=y.count();A<H;A++){B=y.getItem(A);if(!B.is(m))break a}t.moveChildren(t.getParent(1));t.remove()}}z.dataWrapper=G;A=p}if(A){t=z.range;var y=t.document,q,p=z.blockLimit;A=0;var K;G=[];var I,Q,H=B=0,N,S;x=t.startContainer;var C=z.endPath.elements[0],T;F=C.getPosition(x);s=!!C.getCommonAncestor(x)&&F!=CKEDITOR.POSITION_IDENTICAL&&!(F&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);x=b(z.dataWrapper,z);for(n(x,t);A<x.length;A++){F=x[A];if(q=F.isLineBreak){q= +t;N=p;var P=void 0,V=void 0;if(F.hasBlockSibling)q=1;else{P=q.startContainer.getAscendant(g.$block,1);if(!P||!P.is({div:1,p:1}))q=0;else{V=P.getPosition(N);if(V==CKEDITOR.POSITION_IDENTICAL||V==CKEDITOR.POSITION_CONTAINS)q=0;else{N=q.splitElement(P);q.moveToPosition(N,CKEDITOR.POSITION_AFTER_START);q=1}}}}if(q)H=A>0;else{q=t.startPath();if(!F.isBlock&&h(z.editor,q.block,q.blockLimit)&&(Q=z.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&z.editor.config.autoParagraph!==false?z.editor.activeEnterMode==CKEDITOR.ENTER_DIV? +"div":"p":false)){Q=y.createElement(Q);Q.appendBogus();t.insertNode(Q);CKEDITOR.env.needsBrFiller&&(K=Q.getBogus())&&K.remove();t.moveToPosition(Q,CKEDITOR.POSITION_BEFORE_END)}if((q=t.startPath().block)&&!q.equals(I)){if(K=q.getBogus()){K.remove();G.push(q)}I=q}F.firstNotAllowed&&(B=1);if(B&&F.isElement){q=t.startContainer;for(N=null;q&&!g[q.getName()][F.name];){if(q.equals(p)){q=null;break}N=q;q=q.getParent()}if(q){if(N){S=t.splitElement(N);z.zombies.push(S);z.zombies.push(N)}}else{N=p.getName(); +T=!A;q=A==x.length-1;N=d(F.node,N);for(var P=[],V=N.length,W=0,Y=void 0,Z=0,U=-1;W<V;W++){Y=N[W];if(Y==" "){if(!Z&&(!T||W)){P.push(new CKEDITOR.dom.text(" "));U=P.length}Z=1}else{P.push(Y);Z=0}}q&&U==P.length&&P.pop();T=P}}if(T){for(;q=T.pop();)t.insertNode(q);T=0}else t.insertNode(F.node);if(F.lastNotAllowed&&A<x.length-1){(S=s?C:S)&&t.setEndAt(S,CKEDITOR.POSITION_AFTER_START);B=0}t.collapse()}}z.dontMoveCaret=H;z.bogusNeededBlocks=G}K=z.range;var O;S=z.bogusNeededBlocks;for(T=K.createBookmark();I= +z.zombies.pop();)if(I.getParent()){Q=K.clone();Q.moveToElementEditStart(I);Q.removeEmptyBlocksAtEnd()}if(S)for(;I=S.pop();)CKEDITOR.env.needsBrFiller?I.appendBogus():I.append(K.document.createText(" "));for(;I=z.mergeCandidates.pop();)I.mergeSiblings();K.moveToBookmark(T);if(!z.dontMoveCaret){for(I=a(K.startContainer)&&K.startContainer.getChild(K.startOffset-1);I&&a(I)&&!I.is(g.$empty);){if(I.isBlockBoundary())K.moveToPosition(I,CKEDITOR.POSITION_BEFORE_END);else{if(e(I)&&I.getHtml().match(/(\s| )$/g)){O= +null;break}O=K.clone();O.moveToPosition(I,CKEDITOR.POSITION_BEFORE_END)}I=I.getLast(c)}O&&K.moveToRange(O)}w.select();i(o)}}}(),q=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return false;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c);a.append(c,d);return c}function c(a){var b=a.count(),d;for(b;b-- >0;){d=a.getItem(b); +if(!CKEDITOR.tools.trim(d.getHtml())){d.appendBogus();CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&d.getChildCount())&&d.getFirst().remove()}}}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),g=false;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();if(!f){f=d.clone();f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);f=a(f).lastForward();g=true}f||(f=e);if(f.is("table")){d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START);d.collapse(true); +f.remove()}else{f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",g));f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",g));(e=f.getBogus())&&e.remove();d.moveToPosition(f,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END)}}}()})(); +(function(){function a(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);if(!b||!b.isHidden()){a.reset();a=0}}if(!a){a=b||this.getSelection(1);if(!a||a.getType()==CKEDITOR.SELECTION_NONE)return}this.fire("selectionCheck",a);b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit)this._.previousActive=this.document.getActive();this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}function e(){p=true;if(!y){b.call(this);y=CKEDITOR.tools.setTimeout(b, +200,this)}}function b(){y=null;if(p){CKEDITOR.tools.setTimeout(a,0,this);p=false}}function c(a){return q(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?true:false}function f(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false:a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false;var d=a.startContainer,e=a.getPreviousNode(c,null,d),f=a.getNextNode(c,null,d);return b(e)||b(f,1)||!e&&!f&&!(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&& +d.getBogus())?true:false}function d(a){return a.getCustomData("cke-fillingChar")}function h(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,e=a.getDocument().getSelection().getNative(),f=e&&e.type!="None"&&e.getRangeAt(0);if(c.getLength()>1&&f&&f.intersectsNode(c.$)){d=i(e);f=e.focusNode==c.$&&e.focusOffset>0;e.anchorNode==c.$&&e.anchorOffset>0&&d[0].offset--;f&&d[1].offset--}}c.setText(l(c.getText()));d&&g(a.getDocument().$,d)}}function l(a){return a.replace(/\u200B( )?/g, +function(a){return a[1]?" ":""})}function i(a){return[{node:a.anchorNode,offset:a.anchorOffset},{node:a.focusNode,offset:a.focusOffset}]}function g(a,b){var c=a.getSelection(),d=a.createRange();d.setStart(b[0].node,b[0].offset);d.collapse(true);c.removeAllRanges();c.addRange(d);c.extend(b[1].node,b[1].offset)}function m(a){var b=CKEDITOR.dom.element.createFromHtml('<div data-cke-hidden-sel="1" data-cke-temp="1" style="'+(CKEDITOR.env.ie?"display:none":"position:fixed;top:0;left:-1000px")+'"> </div>', +a.document);a.fire("lockSnapshot");a.editable().append(b);var c=a.getSelection(1),d=a.createRange(),e=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);d.setStartAt(b,CKEDITOR.POSITION_AFTER_START);d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([d]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function t(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];if(e.length== +1&&f.collapsed)if((d=f[d<38?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getAttribute("contenteditable")=="false"){a.getSelection().fake(d);c.data.preventDefault();c.cancel()}}}}function s(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=c.startContainer,e;d;){if((e=d.type==CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly())break;e&&d.getAttribute("contentEditable")== +"false"&&c.setStartAfter(d);d=d.getParent()}d=c.startContainer;e=c.endContainer;var f=c.startOffset,g=c.endOffset,h=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(f>=d.getLength()?h.setStartAfter(d):h.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(g?h.setEndAfter(e):h.setEndBefore(e));d=new CKEDITOR.dom.walker(h);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);if(!(d.getPosition(h.endContainer)&CKEDITOR.POSITION_CONTAINS)){e.setStartAfter(d); +e.collapsed||a.splice(b+1,0,e)}return true}return false};d.next()}}return a}var y,p,q=CKEDITOR.dom.walker.invisible(1),j=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return false}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;if(!(e=d.moveToClosestEditablePosition(b.selected,a)))e=d.moveToClosestEditablePosition(b.selected,!a);e&&c.getSelection().selectRanges([d]); +c.fire("saveSnapshot");b.selected.remove();if(!e){d.moveToElementEditablePosition(c.editable());c.getSelection().selectRanges([d])}c.fire("saveSnapshot");return false}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=d.getSelection();a&&a.removeAllRanges()}var d=b.editor;d.on("contentDom",function(){function b(){C=new CKEDITOR.dom.selection(d.getSelection());C.lock()}function c(){g.removeListener("mouseup",c);n.removeListener("mouseup", +c);var a=CKEDITOR.document.$.selection,b=a.createRange();a.type!="None"&&b.parentElement().ownerDocument==f.$&&b.select()}var f=d.document,g=CKEDITOR.document,k=d.editable(),i=f.getBody(),n=f.getDocumentElement(),w=k.isInline(),j,C;CKEDITOR.env.gecko&&k.attachListener(k,"focus",function(a){a.removeListener();if(j!==0)if((a=d.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==k.$){a=d.createRange();a.moveToElementEditStart(k);a.select()}},null,null,-2);k.attachListener(k,CKEDITOR.env.webkit? +"DOMFocusIn":"focus",function(){j&&CKEDITOR.env.webkit&&(j=d._.previousActive&&d._.previousActive.equals(f.getActive()));d.unlockSelection(j);j=0},null,null,-1);k.attachListener(k,"mousedown",function(){j=0});if(CKEDITOR.env.ie||w){u?k.attachListener(k,"beforedeactivate",b,null,null,-1):k.attachListener(d,"selectionCheck",b,null,null,-1);k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){d.lockSelection(C);j=1},null,null,-1);k.attachListener(k,"mousedown",function(){j=0})}if(CKEDITOR.env.ie&& +!w){var A;k.attachListener(k,"mousedown",function(a){if(a.data.$.button==2){a=d.document.getSelection();if(!a||a.getType()==CKEDITOR.SELECTION_NONE)A=d.window.getScrollPosition()}});k.attachListener(k,"mouseup",function(a){if(a.data.$.button==2&&A){d.document.$.documentElement.scrollLeft=A.x;d.document.$.documentElement.scrollTop=A.y}A=null});if(f.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)n.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=i.$.createTextRange(); +try{c.moveToPoint(a.clientX,a.clientY)}catch(e){}d.setEndPoint(f.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){n.removeListener("mousemove",b);g.removeListener("mouseup",c);n.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<n.$.clientHeight&&a.$.x<n.$.clientWidth){var d=i.$.createTextRange();try{d.moveToPoint(a.$.clientX,a.$.clientY)}catch(e){}var f=d.duplicate();n.on("mousemove",b);g.on("mouseup",c);n.on("mouseup",c)}}); +if(CKEDITOR.env.version>7&&CKEDITOR.env.version<11)n.on("mousedown",function(a){if(a.data.getTarget().is("html")){g.on("mouseup",c);n.on("mouseup",c)}})}}k.attachListener(k,"selectionchange",a,d);k.attachListener(k,"keyup",e,d);k.attachListener(k,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(w&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var x;k.attachListener(k,"mousedown",function(){x=1});k.attachListener(f.getDocumentElement(),"mouseup", +function(){x&&e.call(d);x=0})}else k.attachListener(CKEDITOR.env.ie?k:f.getDocumentElement(),"mouseup",e,d);CKEDITOR.env.webkit&&k.attachListener(f,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:h(k)}},null,null,-1);k.attachListener(k,"keydown",t(d),null,null,-1)});d.on("setData",function(){d.unlockSelection();CKEDITOR.env.webkit&&c()});d.on("contentDomUnload",function(){d.unlockSelection()});if(CKEDITOR.env.ie9Compat)d.on("beforeDestroy", +c,null,null,9);d.on("dataReady",function(){delete d._.fakeSelection;delete d._.hiddenSelectionContainer;d.selectionChange(1)});d.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=d.editable().getLast(a);if(b&&b.hasAttribute("data-cke-hidden-sel")){b.remove();if(CKEDITOR.env.gecko)(a=d.editable().getFirst(a))&&(a.is("br")&&a.getAttribute("_moz_editor_bogus_node"))&&a.remove()}},null,null,100);d.on("key",function(a){if(d.mode=="wysiwyg"){var b=d.getSelection(); +if(b.isFake){var c=j[a.data.keyCode];if(c)return c({editor:d,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});CKEDITOR.on("instanceReady",function(a){function b(){var a=e.editable();if(a)if(a=d(a)){var c=e.document.$.getSelection();if(c.type!="None"&&(c.anchorNode==a.$||c.focusNode==a.$))j=i(c);f=a.getText();a.setText(l(f))}}function c(){var a=e.editable();if(a)if(a=d(a)){a.setText(f);if(j){g(e.document.$,j);j=null}}}var e=a.editor,f,j;if(CKEDITOR.env.webkit){e.on("selectionChange", +function(){var a=e.editable(),b=d(a);b&&(b.getCustomData("ready")?h(a):b.setCustomData("ready",1))},null,null,-1);e.on("beforeSetMode",function(){h(e.editable())},null,null,-1);e.on("beforeUndoImage",b);e.on("afterUndoImage",c);e.on("beforeGetData",b,null,null,0);e.on("getData",c)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:e).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if((this._.savedSelection||this._.fakeSelection)&&!a)return this._.savedSelection||this._.fakeSelection; +return(a=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath}; +CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var u=typeof window.getSelection!="function",v=1;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection)var b= +a,a=a.root;var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:v++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b){CKEDITOR.tools.extend(this._.cache,b._.cache);this.isFake=b.isFake;this.isLocked=b.isLocked;return this}var a=this.getNative(),d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&& +e.item(0)||e.parentElement())}if(!d||!(d.type==CKEDITOR.NODE_ELEMENT||d.type==CKEDITOR.NODE_TEXT)||!this.root.equals(d)&&!this.root.contains(d)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var E={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype= +{getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=u?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:u?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache; +if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset-c.startOffset==1&&E[d.childNodes[c.startOffset].nodeName.toLowerCase()])b=CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=u?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c); +var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,g,h=b.duplicate(),k=0,i=e.length-1,j=-1,A,x;k<=i;){j=Math.floor((k+i)/2);f=e[j];h.moveToElementText(f);A=h.compareEndPoints("StartToStart",b);if(A>0)i=j-1;else if(A<0)k=j+1;else return{container:d,offset:a(f)}}if(j==-1||j==e.length-1&&A<0){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!h){f=e[e.length-1];return f.nodeType!=CKEDITOR.NODE_TEXT? +{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length}}for(d=e.length;h>0&&d>0;){g=e[--d];if(g.nodeType==CKEDITOR.NODE_TEXT){x=g;h=h-g.nodeValue.length}}return{container:x,offset:-h}}h.collapse(A>0?true:false);h.setEndPoint(A>0?"StartToStart":"EndToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!h)return{container:d,offset:a(f)+(A>0?0:1)};for(;h>0;)try{g=f[A>0?"previousSibling":"nextSibling"];if(g.nodeType==CKEDITOR.NODE_TEXT){h=h-g.nodeValue.length;x=g}f=g}catch(l){return{container:d, +offset:a(f)}}return{container:x,offset:A>0?-h:x.nodeValue.length+h}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d== +CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var f=c.item(e),g=f.parentNode,h=0,a=new CKEDITOR.dom.range(this.root);h<g.childNodes.length&&g.childNodes[h]!=f;h++);a.setStart(new CKEDITOR.dom.node(g),h);a.setEnd(new CKEDITOR.dom.node(g),h+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset); +b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};return function(b){var c=this._.cache,d=c.ranges;if(!d)c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this));return!b?d:s(new CKEDITOR.dom.rangeList(d.slice()))}}(),getStartElement:function(){var a=this._.cache;if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b= +c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b): +null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,e=2;e&&(!(c=a.getEnclosedNode())||!(c.type==CKEDITOR.NODE_ELEMENT&&E[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache; +if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=u?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body", +1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection&&this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var c=a.checkDirty();a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!c&&a.resetDirty()}delete a._.hiddenSelectionContainer}this.rev=v++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a); +this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,c,d=0;d<a.length;++d){c=a[d];if(c.endContainer.equals(b))c.endOffset=Math.min(c.endOffset,b.getChildCount())}if(a.length)if(this.isLocked){var e=CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();e&&!e.equals(this.root)&&e.focus()}else{var g;a:{var i,j;if(a.length==1&&!(j=a[0]).collapsed&&(g=j.getEnclosedNode())&&g.type==CKEDITOR.NODE_ELEMENT){j= +j.clone();j.shrink(CKEDITOR.SHRINK_ELEMENT,true);if((i=j.getEnclosedNode())&&i.type==CKEDITOR.NODE_ELEMENT)g=i;if(g.getAttribute("contenteditable")=="false")break a}g=void 0}if(g)this.fake(g);else{if(u){j=CKEDITOR.dom.walker.whitespaces(true);i=/\ufeff|\u00a0/;b={table:1,tbody:1,tr:1};if(a.length>1){g=a[a.length-1];a[0].setEnd(g.endContainer,g.endOffset)}g=a[0];var a=g.collapsed,l,m,w;if((c=g.getEnclosedNode())&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in E&&(!c.is("a")||!c.getText()))try{w=c.$.createControlRange(); +w.addElement(c.$);w.select();return}catch(H){}if(g.startContainer.type==CKEDITOR.NODE_ELEMENT&&g.startContainer.getName()in b||g.endContainer.type==CKEDITOR.NODE_ELEMENT&&g.endContainer.getName()in b){g.shrink(CKEDITOR.NODE_ELEMENT,true);a=g.collapsed}w=g.createBookmark();b=w.startNode;if(!a)e=w.endNode;w=g.document.$.body.createTextRange();w.moveToElementText(b.$);w.moveStart("character",1);if(e){i=g.document.$.body.createTextRange();i.moveToElementText(e.$);w.setEndPoint("EndToEnd",i);w.moveEnd("character", +-1)}else{l=b.getNext(j);m=b.hasAscendant("pre");l=!(l&&l.getText&&l.getText().match(i))&&(m||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br"));m=g.document.createElement("span");m.setHtml("");m.insertBefore(b);l&&g.document.createText("").insertBefore(b)}g.setStartBefore(b);b.remove();if(a){if(l){w.moveStart("character",-1);w.select();g.document.$.selection.clear()}else w.select();g.moveToPosition(m,CKEDITOR.POSITION_BEFORE_START);m.remove()}else{g.setEndBefore(e);e.remove(); +w.select()}}else{e=this.getNative();if(!e)return;this.removeAllRanges();for(w=0;w<a.length;w++){if(w<a.length-1){l=a[w];m=a[w+1];i=l.clone();i.setStart(l.endContainer,l.endOffset);i.setEnd(m.startContainer,m.startOffset);if(!i.collapsed){i.shrink(CKEDITOR.NODE_ELEMENT,true);g=i.getCommonAncestor();i=i.getEnclosedNode();if(g.isReadOnly()||i&&i.isReadOnly()){m.setStart(l.startContainer,l.startOffset);a.splice(w--,1);continue}}}g=a[w];m=this.document.$.createRange();if(g.collapsed&&CKEDITOR.env.webkit&& +f(g)){l=this.root;h(l,false);i=l.getDocument().createText("​");l.setCustomData("cke-fillingChar",i);g.insertNode(i);if((l=i.getNext())&&!i.getPrevious()&&l.type==CKEDITOR.NODE_ELEMENT&&l.getName()=="br"){h(this.root);g.moveToPosition(l,CKEDITOR.POSITION_BEFORE_START)}else g.moveToPosition(i,CKEDITOR.POSITION_AFTER_END)}m.setStart(g.startContainer.$,g.startOffset);try{m.setEnd(g.endContainer.$,g.endOffset)}catch(C){if(C.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){g.collapse(1);m.setEnd(g.endContainer.$, +g.endOffset)}else throw C;}e.addRange(m)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a){var b=this.root.editor;this.reset();m(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT;c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=v++;b._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor(); +a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b=[],c=0;c<a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}a.isFake?this.fake(b[0].getEnclosedNode()):this.selectRanges(b);return this}, +getCommonAncestor:function(){var a=this.getRanges();return!a.length?null:a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[u?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}})();"use strict";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3; +(function(){function a(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var e=a.getAttribute("contentEditable");e=="false"?c=a:e=="true"&&(d=1)}}return c}function e(b){var d=b.document;if(b.collapsed){d=j(this,d);b.insertNode(d);b.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END)}else{var f=this.element,g=this._.definition,h,i=g.ignoreReadonly,k=i||g.includeReadonly;k==null&&(k=b.root.getCustomData("cke_includeReadonly"));var l=CKEDITOR.dtd[f]; +if(!l){h=true;l=CKEDITOR.dtd.span}b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var m=b.createBookmark(),n=m.startNode,p=m.endNode,o=n,q;if(!i){var t=b.getCommonAncestor(),i=a(n,t),t=a(p,t);i&&(o=i.getNextSourceNode(true));t&&(p=t)}for(o.getPosition(p)==CKEDITOR.POSITION_FOLLOWING&&(o=0);o;){i=false;if(o.equals(p)){o=null;i=true}else{var s=o.type==CKEDITOR.NODE_ELEMENT?o.getName():null,t=s&&o.getAttribute("contentEditable")=="false",r=s&&o.getAttribute("data-nostyle");if(s&&o.data("cke-bookmark")){o= +o.getNextSourceNode(true);continue}if(t&&k&&CKEDITOR.dtd.$block[s])for(var v=o,u=c(v),z=void 0,D=u.length,E=0,v=D&&new CKEDITOR.dom.range(v.getDocument());E<D;++E){var z=u[E],M=CKEDITOR.filter.instances[z.data("cke-filter")];if(M?M.check(this):1){v.selectNodeContents(z);e.call(this,v)}}u=s?!l[s]||r?0:t&&!k?0:(o.getPosition(p)|L)==L&&(!g.childRule||g.childRule(o)):1;if(u)if((u=o.getParent())&&((u.getDtd()||CKEDITOR.dtd.span)[f]||h)&&(!g.parentRule||g.parentRule(u))){if(!q&&(!s||!CKEDITOR.dtd.$removeEmpty[s]|| +(o.getPosition(p)|L)==L)){q=b.clone();q.setStartBefore(o)}s=o.type;if(s==CKEDITOR.NODE_TEXT||t||s==CKEDITOR.NODE_ELEMENT&&!o.getChildCount()){for(var s=o,U;(i=!s.getNext(J))&&(U=s.getParent(),l[U.getName()])&&(U.getPosition(n)|B)==B&&(!g.childRule||g.childRule(U));)s=U;q.setEndAfter(s)}}else i=true;else i=true;o=o.getNextSourceNode(r||t)}if(i&&q&&!q.collapsed){for(var i=j(this,d),t=i.hasAttributes(),r=q.getCommonAncestor(),s={},u={},z={},D={},O,R,X;i&&r;){if(r.getName()==f){for(O in g.attributes)if(!D[O]&& +(X=r.getAttribute(R)))i.getAttribute(O)==X?u[O]=1:D[O]=1;for(R in g.styles)if(!z[R]&&(X=r.getStyle(R)))i.getStyle(R)==X?s[R]=1:z[R]=1}r=r.getParent()}for(O in u)i.removeAttribute(O);for(R in s)i.removeStyle(R);t&&!i.hasAttributes()&&(i=null);if(i){q.extractContents().appendTo(i);q.insertNode(i);y.call(this,i);i.mergeSiblings();CKEDITOR.env.ie||i.$.normalize()}else{i=new CKEDITOR.dom.element("span");q.extractContents().appendTo(i);q.insertNode(i);y.call(this,i);i.remove(true)}q=null}}b.moveToBookmark(m); +b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,true)}}function b(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(j.getParent()),e=null,f=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;k.checkElementRemovable(h,true)&&(e=h)}for(g=0;g<c.elements.length;g++){h=c.elements[g];if(h==c.block||h==c.blockLimit)break;k.checkElementRemovable(h,true)&&(f=h)}f&&j.breakParent(f);e&&d.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE, +1);var c=a.createBookmark(),d=c.startNode;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),f,g=0,h;g<e.elements.length&&(h=e.elements[g]);g++){if(h==e.block||h==e.blockLimit)break;if(this.checkElementRemovable(h)){var i;if(a.collapsed&&(a.checkBoundaryOfElement(h,CKEDITOR.END)||(i=a.checkBoundaryOfElement(h,CKEDITOR.START)))){f=h;f.match=i?"start":"end"}else{h.mergeSiblings();h.is(this.element)?s.call(this,h):p(h,E(this)[h.getName()])}}}if(f){h=d;for(g=0;;g++){i=e.elements[g]; +if(i.equals(f))break;else if(i.match)continue;else i=i.clone();i.append(h);h=i}h[f.match=="start"?"insertBefore":"insertAfter"](f)}}else{var j=c.endNode,k=this;b();for(e=d;!e.equals(j);){f=e.getNextSourceNode();if(e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)){e.getName()==this.element?s.call(this,e):p(e,E(this)[e.getName()]);if(f.type==CKEDITOR.NODE_ELEMENT&&f.contains(d)){b();f=d.getNext()}}e=f}}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,true)}function c(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")== +"true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function f(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&u(a,this)}function d(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&& +a.removeStyle(e)}}function h(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e=a.document,f;d=c.getNextParagraph();)if(!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)){f=j(this,e,d);i(d,f)}a.moveToBookmark(b)}function l(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){(e= +this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&d.copyAttributes(e);i(d,e)}else s.call(this,d);a.moveToBookmark(b)}function i(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&&b.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=m(f,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+| )/g, +" ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="<pre>"+f+"</pre>";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(f);b=e}else f?b=t(c?[a.getHtml()]:g(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,i;if((i=c.getPrevious(z))&&i.type==CKEDITOR.NODE_ELEMENT&&i.is("pre")){d=m(i.getHtml(),/\n$/,"")+"\n\n"+m(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);i.remove()}}else c&& +q(b)}function g(a){var b=[];m(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function m(a,b,c){var d="",e="",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function t(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument())); +for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\r\n|\r)/g,"\n"),e=m(e,/^[ \t]*\n/,""),e=m(e,/\n$/,""),e=m(e,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?" ":b?" "+CKEDITOR.tools.repeat(" ",a.length-1):CKEDITOR.tools.repeat(" ",a.length-1)+" "}),e=e.replace(/\n/g,"<br>"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat(" ",a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);c.append(f)}else b.setHtml(e)}return c||b}function s(a,b){var c=this._.definition, +d=c.attributes,c=c.styles,e=E(this)[a.getName()],f=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),g;for(g in d)if(!((g=="class"||this._.definition.fullMatch)&&a.getAttribute(g)!=k(g,d[g]))&&!(b&&g.slice(0,5)=="data-")){f=a.hasAttribute(g);a.removeAttribute(g)}for(var h in c)if(!(this._.definition.fullMatch&&a.getStyle(h)!=k(h,c[h],true))){f=f||!!a.getStyle(h);a.removeStyle(h)}p(a,e,r[a.getName()]);f&&(this._.definition.alwaysRemoveElement?q(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode== +CKEDITOR.ENTER_BR&&!a.hasAttributes()?q(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function y(a){for(var b=E(this),c=a.getElementsByTag(this.element),d,e=c.count();--e>=0;){d=c.getItem(e);d.isReadOnly()||s.call(this,d,true)}for(var f in b)if(f!=this.element){c=a.getElementsByTag(f);for(e=c.count()-1;e>=0;e--){d=c.getItem(e);d.isReadOnly()||p(d,b[f])}}}function p(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e=b[d][0],f;if(f=a.getAttribute(e)){var g=b[d][1];(g===null|| +g.test&&g.test(f)||typeof g=="string"&&f==g)&&a.removeAttribute(e)}}c||q(a)}function q(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(z),d=a.getNext(z);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&&a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&& +d.mergeSiblings()}}}function j(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=u(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function u(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute("style",c);return a}function v(a,b){for(var c in a)a[c]=a[c].replace(D,function(a, +c){return b[c]})}function E(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],f,g;if(typeof e=="string")f=e.toLowerCase();else{f=e.element?e.element.toLowerCase():a.element;g=e.attributes}e=b[f]||(b[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return b}function k(a,b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a, +b);return d[c?"getStyle":"getAttribute"](a)}function n(a,b,c){for(var d=a.document,e=a.getRanges(),b=b?this.removeFromRange:this.applyToRange,f,g=e.createIterator();f=g.getNextRange();)b.call(this,f,c);a.selectRanges(e);d.removeCustomData("doc_processing_style")}var r={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},o= +{a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},M=/\s*(?:;\s*|$)/,D=/#\((.+?)\)/g,J=CKEDITOR.dom.walker.bookmark(0,1),z=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if(typeof a.type=="string")return new CKEDITOR.style.customHandlers[a.type](a);var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);v(a.attributes, +b);v(a.styles,b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(r[c]?CKEDITOR.STYLE_BLOCK:o[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return n.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode; +n.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return n.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;n.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?e:this.type==CKEDITOR.STYLE_BLOCK?h:this.type==CKEDITOR.STYLE_OBJECT?f:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange= +this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?l:this.type==CKEDITOR.STYLE_OBJECT?d:null;return this.removeFromRange(a)},applyToObject:function(a){u(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,true,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c=a.elements,d=0,e;d<c.length;d++){e=c[d];if(!(this.type==CKEDITOR.STYLE_INLINE&&(e==a.block||e==a.blockLimit))){if(this.type== +CKEDITOR.STYLE_OBJECT){var f=e.getName();if(!(typeof this.element=="string"?f==this.element:f in this.element))continue}if(this.checkElementRemovable(e,true,b))return true}}}return false},checkApplicable:function(a,b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return false;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return true},checkElementMatch:function(a,b){var c=this._.definition; +if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},e=0,f=c.attributes;if(f)for(var g in f){e++;d[g]=f[g]}if(g=CKEDITOR.style.getStyleText(c)){d.style||e++;d.style=g}d._length=e;c=c._AC=d}if(c._length){for(var h in c)if(h!="_length"){e=a.getAttribute(h)||"";if(h=="style")a:{d=c[h];typeof d=="string"&&(d=CKEDITOR.tools.parseCssText(d));typeof e== +"string"&&(e=CKEDITOR.tools.parseCssText(e,true));g=void 0;for(g in d)if(!(g in e&&(e[g]==d[g]||d[g]=="inherit"||e[g]=="inherit"))){d=false;break a}d=true}else d=c[h]==e;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return true;if(b=E(this)[a.getName()]){var d;if(!(b=b.attributes))return true;for(c=0;c<b.length;c++){d=b[c][0];if(d=a.getAttribute(d)){var e=b[c][1];if(e===null)return true; +if(typeof e=="string"){if(d==e)return true}else if(e.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],e=b.attributes;if(e)for(var f in e)c.push(" ",f,'="',e[f],'"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style="',e,'"');c.push(">",a||b.name,"</",d,">");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,c= +a.attributes&&a.attributes.style||"",d="";c.length&&(c=c.replace(M,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(M,";");f=="inherit"?d=d+g:c=c+g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},a,true); +return this.customHandlers[a.type]=b};var L=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,B=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();CKEDITOR.styleCommand=function(a,e){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,e,true)}; +CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(a,e,b){CKEDITOR.stylesSet.addExternal(a,e,"");CKEDITOR.stylesSet.load(a,b)}; +CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,e){var b=this._.styleStateChangeCallbacks;if(!b){b=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(a){for(var e=0;e<b.length;e++){var d=b[e],h=d.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;d.fn.call(this,h)}})}b.push({style:a,fn:e})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions); +else{var e=this,b=e.config.stylesCombo_stylesSet||e.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){e._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(c,function(b){e._.stylesDefinitions=b[c];a(e._.stylesDefinitions)})}}}}); +CKEDITOR.dom.comment=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}});"use strict"; +(function(){var a={},e={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(e[b]=1);CKEDITOR.dom.elementPath=function(b,f){var d=null,h=null,l=[],i=b,g,f=f||b.getDocument().getBody();do if(i.type==CKEDITOR.NODE_ELEMENT){l.push(i);if(!this.lastElement){this.lastElement=i;if(i.is(CKEDITOR.dtd.$object)||i.getAttribute("contenteditable")=="false")continue}if(i.equals(f))break;if(!h){g=i.getName(); +i.getAttribute("contenteditable")=="true"?h=i:!d&&e[g]&&(d=i);if(a[g]){var m;if(m=!d){if(g=g=="div"){a:{g=i.getChildren();m=0;for(var t=g.count();m<t;m++){var s=g.getItem(m);if(s.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[s.getName()]){g=true;break a}}g=false}g=!g}m=g}m?d=i:h=i}}}while(i=i.getParent());h||(h=f);this.block=d;this.blockLimit=h;this.root=f;this.elements=l}})(); +CKEDITOR.dom.elementPath.prototype={compare:function(a){var e=this.elements,a=a&&a.elements;if(!a||e.length!=a.length)return false;for(var b=0;b<e.length;b++)if(!e[b].equals(a[b]))return false;return true},contains:function(a,e,b){var c;typeof a=="string"&&(c=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?c=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?c=function(b){return CKEDITOR.tools.indexOf(a,b.getName())>-1}:typeof a=="function"?c=a:typeof a=="object"&&(c= +function(b){return b.getName()in a});var f=this.elements,d=f.length;e&&d--;if(b){f=Array.prototype.slice.call(f,0);f.reverse()}for(e=0;e<d;e++)if(c(f[e]))return f[e];return null},isContextFor:function(a){var e;if(a in CKEDITOR.dtd.$block){e=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!e.getDtd()[a]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}}; +CKEDITOR.dom.text=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createTextNode(a));this.$=a};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node; +CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var e=this.$.parentNode,b=e.childNodes.length,c=this.getLength(),f=this.getDocument(),d=new CKEDITOR.dom.text(this.$.splitText(a),f);if(e.childNodes.length==b)if(a>=c){d=f.createText("");d.insertAfter(this)}else{a=f.createText("");a.insertAfter(d);a.remove()}return d},substring:function(a, +e){return typeof e!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,e)}}); +(function(){function a(a,c,e){var d=a.serializable,h=c[e?"endContainer":"startContainer"],l=e?"endOffset":"startOffset",i=d?c.document.getById(a.startNode):a.startNode,a=d?c.document.getById(a.endNode):a.endNode;if(h.equals(i.getPrevious())){c.startOffset=c.startOffset-h.getLength()-a.getPrevious().getLength();h=a.getNext()}else if(h.equals(a.getPrevious())){c.startOffset=c.startOffset-h.getLength();h=a.getNext()}h.equals(i.getParent())&&c[l]++;h.equals(a.getParent())&&c[l]++;c[e?"endContainer":"startContainer"]= +h;return c}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,e)};var e={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),e=[],d;return{getNextRange:function(h){d=d===void 0?0:d+1;var l=a[d];if(l&&a.length>1){if(!d)for(var i=a.length-1;i>=0;i--)e.unshift(a[i].createBookmark(true));if(h)for(var g=0;a[d+g+1];){for(var m=l.document,h=0,i=m.getById(e[g].endNode),m=m.getById(e[g+ +1].startNode);;){i=i.getNextSourceNode(false);if(m.equals(i))h=1;else if(c(i)||i.type==CKEDITOR.NODE_ELEMENT&&i.isBlockBoundary())continue;break}if(!h)break;g++}for(l.moveToBookmark(e.shift());g--;){i=a[++d];i.moveToBookmark(e.shift());l.setEnd(i.endContainer,i.endOffset)}}return l}}},createBookmarks:function(b){for(var c=[],e,d=0;d<this.length;d++){c.push(e=this[d].createBookmark(b,true));for(var h=d+1;h<this.length;h++){this[h]=a(e,this[h]);this[h]=a(e,this[h],true)}}return c},createBookmarks2:function(a){for(var c= +[],e=0;e<this.length;e++)c.push(this[e].createBookmark2(a));return c},moveToBookmarks:function(a){for(var c=0;c<this.length;c++)this[c].moveToBookmark(a[c])}}})(); +(function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function e(b){var c=CKEDITOR.skin["ua_"+b],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<c.length;e++){f=c[e];if(d.ie&&(f.replace(/^ie/,"")==d.version||d.quirks&&f=="iequirks"))f="ie";if(d[f]){b=b+("_"+c[e]);break}}return CKEDITOR.getUrl(a()+b+".css")}function b(a,b){if(!d[a]){CKEDITOR.document.appendStyleSheet(e(a));d[a]=1}b&&b()} +function c(a){var b=a.getById(h);if(!b){b=a.getHead().append("style");b.setAttribute("id",h);b.setAttribute("type","text/css")}return b}function f(a,b,c){var d,e,f;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(e=0;e<b.length;e++)b[e]=b[e].split("{")}for(var h=0;h<a.length;h++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){f=b[e][1];for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);a[h].$.sheet.addRule(b[e][0],f)}else{f=b;for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&& +CKEDITOR.env.version<11?a[h].$.styleSheet.cssText=a[h].$.styleSheet.cssText+f:a[h].$.innerHTML=a[h].$.innerHTML+f}}var d={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(e(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a, +b,c,d,e){var f;if(a){a=a.toLowerCase();b&&(f=this.icons[a+"-rtl"]);f||(f=this.icons[a])}a=c||f&&f.path||"";d=d||f&&f.offset;e=e||f&&f.bgsize||"16px";return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){var c=CKEDITOR.skin.chameleon,d=[[i,a]];this.uiColor=a;f([b],c(this, +"editor"),d);f(l,c(this,"panel"),d)}).call(this,a)}});var h="cke_ui_color",l=[],i=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);l.push(a);var d=b.getUiColor();d&&f([a],CKEDITOR.skin.chameleon(b,"panel"),[[i,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})(); +(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var a=CKEDITOR.dom.element.createFromHtml('<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var e=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(e&&e==b)}catch(c){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc"; +CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(e=0;e<a.length;e++){CKEDITOR.editor.prototype.constructor.apply(a[e][0],a[e][1]);CKEDITOR.add(a[e][0])}}})();/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.skin.name="moono";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8"; +CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c, +a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), +panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; +return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g, +"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},r={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},l={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},n={isChanged:function(){return this.getValue()!= +this.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},o=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on("load",function(){this.getInputElement().on("change",function(){b.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})}, +this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},!0),s=/^on([A-Z]\w+)/,p=function(b){for(var a in b)(s.test(a)||"title"==a||"type"==a)&&delete b[a];return b};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,f){if(!(4>arguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];var e={role:a.role||"presentation"};a.includeLabel&&(e["aria-labelledby"]=c.labelId);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null, +e,function(){var e=[],g=a.required?" cke_required":"";if(a.labelLayout!="horizontal")e.push('<label class="cke_dialog_ui_labeled_label'+g+'" ',' id="'+c.labelId+'"',c.inputId?' for="'+c.inputId+'"':"",(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",a.label,"</label>",'<div class="cke_dialog_ui_labeled_content"',a.controlStyle?' style="'+a.controlStyle+'"':"",' role="presentation">',f.call(this,b,a),"</div>");else{g={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+ +g+'" id="'+c.labelId+'" for="'+c.inputId+'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(a.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+">"+f.call(this,b,a)+"</span>"}]};CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,g,e)}return e.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+ +a.type,id:f,type:a.type};a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var e=this,k=!1;b.on("load",function(){e.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(k=true)});e.getInputElement().on("keyup",function(a){if(a.data.getKeystroke()==13&&k){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);k=false}},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this, +b,a,d,function(){var b=['<div class="cke_dialog_ui_input_',a.type,'" role="presentation"'];a.width&&b.push('style="width:'+a.width+'" ');b.push("><input ");c["aria-labelledby"]=this._.labelId;this._.required&&(c["aria-required"]=this._.required);for(var e in c)b.push(e+'="'+c[e]+'" ');b.push(" /></div>");return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",e={};a.validate&&(this.validate=a.validate); +e.rows=a.rows||5;e.cols=a.cols||20;e["class"]="cke_dialog_ui_input_textarea "+(a["class"]||"");"undefined"!=typeof a.inputStyle&&(e.style=a.inputStyle);a.dir&&(e.dir=a.dir);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e["aria-labelledby"]=this._.labelId;this._.required&&(e["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="',c,'" '],b;for(b in e)a.push(b+'="'+CKEDITOR.tools.htmlEncode(e[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(f._["default"]), +"</textarea></div>");return a.join("")})}},checkbox:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),e=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};p(c);if(a["default"])g.checked= +"checked";if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,e,"input",null,g);e.push(' <label id="',d,'" for="',g.id,'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(a.label),"</label>");return e.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.valdiate);var f=[],c=this;a.role="radiogroup"; +a.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){for(var e=[],d=[],g=(a.id?a.id:CKEDITOR.tools.getNextId())+"_radio",i=0;i<a.items.length;i++){var j=a.items[i],h=j[2]!==void 0?j[2]:j[0],l=j[1]!==void 0?j[1]:j[0],m=CKEDITOR.tools.getNextId()+"_radio_input",n=m+"_label",m=CKEDITOR.tools.extend({},a,{id:m,title:null,type:null},true),h=CKEDITOR.tools.extend({},m,{title:h},true),o={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:l,"aria-labelledby":n},q=[];if(c._["default"]== +l)o.checked="checked";p(m);p(h);if(typeof m.inputStyle!="undefined")m.style=m.inputStyle;m.keyboardFocusable=true;f.push(new CKEDITOR.ui.dialog.uiElement(b,m,q,"input",null,o));q.push(" ");new CKEDITOR.ui.dialog.uiElement(b,h,q,"label",null,{id:n,"for":o.id},j[0]);e.push(q.join(""))}new CKEDITOR.ui.dialog.hbox(b,f,e,d);return d.join("")});this._.children=f}},button:function(b,a,d){if(arguments.length){"function"==typeof a&&(a=a(b.getParentEditor()));h.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this); +var f=this;b.on("load",function(){var a=this.getElement();(function(){a.on("click",function(a){f.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(f.click(),a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var e=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"a",null,{style:a.style,href:"javascript:void(0)",title:a.label,hidefocus:"true","class":a["class"],role:"button", +"aria-labelledby":e},'<span id="'+e+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(a.label)+"</span>")}},select:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a);a.validate&&(this.validate=a.validate);f.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),e=[],d=[],g={id:f.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId}; +e.push('<div class="cke_dialog_ui_input_',a.type,'" role="presentation"');a.width&&e.push('style="width:'+a.width+'" ');e.push(">");if(a.size!=void 0)g.size=a.size;if(a.multiple!=void 0)g.multiple=a.multiple;p(c);for(var i=0,j;i<a.items.length&&(j=a.items[i]);i++)d.push('<option value="',CKEDITOR.tools.htmlEncode(j[1]!==void 0?j[1]:j[0]).replace(/"/g,"""),'" /> ',CKEDITOR.tools.htmlEncode(j[0]));if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.select=new CKEDITOR.ui.dialog.uiElement(b, +c,e,"select",null,g,d.join(""));e.push("</div>");return e.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0===a["default"]&&(a["default"]="");var f=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="', +f.frameId,'" title="',a.label,'" src="javascript:void('];b.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");b.push(')"></iframe>');return b.join("")})}},fileButton:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this;a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),e=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d= +a["for"];if(!e||e.call(this,c)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(f,c,e){if(!(3>arguments.length)){var k=[],g=c.html;"<"!=g.charAt(0)&&(g="<span>"+g+"</span>");var i=c.focus;if(i){var j=this.focus;this.focus=function(){("function"== +typeof i?i:j).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,f,c,k,"span",null,null,"");k=k.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);e.push([g[1]," ",k[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,f,c){var e=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,f,"fieldset",null,null,function(){var a=[];e&&a.push("<legend"+ +(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+e+"</legend>");for(var b=0;b<d.length;b++)a.push(d[b]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b= +CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()}, +isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)}, +focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype= +CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var f=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;f.$.text=b;f.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(f.$):c.add(f.$,null):c.add(f.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0< +b.length;)b.remove(0);return this},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return o.onChange.apply(this, +arguments);b.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;"checked"==b.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",a);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,f,c=0;c<d.length&&(f=d[c]);c++)f.getElement().$.checked=f.getValue()==b;!a&&this.fire("change",{value:b})}, +getValue:function(){for(var b=this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue();return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(CKEDITOR.env.ie)b.on("load",function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&& +this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this),this.on("change",a);else return o.onChange.apply(this,arguments);return null}}},n,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,n,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit(); +return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a=/^on([A-Z]\w+)/,d,f=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):f(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();var b="";f.size&&(b=f.size-(CKEDITOR.env.ie?7:0));var h=a.frameId+"_input"; +d.$.write(['<html dir="'+g+'" lang="'+i+'"><head><title>','
+ + + +

+ CKFinder - Sample - CKEditor Integration +

+
+ CKFinder can be easily integrated with CKEditor. Try it now, by clicking + the "Image" or "Link" icons and then the "Browse Server" button.
+

+ + + +

+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/fckeditor.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/fckeditor.html new file mode 100644 index 0000000..a3714c1 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/fckeditor.html @@ -0,0 +1,70 @@ + + + + + CKFinder - Sample - FCKeditor Integration + + + + + + + +

+ CKFinder - Sample - FCKeditor Integration +

+
+ CKFinder can be easily integrated with FCKeditor. Try it now, by clicking + the "Image" or "Link" icons and then the "Browse Server" button.
+

+ +

+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/index.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/index.html new file mode 100644 index 0000000..e37bc42 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/index.html @@ -0,0 +1,56 @@ + + + + + CKFinder - Samples + + + + + +

+ CKFinder Samples Site +

+

+ Basic Samples (JavaScript) +

+ +

+ Basic Samples (PHP) +

+
    +
  • Standalone
    The basic integration sample.
  • +
  • Popup
    CKFinder running in a popup.
  • +
  • Popups
    CKFinder running in a popup, each instance having it's own configuration.
  • +
  • CKEditor integration
    CKEditor with CKFinder being used as a file browser.
  • +
  • FCKeditor integration
    FCKeditor with CKFinder being used as a file browser.
  • +
+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/ckeditor.php b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/ckeditor.php new file mode 100644 index 0000000..8b55a1e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/ckeditor.php @@ -0,0 +1,90 @@ + + + + + CKFinder - Sample - CKEditor + + + + + +

+ CKFinder - Sample - CKEditor Integration +

+
+ CKFinder can be easily integrated with CKEditor. Try it now, by clicking + the "Image" or "Link" icons and then the "Browse Server" button.
+
Error: '.$ver.' not found. ' . + 'This sample assumes that '.$ver.' (not included with CKFinder) is installed in ' . + 'the "ckeditor" sibling folder of the CKFinder installation folder. If you have it installed in ' . + 'a different place, just edit this file, changing the wrong paths in the include ' . + '(line 57) and the "basePath" values (line 70).

' ; + $warned = true; +} + +// This is a check for the CKEditor PHP integration file. If not found, the paths must be checked. +// Usually you'll not include it in your site and use correct path in line 57 and basePath in line 70 instead. +// Remove this code after correcting the include_once statement. +if ( !@file_exists( '../../../ckeditor/ckeditor.php' ) ) +{ + if ( @file_exists('../../../ckeditor/ckeditor.js') || @file_exists('../../../ckeditor/ckeditor_source.js') ) + printNotFound('CKEditor 3.1+'); + else + printNotFound('CKEditor'); +} + +include_once '../../../ckeditor/ckeditor.php' ; +require_once '../../ckfinder.php' ; + +// This is a check for the CKEditor class. If not defined, the paths in lines 57 and 70 must be checked. +if (!class_exists('CKEditor')) +{ + printNotFound('CKEditor'); +} +else +{ + $initialValue = '

Just click the Image or Link button, and then "Browse Server".

' ; + + $ckeditor = new CKEditor( ) ; + $ckeditor->basePath = '../../../ckeditor/' ; + + // Just call CKFinder::SetupCKEditor before calling editor(), replace() or replaceAll() + // in CKEditor. The second parameter (optional), is the path for the + // CKFinder installation (default = "/ckfinder/"). + CKFinder::SetupCKEditor( $ckeditor, '../../' ) ; + + $ckeditor->editor('CKEditor1', $initialValue); +} + +?> + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/fckeditor.php b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/fckeditor.php new file mode 100644 index 0000000..cf1ac37 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/fckeditor.php @@ -0,0 +1,69 @@ + + + + + CKFinder - Sample - FCKeditor Integration + + + + + +

+ CKFinder - Sample - FCKeditor Integration +

+
+ CKFinder can be easily integrated with FCKeditor. Try it now, by clicking + the "Image" or "Link" icons and then the "Browse Server" button.
+

+Error: FCKeditor not found. ' . + 'This sample assumes that FCKeditor (not included with CKFinder) is installed in ' . + 'the "fckeditor" sibling folder of the CKFinder installation folder. If you have it installed in ' . + 'a different place, just edit this file, changing the wrong paths in the include ' . + '(line 31) and the "BasePath" values (line 47).' ; +} +else +{ + $fckeditor = new FCKeditor( 'FCKeditor1' ) ; + $fckeditor->BasePath = '../../../fckeditor/' ; + $fckeditor->Value = '

Just click the Image or Link button, and then "Browse Server".

' ; + + // Just call CKFinder::SetupFCKeditor before calling Create() or CreateHtml() + // in FCKeditor. The second parameter (optional), is the path for the + // CKFinder installation (default = "/ckfinder/"). + CKFinder::SetupFCKeditor( $fckeditor, '../../' ) ; + + $fckeditor->Create() ; +} + +?> +

+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popup.php b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popup.php new file mode 100644 index 0000000..4545cc5 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popup.php @@ -0,0 +1,37 @@ + + + + + CKFinder - Sample - Popup + + + + + +

+ CKFinder - Sample - Popup
+

+
+ The example of opening CKFinder in a popup window is available in the "_samples" directory. Click here to open it. +
+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popups.php b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popups.php new file mode 100644 index 0000000..a9400d8 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popups.php @@ -0,0 +1,37 @@ + + + + + CKFinder - Sample - Popups + + + + + +

+ CKFinder - Sample - Popups
+

+
+ The example of opening multiple CKFinder instances in popup windows is available in the "_samples" directory. Click here to open it. +
+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/standalone.php b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/standalone.php new file mode 100644 index 0000000..10be823 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/standalone.php @@ -0,0 +1,84 @@ + + + + + CKFinder - Sample - Standalone + + + + + + + +

+ CKFinder - Sample - Standalone +

+
+ CKFinder may be used in standalone mode inside any page, to create a repository + manager with ease. You may define a custom JavaScript function to be called when + an image is selected (double-clicked).
+

+BasePath = '../../' ; // The path for the installation of CKFinder (default = "/ckfinder/"). +$finder->SelectFunction = 'ShowFileInfo' ; +// The default height is 400. +$finder->Height = 600; +$finder->Create() ; + +// It can also be done in a single line, calling the "static" +// Create( basePath, width, height, selectFunction ) function: +// CKFinder::CreateStatic( '../../', null, null, 'ShowFileInfo' ) ; + +?> +

+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popup.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popup.html new file mode 100644 index 0000000..1aa30e2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popup.html @@ -0,0 +1,68 @@ + + + + + CKFinder - Sample - Popup + + + + + + + +

+ CKFinder - Sample - Popup
+

+
+ CKFinder may be used in a popup. You may define a custom JavaScript function to be called when + an image is selected (double-clicked).
+

+ Selected File URL
+ + +

+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popups.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popups.html new file mode 100644 index 0000000..a943227 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popups.html @@ -0,0 +1,118 @@ + + + + + CKFinder - Sample - Popups + + + + + + + + +

+ CKFinder - Sample - Popups
+

+
+ CKFinder may be opened in a popup. You may define a custom JavaScript function to be called when + an image is selected (double-clicked).
+

+ Selected File URL
+ + +

+

+ Selected Image URL
+ + +

+ + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/public_api.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/public_api.html new file mode 100644 index 0000000..1441b63 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/public_api.html @@ -0,0 +1,128 @@ + + + + + CKFinder - Sample - Public API + + + + + + +

+ CKFinder - Sample - API examples +

+
+

+ CKFinder contains simple yet powerful API which allows you to extend it with your own features. +

+

+ In this example, please check the file and folder context menu and toolbar in the Basket folder. +

+
+

+ +

+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/sample.css b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/sample.css new file mode 100644 index 0000000..0919b76 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/sample.css @@ -0,0 +1,171 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying or distribute this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + * Styles used in the samples pages. + */ + +html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre { + line-height: 1.5em; +} + +body { + padding:10px 30px; +} + +input, textarea, select, option, optgroup, button, td, th { + font-size: 100%; +} + +pre, +code, +kbd, +samp, +tt{ + font-family: monospace,monospace; + font-size: 1em; +} + +h1.samples { + color:#92B901; + font-size:200%; + font-weight:normal; + margin: 0; + padding: 0; +} + +h2.samples { + color:#000000; + font-size:130%; + margin: 0; + padding: 0; +} + +p, blockquote, address, form, pre, dl, h1.samples, h2.samples { + margin-bottom:15px; +} + +ul.samples { + margin-bottom:15px; +} + +.clear { + clear:both; +} + +fieldset +{ + margin: 0; + padding: 10px; +} + +body, input, textarea { + color: #333333; + font-family: Arial, Helvetica, sans-serif; +} + +body { + font-size: 75%; +} + +a.samples { + color: #92B901; + text-decoration:none; +} + +a.samples:hover { + text-decoration:underline; + color: #BED567; +} + +form +{ + margin: 0; + padding: 0; +} + +pre.samples +{ + background-color: #F7F7F7; + border: 1px solid #D7D7D7; + overflow: auto; + padding: 0.25em; +} + +#alerts +{ + color: Red; +} + +#footer { + clear: both; + padding-top: 10px; +} +#footer hr +{ + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; +} + +#footer p +{ + margin: 0 10px 10px 10px; + float: left; +} + +#footer #copy +{ + float: right; +} + +#outputSample +{ + width: 100%; + table-layout: fixed; +} + +#outputSample thead th +{ + color: #dddddd; + background-color: #999999; + padding: 4px; + white-space: nowrap; +} + +#outputSample tbody th +{ + vertical-align: top; + text-align: left; +} + +#outputSample pre +{ + margin: 0; + padding: 0; + white-space: pre; /* CSS2 */ + white-space: -moz-pre-wrap; /* Mozilla*/ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS 2.1 */ + white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */ + word-wrap: break-word; /* IE */ +} + +.description { + border: 1px dotted #B7B7B7; + margin-bottom: 10px; + padding: 20px 10px 20px; +} + +label { + display: block; + margin-bottom:6px; +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone.html new file mode 100644 index 0000000..ae8f967 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone.html @@ -0,0 +1,87 @@ + + + + + CKFinder - Sample - Standalone + + + + + + +

+ CKFinder - Sample - Standalone +

+
+ CKFinder may be used in standalone mode inside any page, to create a repository + manager with ease. You may define a custom JavaScript function to be called when + an image is selected (double-clicked).
+

+ +

+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone_v1.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone_v1.html new file mode 100644 index 0000000..23ad77e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone_v1.html @@ -0,0 +1,90 @@ + + + + + CKFinder - Sample - Standalone (V1) + + + + + + + + +

+ CKFinder - Sample - Standalone (V1) +

+

+ CKFinder may be used in standalone mode inside any page, to create a repository + manager with ease. You may define a custom JavaScript function to be called when + an image is selected (double-clicked).

+
+ This sample is using the old "V1" integration method. +
+
+ +
+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/changelog.txt b/php/pic_switch_demo/static/ckeditor/ckfinder/changelog.txt new file mode 100644 index 0000000..6b74bf8 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/changelog.txt @@ -0,0 +1,210 @@ +CKFinder Changelog +================== +http://cksource.com/ckfinder +Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + +### Version 2.4.2 +- Updated syntax highlighting component used in the fileeditor plugin. Added languages support: markdown, restructured text, java, less, sass, scss, perl, python, ruby and sql. +- Changed default thumbnail delay to 100ms. +- Fixed: Loading thumbnails is terribly slow when there are many files in a folder. +- Fixed: Using "Search" while the folder was loading could result in a JavaScript error. +- Fixed: External script loading in popup does not work in Internet Explorer. +- Fixed: Editing of text files broken in Chrome 31 and higher. +- Fixed: Too early thumb render on uploading multiple files. +- Fixed: Issues with HTML5 upload in IE11 "tile mode" when in popup. +- Fixed: Issues when calling CKFinder popup twice. +- Fixed: CKFinder with thumbs disabled - icons are not shown. +- Fixed: IE9: SCRIPT1002: Syntax error. +- Updated translations: Italian, Turkish. + +### Version 2.4.1 +Updated copyrights, fixed URLs inside source code, other minor fixes. +[PHP] - Fixed: Empty filename when non-UTF-8 character is found on nginx with PHP 5.4 + +### Version 2.4 +- Added Search box in the toolbar that performs search of those files matching the searched string in the current folder. +- Fixed: Images can be overwritten on resizing. +- Fixed: File extension is now hidden when "Create new image" checkbox is unselected in Image Resize dialog. +- Fixed: When the file name was too long it overlapped the image in Lightbox preview. +- Fixed: Display issues in Internet Explorer 10 and Internet Explorer 11. +- Fixed: It was impossible to upload files in IE10/IE11 when CKFinder was running in a popup. +- Fixed: Classic upload for popup sample did not work in IE9. +- Fixed: Dialog windows could not be opened after opening CKFinder twice in a popup. +- Fixed: Various "access denied" errors appeared from time to time in IE when CKFinder was running in a popup. +- Fixed: CKFinderAPI.disableFolderContextMenuOption() did not work for "createSubFolder"/"renameFolder" items. +- Fixed: In some cases, and empty (undefined) error message was shown to the user when an error occured. +- Updated colorbox library used by the gallery plugin to the latest version, compatible with latest versions of jQuery. +[PHP] - Fixed paths resolving by resolveUrl() function. + +### Version 2.3.1.1 + +### Version 2.3.1 +Security Release: +It was possible to perform DOS attack by users authorized to use the sever connector and with permissions to upload files (ASP, PHP, ColdFusion). +It was possible to cause Denial of Service to files and folders on certain servers (like Apache) by users authorized to use the sever connector and with permissions to create folders. The attack was possible only inside a folder to which user had create folder permissions. +- Added new translation: Serbian. +- Updated translations: Catalan, Chinese, Japanese. +- Folders that start with a dot character are now disallowed by default. +- Fixed auto-renaming of files with multiple extensions: foo.tar.gz will be renamed to foo(1).tar.gz on second upload. +- Maximize did not work when CKFinder was added with appendTo() + +### Version 2.3 +- Added the new Maximize plugin. +- Multiple file selection: copying / moving / deleting / selecting multiple files is now possible. +- When no other selection function defined, double clicking a file will now execute the View command. +- File editor plugin was upgraded to use CodeMirror 2. C# support was added. +- It is now possible to select a file on startup by using the config.startupPath configuration. +- Added a new configuration option, config.sidebarWidth, to change the initial width of the sidebar (where the folders pane is located) with ease. +- The name of the file is now displayed when hovering over a file. +- Added a new API method, api.addFolderDropMenuOption, to add new options to the menu that opens once files are dropped into a folder. +- Added an option for plugins to specify if a toolbar button should be disabled when basket is empty. +- Added new translation: Catalan. +- Updated translations: Hebrew. +- Fixed: Thumbnails of custom sizes are now displayed correctly at the files list. +- Fixed: Files from the right resource type will be shown at the second opening of CKFinder via CKEditor. +- Fixed: Impossible to set height of CKFinder when using SetupCKEditor(). +- Fixed: Extension is now uneditable in the ImageResize dialog window. +- Fixed: Hitting F5 and CTRL+R inside a CKFinder popup will not close the window. +- Fixed: IE will not show an error on the console when opening Developer Tools when inside the popup. +- Fixed: The "onbeforeunload" event of the host document will now be preserved. +- Fixed: The "Resize" dialog window looks better on Webkit. +- Fixed: The thumbnail inside the "Resize" dialog window is now limited in size. +- Fixed: An hidden CKFinder instance will now have correct height when shown. +- Fixed: The rememberLastFolder configuration now works when opening CKFinder as a popup. +- Fixed: In forced IE7 compatibility mode, IE8 did not display dialogs correctly. +- Fixed: It is now possible to use a callback for the Basket's context menu and toolbar labels, as well as custom language strings. +- Fixed: Layout may appear broken after upload. +- Fixed: IE 10: Compatibility with latest beta version. +- Fixed: Thumbnails were left in the old location when files were moved. +[PHP] - Added a new Zip plugin, that can create and extract zip archives and allows to download a folder or multiple files as a zip package. +[PHP] - Dropped support for PHP 4.x. + +### Version 2.2.2 +- Fixed: The new Chrome 20 is again causing issues with finder.popup(). The new fix should work for all future versions of Chrome. + +### Version 2.2.1 +- Fixed: finder.popup() does not work in Chrome 18. + +### Version 2.2 +Security Release: fixed filtering of unsafe characters for IIS6 web server. +- HTML5 multiple file uploads introduced. +- Files can now be uploaded by using the drag&drop in Firefox and Chrome. +- Added a read-only mode (config.readOnly), which if enabled, lets the user browse the files but not upload or modify them. +- CKFinder now supports common lightbox plugins by default when viewing files, and will use Colorbox to show images if no other lightbox plugin is loaded. +- "Upload" button in the toolbar now remains active after a file has been uploaded if the Upload Pane is still open. +- Improved formatting of file sizes. +- Dialog window definition now contains a new connectorResponse property which can use raw data sent from the server inside plugins. +- Added support for full URLs in the SetupCKEditor() method. +- Configuration objects passed to the SetupCKEditor() method are now in fact being used. +- Improved support for Android and iOS tablets. +- Updated translations: Slovak; minor updates in all other localizations. +- Fixed: Permission denied to set property Window.onbeforeunload. +- Fixed: ckfinder_v1.js: SetupCKEditor() and SetupFCKeditor() methods are causing a JavaScript error. +- Fixed: IE, Opera: Double clicking a file causes CKFinder to try to close the browser tab. +- Fixed: IE, Opera: CKFinder closes the browser tab after the tab which linked to it was closed. +- Fixed: IE, Opera: CKFinder tries to close the browser tab after pressing the F5 key (Refresh). +- Fixed: When CKFinder is integrated with CKEditor, the URL that is sent back from the Upload tab after a successful file upload is not being encoded properly. +- Fixed: It is impossible to view a file with a special character in its name. +- Fixed: IE8: Selecting a file requires a double click instead of a single one. +- Fixed High Contrast mode detection. +- Fixed: Flash uploader is unable to deal with unexpected errors. +[PHP] - Fixed: Incorrect encoding of file names returned after the file upload. +[PHP] - Added: Support full URLs in resolveUrl() to resolve to correct $baseDir. + +### Version 2.1.1 +- Sorting by file extension is now available. +- Clear Basket button is now only active when applicable. +- Added support for skins in custom paths (config.skin). +- Added a new API method to destroy an instance (api.destroy()). +- Added an option to specify additional parameters for server requests (config.connectorInfo). +- Added new translations: Bulgarian, Croatian, Esperanto, Gujarati, Hindi, Romanian, Vietnamese, Welsh. +- Updated translations: Brazilian Portuguese, Chinese Simplified, Czech, Dutch, Estonian, Finnish, French, German, Greek, Hebrew, Italian, Lithuanian, Norwegian Bokmål, Norwegian Nynorsk, Persian, Polish, Russian, Slovenian, Spanish, Swedish, Turkish. +- Added Czech version of CKFinder User's Guide ("Help"). +- A callback function (config.callback) can now also be defined in the configuration file. +- Added RTL support for skins. +- Improved RTL support in the Flash upload component. +- Fixed: The Flash uploader used wrong URL to send files when CKFinder had an ID attribute assigned (as a result, the upload was never marked as completed). +- Fixed: Added protection against thumbnail caching. CKFinder was displaying an old thumbnail when a user deleted a file and then a file with the same name was uploaded. +- Fixed: [Opera] Double clicking on a folder opens the browser's context menu. +- Fixed: It was impossible to re-enable a disabled context menu command. +- Fixed: config.id is now available for reading within custom configuration. +- Fixed: [Firefox] JavaScript error when reloading the page where CKFinder is used as a popup. +- Fixed: [IE, Chrome] Focus is lost after closing a dialog window. +- Fixed: The startupPath option did not work. +- Fixed: Unable to use CKFinder inside modal dialogs due to inability to properly destroy the previous instance. +[PHP] - Fixed: When cookie contains an array, clicking the Upload button resulted in an error. +[PHP] - Fixed: The Watermark plugin (and the AfterFileUpload hook) did not work. +[PHP] - Fixed: Uploading files did not work when memory_limit was set to -1. + +### Version 2.1 +- Added support for multiple uploads using the Flash component. +- Improved rendering of thumbnails. Thumbnails are now loaded dynamically, only when the file is visible. + A configurable delay between requesting each thumbnail is available: config.thumbnailDelay. +- Added support for file upload using HTML5 FormData. +- Added an option to set the base user interface color: config.uiColor. +- File upload requires less clicks. +- Improved keyboard navigation and actions. +- Compatibility with mobile devices (Android and iOS). +- Added an option to show an arrow icon that will launch the context menu: config.showContextMenuArrow. +- Updated translations: Brazilian Portuguese, Chinese Simplified, Dutch, Finnish, Hebrew, Italian, Polish, Spanish. +- Added new translations: Estonian, Lithuanian, Persian, Turkish. +- CKFinder User's Guide ("Help") rewritten and fully updated for English and Polish. +- Improved error handling when receiving an invalid XML response from the server connector. +- Added an option to show the OS icons in Firefox: config.useNativeIcons. +- Added an option to specify the path to the custom server connector: config.connectorPath. +- Fixed: The "Download" option returns an improperly encoded filename. +- Fixed: The dialog window used during the copying/pasting operations was broken in IE7. +- Fixed: The Folders Pane was too small in Internet Explorer 9 in compatibility mode. +- Fixed: English text in dialog window titles was flipped when using an RTL language. +- Fixed: View image command opens the file in the same window in Internet Explorer. +- Fixed: Opening context menu triggers folder reload. +- Fixed: Invalid paths in popup(s) samples. +- Fixed: CKFinder was sometimes throwing an "Object doesn't support this property or method" error in Internet Explorer. +- Fixed: Thumbnails were not created if a folder or file name contains a single quote character. +- Fixed: Disable upload button for iOS. +[PHP] - Modified the default settings in the configuration file for the Images resource type. +[PHP] - Fixed: CKFinder did not work in Internet Explorer when there was a file with a name that contained some strange characters. + +### Version 2.0.2 +- Added a way to programmatically close a popup window: closePopup(). +- Added new translation: Finnish. +- Updated syntax highlighting component used in the fileeditor plugin. +- Fixed compatibility issues with IE9 RC. +- Fixed: CKFinder does not scroll correctly to the uploaded file. +- Fixed: Invalid height of the editing window in the File Editor dialog window. +- Fixed: CKFinder.dom.element.getWindows method is not available. +- Fixed: [Opera] Context menu does not work in the files pane. +- Fixed: When CKFinder is opened in a popup window, after pressing the Cancel button CKFinder asks for confirmation in a wrong window. +- Fixed: Download does not work in IE8 in a popup window. +- Fixed: It is impossible to upload a file when CKFinder is running in a popup window. +- Fixed: File editor does not work in a popup window. +[PHP] - Fixed: CKFinder loses PNG image transparency on thumbnails. +[PHP] - Fixed: thumbnails are corrupted when files calling ob_start() are included in config.php. + +### Version 2.0.1 +- Default view settings are now configurable. +- Minimum height for CKFinder has been set to 200px. +- CKFINDER.version and CKFINDER.revision variables are now available. +- Updated and added new translations: French, Hebrew, Japanese, Russian. +- Callback function can now be defined also in the configuration file. +- CKFinder will now remember client settings in a cookie. +- Files are now selected automatically after upload. +- Fixed: Permission denied error in IE 8 when using CKFinder in a popup. +- Fixed: Upload progress bar was broken in FF 3.5+. +- Fixed: CKFinder does not work in a frameset. +- Fixed: RTL support in the files pane. +- Fixed: SSL support in IE6 and Firefox 3.0. +- Fixed: application ID was not passed to the server connector. +- Fixed: CKFinder.setupCKEditor was not working when null was passed as the first argument. +- Fixed: dialogs in an iframe in IE8 quirks mode are rendered incorrectly. +- Fixed: dialogs in IE in quirks mode looked bad. +- Fixed: right click triggered drag&drop in Safari. +- Fixed: content was selected during resizing in Safari. +- Fixed: dialog borders in V1 skin in IE6. +- Fixed: "Empty folder" message disappeared after changing files view mode. +- Fixed: context menu in Firefox on a Mac does not work. +- Fixed: changing file extension caused issues with renaming file for the second time. +- Fixed issue with caching thumbnails. + +### Version 2.0 +- First public release of 2.x version of CKFinder. diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.html b/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.html new file mode 100644 index 0000000..94c003e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.html @@ -0,0 +1,143 @@ + + + + CKFinder + + + + + + +
+ + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.js b/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.js new file mode 100644 index 0000000..fcd288c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.js @@ -0,0 +1,7 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see license.txt or http://cksource.com/ckfinder/license +*/ + +(function(){var a=(function(){var h={jY:'E7F823V',_:{},status:'unloaded',basePath:(function(){var k=window.CKFINDER_BASEPATH||'';if(!k){var l=document.getElementsByTagName('script');for(var m=0;m=0?'&':'?')+'t='+this.jY;return k;}},i=window.CKFINDER_GETURL;if(i){var j=h.getUrl;h.getUrl=function(k){return i.call(h,k)||j.call(h,k);};}return h;})();function b(h){return a.instances[h];};var c={callback:1,selectThumbnailActionFunction:1,selectActionFunction:1};a.jd=function(){var j=this;var h={};for(var i in j){if(!j.hasOwnProperty(i))continue;if(typeof j[i]=='function'&& !c[i]||typeof j[i]=='undefined')continue;h[i]=j[i];}if(j.callback)h.callback=j.callback;return h;};a.lj=function(h){var k=this;h=h||k.basePath;var i='';if(!h||h.length===0)h=CKFinder.DEFAULT_basePath;if(h.substr(h.length-1,1)!='/')h+='/';h+='ckfinder.html';var j;if(k.hh){j=k.hh;if(typeof j=='function')j=j.toString().match(/function ([^(]+)/)[1];i+='?action=js&func='+j;}if(k.jx){i+=i?'&':'?';i+='data='+encodeURIComponent(k.jx);}if(k.disableThumbnailSelection){i+=i?'&':'?';i+='dts=1';}else if(k.lH||k.hh){j=k.lH||k.hh;if(typeof j=='function')j=j.toString().match(/function ([^(]+)/)[1];i+=i?'&':'?';i+='thumbFunc='+j;if(k.nm)i+='&tdata='+encodeURIComponent(k.nm);else if(!k.lH&&k.jx)i+='&tdata='+encodeURIComponent(k.jx);}if(k.startupPath){i+=i?'&':'?';i+='start='+encodeURIComponent(k.startupPath+(k.startupFolderExpanded?':1':':0'));}if(k.rememberLastFolder!==undefined&& !k.rememberLastFolder){i+=i?'&':'?';i+='rlf=0';}if(k.id){i+=i?'&':'?';i+='id='+encodeURIComponent(k.id);}if(k.skin){i+=i?'&':'?';i+='skin='+encodeURIComponent(k.skin);}return h+i;};function d(h){var k=this;k.id=h.name;var i=h.element.getDocument().getWindow().$,j=a.oC.getWindow().$;k.inPopup= ! !(i&&i.opener);k.inIframe= !k.inPopup&&i!=j.top&&i.frameElement.nodeName.toLowerCase()=='iframe';k.inFrame= !k.inPopup&&i!=j.top&&i.frameElement.nodeName.toLowerCase()=='frame';k.inUrlPopup= ! !(k.inPopup&&j.opener);};function e(h,i,j){i.on('appReady',function(k){k.removeListener();h.document=i.document.$;h.folders=i.folders;h.files=i.ld['filesview.filesview'].data().files;h.basketFiles=i.basketFiles;h.resourceTypes=i.resourceTypes;h.connector=i.connector;h.lang=i.lang;h.langCode=i.langCode;h.config=i.config;i.ld['foldertree.foldertree'].on('afterAddFolder',function(l){l.removeListener();if(j)j(h);},h);},h,null,999);};d.prototype={_:{},addFileContextMenuOption:function(h,i,j){var k=b(this.id),l='FileContextMenu_'+h.command;k.bD(l,{exec:function(m){var n=m.ld['filesview.filesview'].tools.dH();i(m.cg,n);}});h.command=l;if(!h.group)h.group='file1';k.gp(l,h);k.ld['filesview.filesview'].on('beforeContextMenu',function o(m){if(j){var n=j(this.tools.dH());if(n)m.data.bj[l]=n== -1?a.aY:a.aS;}else m.data.bj[l]=a.aS;});},disableFileContextMenuOption:function(h,i){var j=b(this.id),k=i?'FileContextMenu_'+h:h,l=function n(m){delete m.data.bj[k];};j.ld['filesview.filesview'].on('beforeContextMenu',l);return function(){j.ld['filesview.filesview'].removeListener('beforeContextMenu',l);};},addFolderContextMenuOption:function(h,i,j){var k=b(this.id),l='FolderContextMenu_'+h.command;k.bD(l,{exec:function(m){i(m.cg,m.aV);}});h.command=l;if(!h.group)h.group='folder1';k.gp(l,h);k.ld['foldertree.foldertree'].on('beforeContextMenu',function o(m){if(j){var n=j(this.app.aV);if(n)m.data.bj[l]=n== -1?a.aY:a.aS;}else m.data.bj[l]=a.aS;});},disableFolderContextMenuOption:function(h,i){var j=b(this.id),k=i?'FolderContextMenu_'+h:h,l=function n(m){delete m.data.bj[k];};j.ld['foldertree.foldertree'].on('beforeContextMenu',l);return function(){j.ld['foldertree.foldertree'].removeListener('beforeContextMenu',l);};},addFolderDropMenuOption:function(h,i,j){var k=b(this.id),l='FolderDropMenu_'+h.command;k.bD(l,{exec:function(n){i(n.cg,n.cK.oa());}});h.command=l;var m=new a.iD(k,l,h);k.ld['foldertree.foldertree'].on('beforeDropMenu',function o(n){if(j?j.call(k.cg,n.data.folder):1)n.data.iG[l]=m;});},disableFolderDropMenuOption:function(h,i){var j=b(this.id),k=i?'FolderDropMenu_'+h:h,l=function n(m){delete m.data.iG[k];};j.ld['foldertree.foldertree'].on('beforeDropMenu',l);return function(){j.ld['foldertree.foldertree'].removeListener('beforeDropMenu',l);};},getSelectedFile:function(){return b(this.id).ld['filesview.filesview'].tools.dH();},getSelectedFiles:function(){return b(this.id).ld['filesview.filesview'].tools.oO();},getSelectedFolder:function(){return b(this.id).aV;},filterFiles:function(h){b(this.id).ld['filesview.filesview'].oW('requestRenderFiles',{lookup:h});},setUiColor:function(h){return b(this.id).setUiColor(h);},destroy:function(h){b(this.id).destroy();h&&h();},openDialog:function(h,i){var l=this;var j=new a.dom.document(window.document).getHead(),k=b(l.id).document.getWindow();if(l.inFrame||l.inPopup||l.inIframe)a.document=b(l.id).document;return b(l.id).openDialog(h,i,j);},openMsgDialog:function(h,i){b(this.id).msgDialog(h,i);},openConfirmDialog:function(h,i,j){b(this.id).fe(h,i,j);},openInputDialog:function(h,i,j,k){b(this.id).hs(h,i,j,k);},openSkippedFilesDialog:function(h,i,j,k){b(this.id).skippedFilesDialog(h,i,j,k);},addTool:function(h){return b(this.id).plugins.tools.addTool(h);},addToolPanel:function(h){return b(this.id).plugins.tools.addToolPanel(h);},removeTool:function(h){b(this.id).plugins.tools.removeTool(h);},showTool:function(h){b(this.id).plugins.tools.showTool(h);},hideTool:function(h){b(this.id).plugins.tools.hideTool(h);},getResourceType:function(h){return b(this.id).getResourceType(h);},log:function(h){a.log.apply(a.log,arguments);},getLog:function(){return a.mZ();},emptyBasket:function(){b(this.id).execCommand('TruncateBasket');},replaceUploadForm:function(h,i,j,k){var l=b(this.id);if(!k)k=10;if(k>=(l.dC||20))return;l.dC=k;l.ld['formpanel.formpanel'].on('beforeUploadFileForm',function(m){if(m.data.step!=2)return;if(k>l.dC)return;m.cancel(true);var n=this.data(),o=m.data.folder;try{if(n.dc=='upload')this.oW('requestUnloadForm',function(){this.app.cS('upload').bR(a.aS);});else{if(this.data().dc)this.oW('requestUnloadForm');if(!j)this.eh.removeClass('show_border');this.oW('requestLoadForm',{html:h,command:'upload'});i&&i();}}catch(p){this.oW('failedUploadFileForm',m.data);this.oW('afterUploadFileForm',m.data);throw a.ba(p);}});return{hide:function(){l.oW('requestUnloadForm',function(){l.cS('upload').bR(a.aS);});}};},resizeFormPanel:function(h){var i=b(this.id);if(typeof h=='undefined'){i.document.getById('panel_view').setStyle('height','');i.document.getById('panel_widget').setStyle('height','');}else{var j=Math.min(h,Math.max(90,i.document.getById('main_container').$.offsetHeight-300));i.document.getById('panel_view').setStyle('height',j+'px');i.document.getById('panel_widget').setStyle('height',j-3+'px');}i.layout.ea(true);},refreshOpenedFolder:function(){var h=b(this.id),i=h.ld['filesview.filesview'].tools.currentFolder();h.oW('requestSelectFolder',{folder:i});},selectFile:function(h){var i=b(this.id);i.oW('requestSelectFile',{file:h,scrollTo:1});},closePopup:function(){if(!this.inPopup)return;b(this.id).element.getDocument().getWindow().$.close();},openFolder:function(h,i){var j=b(this.id);i=i.replace(/\/$/,'');h=h.toLowerCase();for(var k=0;k
');i=a.tools.extend(a.jd.call(this),i,true);var k=a.replace(j,i,CKFinder);this.api=k.cg;return k.cg;},appendTo:function(i,j){j=a.tools.extend(a.jd.call(this),j,true);var k=a.appendTo(i,j,CKFinder);this.api=k.cg;return k.cg;},replace:function(i,j){j=a.tools.extend(a.jd.call(this),j,true);var k=a.replace(i,j,CKFinder);this.api=k.cg;return k.cg;},popup:function(i,j){var s=this;i=i||'80%';j=j||'70%';if(typeof i=='string'&&i.length>1&&i.substr(i.length-1,1)=='%')i=parseInt(window.screen.width*parseInt(i,10)/100,10);if(typeof j=='string'&&j.length>1&&j.substr(j.length-1,1)=='%')j=parseInt(window.screen.height*parseInt(j,10)/100,10);if(i<200)i=200;if(j<200)j=200;var k=parseInt((window.screen.height-j)/2,10),l=parseInt((window.screen.width-i)/2,10),m='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,width='+i+',height='+j+',top='+k+',left='+l,n=a.env.webkit?'about:blank':'',o=window.open(n,'CKFinderpopup',m,true);if(!o)return false;s.width=s.height='100%';var p='CKFinder 2',q=new a.dom.document(o.document);q.$.open();if(a.env.isCustomDomain())q.$.domain=window.document.domain;q.$.write(p);q.$.close();try{var r=navigator.userAgent.toLowerCase();if(r.indexOf(' chrome/')== -1){o.moveTo(l,k);o.resizeTo(i,j);}o.focus();return s.appendTo(q.bH());}catch(t){return s.appendTo(q.bH());}return false;}};CKFinder._={};CKFinder._.instanceConfig=[];CKFinder.lang={};CKFinder.version='2.4.2';CKFinder.revision='2731';CKFinder.addPlugin=function(i,j,k){var l={bM:k||[]};if(typeof j=='function')j={appReady:j};for(var m in j){if(!j.hasOwnProperty(m))continue;if(m!='connectorInitialized'&&m!='uiReady')l[m]=j[m];}l.bz=function(n){if(n.config.readOnly&&l.readOnly===false)return null;if(j.connectorInitialized)n.on('connectorInitialized',function(o){var p=j.connectorInitialized;if(p)p.call(p,n.cg,o.data.xml);},null,null,1000);if(j.connectorResponse)n.on('connectorResponse',function(o){var p=j.connectorResponse;if(p)p.call(p,n.cg,o.data.xml);});if(j.galleryCallback)n.on('launchGallery',function(o){var p=j.galleryCallback;if(p)o.data.bx=p.call(p,n.cg,o.data.selected,o.data.files);});if(j.uiReady)n.on('uiReady',function(){var o=j.uiReady;o.call(o,n.cg);},null,null,1000);if(j.appReady)n.on('appReady',function(){var o=j.appReady;o.call(o,n.cg);},null,null,1000);};a.plugins.add(i,l);};CKFinder.getPluginPath=function(i){return a.plugins.getPath(i);};CKFinder.addExternalPlugin=function(i,j,k){a.plugins.tR(i,j,k);};CKFinder.setPluginLang=function(i,j,k){a.plugins.rX(i,j,k);};CKFinder.dialog={add:function(i,j){if(typeof j=='function')j=a.tools.override(j,function(k){return function(l){return k(l.cg);};});a.dialog.add(i,j);}};CKFinder.tools={};CKFinder.env={};CKFinder.dom={};CKFinder.create=function(i,j,k,l,m){var n;if(i!==null&&typeof i==='object'){n=new CKFinder();for(var o in i)n[o]=i[o];}else{n=new CKFinder();n.basePath=i;if(j)n.width=j;if(k)n.height=j;if(l)n.selectActionFunction=l;if(m)n.callback=m;}return n.create();};CKFinder.popup=function(i,j,k,l,m){var n;if(i!==null&&typeof i==='object'){n=new CKFinder();for(var o in i)n[o]=i[o];}else{n=new CKFinder();n.basePath=i;if(l)n.selectActionFunction=l;if(m)n.callback=m;}return n.popup(j,k);};CKFinder.setupFCKeditor=function(i,j,k,l){var m,n;if(j!==null&&typeof j==='object'){n=h(j);m=new CKFinder();for(var o in j){m[o]=j[o];if(o=='width'){var p=m[o]||800;if(typeof p=='string'&&p.length>1&&p.substr(p.length-1,1)=='%')p=parseInt(window.screen.width*parseInt(p,10)/100,10);i.Config.LinkBrowserWindowWidth=p;i.Config.ImageBrowserWindowWidth=p;i.Config.FlashBrowserWindowWidth=p;}else if(o=='height'){var q=m[o]||600;if(typeof q=='string'&&q.length>1&&q.substr(q.length-1,1)=='%')q=parseInt(window.screen.height*parseInt(q,10)/100,10);i.Config.LinkBrowserWindowHeight=q;i.Config.ImageBrowserWindowHeight=q;i.Config.FlashBrowserWindowHeight=q;}}}else{m=new CKFinder();m.basePath=j;}var r=m.basePath;if(r.substr(0,1)!='/'&&r.indexOf('://')== -1)r=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1)+r;r=a.lj.call(m,r);var s=r.indexOf('?')!== -1?'&':'?';if(n){r+=s+'configId='+n;s='&';}i.Config.LinkBrowserURL=r;i.Config.ImageBrowserURL=r+s+'type='+(k||'Images');i.Config.FlashBrowserURL=r+s+'type='+(l||'Flash');var t=r.substring(0,1+r.lastIndexOf('/'));i.Config.LinkUploadURL=t+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type=Files';i.Config.ImageUploadURL=t+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type='+(k||'Images');i.Config.FlashUploadURL=t+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type='+(l||'Flash');};CKFinder.setupCKEditor=function(i,j,k,l){if(i===null){for(var m in CKEDITOR.instances)CKFinder.setupCKEditor(CKEDITOR.instances[m],j,k,l);CKEDITOR.on('instanceCreated',function(v){CKFinder.setupCKEditor(v.editor,j,k,l);});return;}var n,o;if(j!==null&&typeof j==='object'){o=h(j);n=new CKFinder();for(var p in j){n[p]=j[p];if(p=='width'){var q=n[p]||800;if(typeof q=='string'&&q.length>1&&q.substr(q.length-1,1)=='%')q=parseInt(window.screen.width*parseInt(q,10)/100,10);i.config.filebrowserWindowWidth=q;}else if(p=='height'){var r=n[p]||600;if(typeof r=='string'&&r.length>1&&r.substr(r.length-1,1)=='%')r=parseInt(window.screen.height*parseInt(r,10)/100,10);i.config.filebrowserWindowHeight=r;}}}else{n=new CKFinder();n.basePath=j;}var s=n.basePath;if(s.substr(0,1)!='/'&&s.indexOf('://')== -1)s=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1)+s;s=a.lj.call(n,s);var t=s.indexOf('?')!== -1?'&':'?';if(o){s+=t+'configId='+o;t='&';}i.config.filebrowserBrowseUrl=s;i.config.filebrowserImageBrowseUrl=s+t+'type='+(k||'Images');i.config.filebrowserFlashBrowseUrl=s+t+'type='+(l||'Flash');var u=s.substring(0,1+s.lastIndexOf('/'));i.config.filebrowserUploadUrl=u+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type=Files';i.config.filebrowserImageUploadUrl=u+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type='+(k||'Images');i.config.filebrowserFlashUploadUrl=u+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type='+(l||'Flash');};})();if(!a.event){a.event=function(){};a.event.du=function(h,i){var j=a.event.prototype;for(var k in j){if(h[k]==undefined)h[k]=j[k];}};a.event.prototype=(function(){var h=function(j){var k=j.kk&&j.kk()||j._||(j._={});return k.cC||(k.cC={});},i=function(j){this.name=j;this.dF=[];};i.prototype={mi:function(j){for(var k=0,l=this.dF;k=0;t--){if(q[t].nT<=n){q.splice(t+1,0,s);return;}}q.unshift(s);}},oW:(function(){var j=false,k=function(){j=true;},l=false,m=function(n){l=n?2:true;};return function y(n,o,p,q){if(typeof o=='function'){q=o;o=null;}else if(typeof p=='function'){q=p;p=null;}if(n!='mousemove')a.log('[EVENT] '+n,o,q);var r=h(this)[n],s=j,t=l;j=l=false;if(r){var u=r.dF;if(u.length){u=u.slice(0);for(var v=0;v=0)l.dF.splice(m,1);}},mF:function(){var j=h(this);for(var k=0;k0;}};})();}if(!a.application){a.kZ=0;a.fc=1;a.qE=2;a.application=function(h,i,j,k){var l=this;l._={instanceConfig:h,element:i};l.ff=j||a.kZ;a.event.call(l);l.iI(k);};a.application.replace=function(h,i,j){var k=h;if(typeof k!='object'){k=document.getElementById(h);if(!k){var l=0,m=document.getElementsByName(h);while((k=m[l++])&&k.tagName.toLowerCase()!='textarea'){}}if(!k)throw '[CKFINDER.application.replace] The element with id or name "'+h+'" was not found.';}return new a.application(i,k,a.fc,j);};a.application.appendTo=function(h,i,j){if(typeof h!='object'){h=document.getElementById(h);if(!h)throw '[CKFINDER.application.appendTo] The element with id "'+h+'" was not found.';}return new a.application(i,h,a.qE,j);};a.application.prototype={iI:function(){var h=a.application.eb||(a.application.eb=[]);h.push(this);},oW:function(h,i,j){return a.event.prototype.oW.call(this,h,i,this,j);},cr:function(h,i,j){return a.event.prototype.cr.call(this,h,i,this,j);}};a.event.du(a.application.prototype,true);}if(!a.env){var f=/rv:([\d\.]+)/,g=/trident\/([\d]+)/;a.env=(function(){var h=navigator.userAgent.toLowerCase(),i=window.opera,j={ie: +/*@cc_on!@*/false,iemodern:false,opera: ! !i&&i.version,webkit:h.indexOf(' applewebkit/')> -1,air:h.indexOf(' adobeair/')> -1,mac:h.indexOf('macintosh')> -1,quirks:document.compatMode=='BackCompat',isCustomDomain:function(){return this.ie&&document.domain!=window.location.hostname;}};j.gecko=navigator.product=='Gecko'&& !j.webkit&& !j.opera;j.chrome=false;j.safari=false;if(j.webkit)if(h.indexOf(' chrome/')> -1)j.chrome=true;else j.safari=true;var k=0;if(j.ie){k=parseFloat(h.match(/msie (\d+)/)[1]);j.ie8= ! !document.documentMode;j.ie8Compat=document.documentMode==8;j.ie7Compat=k==7&& !document.documentMode||document.documentMode==7;j.ie6Compat=k<7||j.quirks;}if(j.gecko){var l=h.match(f);if(l){l=l[1].split('.');k=l[0]*10000+(l[1]||0)*100+ +(l[2]||0);}if(g.test(h)){j.gecko=false;j.iemodern=true;}else j.isMobile=h.indexOf('fennec')> -1;}if(j.opera){k=parseFloat(i.version());j.isMobile=h.indexOf('opera mobi')> -1;}if(j.air)k=parseFloat(h.match(/ adobeair\/(\d+)/)[1]);if(j.webkit){k=parseFloat(h.match(/ applewebkit\/(\d+)/)[1]);j.isMobile=h.indexOf('mobile')> -1;}j.version=k;j.isCompatible=j.ie&&k>=6||j.iemodern&&k>=11||j.gecko&&k>=10801||j.opera&&k>=9.5||j.air&&k>=1||j.webkit&&k>=522||false;j.cssClass='browser_'+(j.ie?'ie':j.iemodern?'iemodern':j.gecko?'gecko':j.opera?'opera':j.air?'air':j.webkit?'webkit':'unknown');if(j.quirks)j.cssClass+=' browser_quirks';if(j.ie){j.cssClass+=' browser_ie'+(j.version<7?'6':j.version>=8?'8':'7');if(j.quirks)j.cssClass+=' browser_iequirks';if(j.ie7Compat)j.cssClass+=' browser_ie7Compat';}if(j.gecko&&k<10900)j.cssClass+=' browser_gecko18';return j;})();CKFinder.env=a.env;}var h=a.env;var i=h.ie;if(a.status=='unloaded')(function(){a.event.du(a);a.dO=function(){if(a.status!='basic_ready'){a.dO.qr=true;return;}delete a.dO;var k=document.createElement('script');k.type='text/javascript';k.src=a.basePath+'ckfinder.js';document.getElementsByTagName('head')[0].appendChild(k);};a.mS=0;a.uQ='ckfinder';a.uM=true;var j=function(k,l,m,n){if(h.isCompatible){if(a.dO)a.dO();var o=m(k,l,n);a.add(o);return o;}return null;};a.replace=function(k,l,m){return j(k,l,a.application.replace,m);};a.appendTo=function(k,l,m){return j(k,l,a.application.appendTo,m);};a.add=function(k){var l=this._.io||(this._.io=[]);l.push(k);};a.uL=function(){var k=document.getElementsByTagName('textarea');for(var l=0;l=200&&p.status<300||p.status==304||p.status===0||p.status==1223);},m=function(p){if(l(p))return p.responseText;return null;},n=function(p){if(l(p)){var q=p.responseXML,r=new a.xml(q&&q.firstChild&&q.documentElement&&q.documentElement.nodeName!='parsererror'?q:p.responseText.replace(/^[^<]+/,'').replace(/[^>]+$/,''));if(r&&r.mq&&r.mq.documentElement&&r.mq.documentElement.nodeName!='parsererror'&&r.mq.documentElement.nodeName!='html'&&r.mq.documentElement.nodeName!='br')return r;}var s=a.nG||a.jt,t=p.responseText,u=s.lang.ErrorMsg[!t?'XmlEmpty':'XmlError']+'
';if(r&&r.mq)if(r.mq.parseError&&r.mq.parseError.reason)u+=r.mq.parseError.reason;else if(r.mq.documentElement&&r.mq.documentElement.nodeName=='parsererror')u+=r.mq.documentElement.textContent;if(!t)s.msgDialog(s.lang.SysErrorDlgTitle,u);else{if(/text\/plain/.test(p.getResponseHeader('Content-Type'))||/');t='
'+t+'
';}s.msgDialog(s.lang.SysErrorDlgTitle,u+'
'+s.lang.ErrorMsg.XmlRawResponse.replace('%s','

'+t));}return{};},o=function(p,q,r,s){var t= ! !q;a.log('[AJAX] '+(s?'POST':'GET')+' '+p);var u=k();if(!u)return null;if(!s)u.open('GET',p,t);else u.open('POST',p,t);if(t)u.onreadystatechange=function(){if(u.readyState==4){q(r(u));u=null;}};if(s){u.setRequestHeader('Content-type','application/x-www-form-urlencoded; charset=utf-8');u.send(s);}else u.send(null);return t?'':r(u);};return{load:function(p,q,r){return o(p,q,m,r);},loadXml:function(p,q,r){return o(p,q,n,r);}};})();CKFinder.ajax=a.ajax;(function(){var k=[];a.tools={arrayCompare:function(l,m){if(!l&& !m)return true;if(!l|| !m||l.length!=m.length)return false;for(var n=0;n'?function(q){return m(q).replace(/
/gi,'\n');}:m,o=m('>')=='>'?function(q){return n(q).replace(/>/g,'>');}:n,p=m(' ')=='  '?function(q){return o(q).replace(/ /g,' ');}:o;this.htmlEncode=p;return this.htmlEncode(l);},getNextNumber:(function(){var l=0;return function(){return++l;};})(),override:function(l,m){return m(l);},setTimeout:function(l,m,n,o,p){if(!p)p=window;if(!n)n=p;return p.setTimeout(function(){if(o)l.apply(n,[].concat(o));else l.apply(n);},m||0);},trim:(function(){var l=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(m){return m?m.replace(l,''):null;};})(),ltrim:(function(){var l=/^[ \t\n\r]+/g;return function(m){return m?m.replace(l,''):null;};})(),rtrim:(function(){var l=/[ \t\n\r]+$/g;return function(m){return m?m.replace(l,''):null;};})(),indexOf:Array.prototype.indexOf?function(l,m){return l.indexOf(m);}:function(l,m){for(var n=0,o=l.length;n1?o[1]:null;},htmlEncode:function(l){if(!l)return '';l=typeof l!='string'?l.toString():l;l=l.replace(/&/g,'&');l=l.replace(//g,'>');return l;},setCookie:function(l,m,n){document.cookie=l+'='+m+(!n?'; expires=Thu, 6 Oct 2016 01:00:00 UTC; path=/':'');},getCookie:function(l){var m=document.cookie.match(new RegExp('(^|\\s|;)'+l+'=([^;]*)'));return m&&m.length>0?m[2]:'';},mH:function(l){if(i){l.$.onfocusin=function(){l.addClass('focus_inside');};l.$.onfocusout=function(){l.removeClass('focus_inside');};}else{l.$.addEventListener('focus',function(){l.addClass('focus_inside');},true);l.$.addEventListener('blur',function(){l.removeClass('focus_inside');},true);}},formatSize:function(l,m,n){if(l==0)return '0';if(l<1)return m.Kb.replace('%1',1);if(l<1024){if(!n)l=l.toFixed(2);return m.Kb.replace('%1',l);}if(l<1048576)return m.Mb.replace('%1',(l/1024).toFixed(2));return m.Gb.replace('%1',(l/1048576).toFixed(2));},formatSpeed:function(l,m){return m.SizePerSecond.replace('%1',this.formatSize(l,m));}};CKFinder._.callFunction=a.tools.callFunction;CKFinder.tools=a.tools;})();var k=a.tools;j.event=function(l){this.$=l;};j.event.prototype={oV:function(){return this.$.keyCode||this.$.which||0;},db:function(){var m=this;var l=m.oV();if(m.$.ctrlKey||m.$.metaKey)l+=a.bP;if(m.$.shiftKey)l+=a.dy;if(m.$.altKey)l+=a.eJ;return l;},preventDefault:function(l){var m=this.$;if(m.preventDefault)m.preventDefault();else m.returnValue=false;if(l)this.stopPropagation();},stopPropagation:function(){var l=this.$;if(l.stopPropagation)l.stopPropagation();else l.cancelBubble=true;},bK:function(){var l=this.$.target||this.$.srcElement;return l?new j.bi(l):null;},getButton:function(){if(this.$.which)return this.$.which;switch(this.$.button){case 1:return 1;case 4:return 2;case 2:return 3;}},ov:function(){return 1==this.getButton();}};a.bP=1000;a.dy=2000;a.eJ=4000;j.dE=function(l){if(l)this.$=l;};j.dE.prototype=(function(){var l=function(m,n){return function(o){if(typeof a!='undefined')m.oW(n,new j.event(o));};};return{kk:function(){var m;if(!(m=this.dw('_')))this.fL('_',m={});return m;},on:function(m){var p=this;var n=p.dw('_cke_nativeListeners');if(!n){n={};p.fL('_cke_nativeListeners',n);}if(!n[m]){var o=n[m]=l(p,m);if(p.$.addEventListener)p.$.addEventListener(m,o,! !a.event.jP);else if(p.$.attachEvent)p.$.attachEvent('on'+m,o);}return a.event.prototype.on.apply(p,arguments);},removeListener:function(m){var p=this;a.event.prototype.removeListener.apply(p,arguments);if(!p.rC(m)){var n=p.dw('_cke_nativeListeners'),o=n&&n[m];if(o){if(p.$.removeEventListener)p.$.removeEventListener(m,o,false);else if(p.$.detachEvent)p.$.detachEvent('on'+m,o);delete n[m];}}}};})();(function(l){var m={};l.equals=function(n){return n&&n.$===this.$;};l.fL=function(n,o){var p=this.iY(),q=m[p]||(m[p]={});q[n]=o;return this;};l.dw=function(n){var o=this.$._ckf_expando,p=o&&m[o];return p&&p[n];};l.jF=function(n){var o=this.$._ckf_expando,p=o&&m[o],q=p&&p[n];if(typeof q!='undefined')delete p[n];return q||null;};l.iY=function(){return this.$._ckf_expando||(this.$._ckf_expando=k.getNextNumber());};a.event.du(l);})(j.dE.prototype);j.window=function(l){j.dE.call(this,l);};j.window.prototype=new j.dE();k.extend(j.window.prototype,{focus:function(){if(h.webkit&&this.$.parent)this.$.parent.focus();this.$.focus();},eR:function(){var l=this.$.document,m=l.compatMode=='CSS1Compat';return{width:(m?l.documentElement.clientWidth:l.body.clientWidth)||0,height:(m?l.documentElement.clientHeight:l.body.clientHeight)||0};},hV:function(){var l=this.$;if('pageXOffset'in l)return{x:l.pageXOffset||0,y:l.pageYOffset||0};else{var m=l.document;return{x:m.documentElement.scrollLeft||m.body.scrollLeft||0,y:m.documentElement.scrollTop||m.body.scrollTop||0};}}});j.document=function(l){j.dE.call(this,l);};var l=j.document;l.prototype=new j.dE();k.extend(l.prototype,{appendStyleSheet:function(m){var o=this;if(o.$.createStyleSheet)o.$.createStyleSheet(m);else{var n=new j.element('link',o);n.setAttributes({rel:'stylesheet',type:'text/css',href:m});o.getHead().append(n);}},createElement:function(m,n){var o=new j.element(m,this);if(n){if(n.attributes)o.setAttributes(n.attributes);if(n.gS)o.setStyles(n.gS);}return o;},jT:function(m){return new j.text(m,this);},focus:function(){this.getWindow().focus();},getById:function(m){var n=this.$.getElementById(m);return n?new j.element(n):null;},vu:function(m,n){var o=this.$.documentElement;for(var p=0;o&&p]*>/,'');var n=o.$.ownerDocument.createElement('div');n.appendChild(o.$.cloneNode(true));return n.innerHTML;},setHtml:function(n){a.log('[DOM] DOM flush into '+this.getName());return this.$.innerHTML=n;},setText:function(n){m.prototype.setText=this.$.innerText!=undefined?function(o){a.log('[DOM] Text flush');return this.$.innerText=o;}:function(o){a.log('[DOM] Text flush');return this.$.textContent=o;};return this.setText(n);},getAttribute:(function(){var n=function(o){return this.$.getAttribute(o,2);};if(i&&(h.ie7Compat||h.ie6Compat))return function(o){var q=this;switch(o){case 'class':o='className';break;case 'tabindex':var p=n.call(q,o);if(p!==0&&q.$.tabIndex===0)p=null;return p;break;case 'checked':return q.$.checked;break;case 'style':return q.$.style.cssText;}return n.call(q,o);};else return n;})(),getChildren:function(){return new j.iT(this.$.childNodes);},getComputedStyle:i?function(n){return this.$.currentStyle[k.cssStyleToDomStyle(n)];}:function(n){return this.getWindow().$.getComputedStyle(this.$,'').getPropertyValue(n);},pf:function(){var n=a.ga[this.getName()];this.pf=function(){return n;};return n;},eG:l.prototype.eG,vp:i?function(){var n=this.$.tabIndex;if(n===0&& !a.ga.ug[this.getName()]&&parseInt(this.getAttribute('tabindex'),10)!==0)n= -1;return n;}:h.webkit?function(){var n=this.$.tabIndex;if(n==undefined){n=parseInt(this.getAttribute('tabindex'),10);if(isNaN(n))n= -1;}return n;}:function(){return this.$.tabIndex;},getText:function(){return this.$.textContent||this.$.innerText||'';},getWindow:function(){return this.getDocument().getWindow();},dS:function(){return this.$.id||null;},data:function(n,o){n='data-'+n;if(o===undefined)return this.getAttribute(n);else if(o===false)this.removeAttribute(n);else this.setAttribute(n,o);return null;},vm:function(){return this.$.name||null;},getName:function(){var n=this.$.nodeName.toLowerCase();if(i&& !(document.documentMode>8)){var o=this.$.scopeName;if(o!='HTML')n=o.toLowerCase()+':'+n;}return(this.getName=function(){return n;})();},getValue:function(){return this.$.value;},getFirst:function(){var n=this.$.firstChild;return n?new j.bi(n):null;},dB:function(n){var o=this.$.lastChild,p=o&&new j.bi(o);if(p&&n&& !n(p))p=p.cf(n);return p;},rd:function(n){return this.$.style[k.cssStyleToDomStyle(n)];},is:function(){var n=this.getName();for(var o=0;o1||n.length==1&&n[0].nodeName!='_ckf_expando';},hasAttribute:function(n){var o=this.$.attributes.getNamedItem(n);return! !(o&&o.specified);},hide:function(){this.setStyle('display','none');},jg:function(n,o){var p=this.$;n=n.$;if(p==n)return;var q;if(o)while(q=p.lastChild)n.insertBefore(p.removeChild(q),n.firstChild);else while(q=p.firstChild)n.appendChild(p.removeChild(q));},show:function(){this.setStyles({display:'',visibility:''});},setAttribute:(function(){var n=function(o,p){this.$.setAttribute(o,p);return this;};if(i&&(h.ie7Compat||h.ie6Compat))return function(o,p){var q=this;if(o=='class')q.$.className=p;else if(o=='style')q.$.style.cssText=p;else if(o=='tabindex')q.$.tabIndex=p;else if(o=='checked')q.$.checked=p;else n.apply(q,arguments);return q;};else return n;})(),setAttributes:function(n){for(var o in n)this.setAttribute(o,n[o]);return this;},setValue:function(n){this.$.value=n;return this;},removeAttribute:(function(){var n=function(o){this.$.removeAttribute(o);};if(i&&(h.ie7Compat||h.ie6Compat))return function(o){if(o=='class')o='className';else if(o=='tabindex')o='tabIndex';n.call(this,o);};else return n;})(),uW:function(n){for(var o=0;o=100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+n+')');}else this.setStyle('opacity',n);},unselectable:h.gecko?function(){this.$.style.MozUserSelect='none';}:h.webkit?function(){this.$.style.uE='none';}:function(){if(i||h.opera){var n=this.$,o,p=0;n.unselectable='on';while(o=n.all[p++])switch(o.tagName.toLowerCase()){case 'iframe':case 'textarea':case 'input':case 'select':break;default:o.unselectable='on';}}},vr:function(){var n=this;while(n.getName()!='html'){if(n.getComputedStyle('position')!='static')return n;n=n.getParent();}return null;},ir:function(n){var I=this;var o=0,p=0,q=I.getDocument().bH(),r=I.getDocument().$.compatMode=='BackCompat',s=I.getDocument();if(document.documentElement.getBoundingClientRect){var t=I.$.getBoundingClientRect(),u=s.$,v=u.documentElement,w=v.clientTop||q.$.clientTop||0,x=v.clientLeft||q.$.clientLeft||0,y=true;if(i){var z=s.gT().contains(I),A=s.bH().contains(I);y=r&&A|| !r&&z;}if(y){o=t.left+(!r&&v.scrollLeft||q.$.scrollLeft);o-=x;p=t.top+(!r&&v.scrollTop||q.$.scrollTop);p-=w;}}else{var B=I,C=null,D;while(B&& !(B.getName()=='body'||B.getName()=='html')){o+=B.$.offsetLeft-B.$.scrollLeft;p+=B.$.offsetTop-B.$.scrollTop;if(!B.equals(I)){o+=B.$.clientLeft||0;p+=B.$.clientTop||0;}var E=C;while(E&& !E.equals(B)){o-=E.$.scrollLeft;p-=E.$.scrollTop;E=E.getParent();}C=B;B=(D=B.$.offsetParent)?new m(D):null;}}if(n){var F=I.getWindow(),G=n.getWindow();if(!F.equals(G)&&F.$.frameElement){var H=new m(F.$.frameElement).ir(n);o+=H.x;p+=H.y;}}if(!document.documentElement.getBoundingClientRect)if(h.gecko&& !r){o+=I.$.clientLeft?1:0;p+=I.$.clientTop?1:0;}return{x:o,y:p};},scrollIntoView:function(n){var t=this;var o=t.getWindow(),p=o.eR().height,q=p* -1;if(n)q+=p;else{q+=t.$.offsetHeight||0;q+=parseInt(t.getComputedStyle('marginBottom')||0,10)||0;}var r=t.ir();q+=r.y;q=q<0?0:q;var s=o.hV().y;if(q>s||qwindow.setTimeout(function(){window.close();},50);")');}return n&&new l(n.contentWindow.document);},qw:function(n,o){var u=this;var p=u.$.attributes;o=o||{};for(var q=0;q0&&o)o=o.childNodes[n.shift()];return o?new j.bi(o):null;},iu:function(){return this.$.childNodes.length;},hX:function(){this.on('contextmenu',function(n){if(!n.data.bK().hasClass('cke_enable_context_menu'))n.data.preventDefault();});},'toString':function(){return this.getName()+'#'+this.dS()+'.'+this.getAttribute('class');}});(function(){var n={width:['border-left-width','border-right-width','padding-left','padding-right'],height:['border-top-width','border-bottom-width','padding-top','padding-bottom']};function o(p){var q=0;for(var r=0,s=n[p].length;r1)return;var I=new m('script',v);I.setAttributes({type:'text/javascript',src:G});if(r)if(i)I.$.onreadystatechange=function(){if(I.$.readyState=='loaded'||I.$.readyState=='complete'){I.$.onreadystatechange=null;a.log('[LOADED] '+G);C(G,true);}};else{I.$.onload=function(){setTimeout(function(){a.log('[LOADED] '+G);C(G,true);},0);};I.$.onerror=function(){C(G,false);};}I.appendTo(u?u:a.document.getHead());};for(var E=0,F=x;E0){y(z);a.rw.load(z,function(){q[u]=1;s(t,u,v,w);});return;}q[u]=1;}v=x[v];var A=0;if(v){if(!v.iB)v.iB=[];else if(v.iB[t.name])A=1;}else A=1;if(A)w&&w();else{if(v.eb===undefined)v.eb=[];if(v.eb[t.name]===undefined)v.eb[t.name]=[];var B=v.eb[t.name];B.push(w);if(B.length>1)return;var C= !v.css|| !v.css.length,D= !v.js|| !v.js.length,E=function(){if(C&&D){v.iB[t.name]=1;for(var G=0;G\n";G.removeListener();});C=1;}if(!D){y(v.js);t.scriptLoader.load(v.js,function(){D=1;E();});}E();}};return{add:function(t,u){p[t]=u;u.fh=r[t]||(r[t]=a.getUrl('skins/'+t+'/'));},loaded:p,load:function(t,u,v){var w=t.gd,x=t.fh;if(p[w]){s(t,w,u,v);var y=p[w];}else{r[w]=x;a.scriptLoader.load(x+'skin.js',function(){s(t,w,u,v);});}}};})();a.gc=new a.fQ('gc/','theme');a.bY=function(p){if(p.bY)return p.bY;this._={jZ:{},items:{},application:p};return this;};var p=a.bY;p.prototype={add:function(q,r,s){this._.items[q]={type:r,command:s.command||null,mp:Array.prototype.slice.call(arguments,2)};},create:function(q){var v=this;var r=v._.items[q],s=r&&v._.jZ[r.type],t=r&&r.command&&v._.application.cS(r.command),u=s&&s.create.apply(v,r.mp);if(t)t.pW.push(u);return u;},kd:function(q,r){this._.jZ[q]=r;}};(function(){var q=0,r=function(){var D='ckfinder'+ ++q;return a.instances&&a.instances[D]?r():D;},s={},t=function(D){var E=D.config.customConfig;if(!E)return false;var F=s[E]||(s[E]={});if(F.fn)setTimeout(function(){F.fn.call(D,D.config);if(D.config.customConfig==E|| !t(D))D.cr('customConfigLoaded');},0);else a.scriptLoader.load(E,function(){if(CKFinder.customConfig)F.fn=CKFinder.customConfig;else F.fn=function(){};t(D);});return true;},u=function(D,E){D.on('customConfigLoaded',function(){if(E){if(E.on)for(var F in E.on)D.on(F,E.on[F]);k.extend(D.config,E,true);delete D.config.on;}v(D);});if(E&&E.id)D.config.id=E.id;if(E&&E.customConfig!=undefined)D.config.customConfig=E.customConfig;if(!t(D))D.cr('customConfigLoaded');},v=function(D){var E=D.config.skin.split(','),F=E[0],G=a.getUrl(E[1]||'skins/'+F+'/');D.gd=F;D.fh=G;D.iy='cke_skin_'+F+' skin_'+F;D.qn=D.ox();D.on('uiReady',function(){D.document.getWindow().on('lW',function(){k.setCookie('CKFinder_UTime',Math.round(new Date().getTime()/1000),true);k.setCookie('CKFinder_UId',encodeURIComponent(D.id?D.id:location.href),true);});});D.cr('configLoaded');z(D);},w=function(D,E){a.event.jP=true;D.document.on('keydown',function(F){var G=F.data,H=G.oV(),I=G.db();if(H==116||I==a.bP+82||I==a.bP+a.dy+82){D.execCommand('refresh');E.$.event&&E.$.event.keyCode&&(E.$.event.keyCode=5055);try{F.data.preventDefault();}catch(F){}}});a.event.jP=false;},x=function(D,E,F){var G=[],H,I;for(I=0;I=0?D.langCode:P[0];if(!O.lang[R])M.push(a.getUrl(Q+'lang/'+R+'.js'));else{k.extend(D.lang,O.lang[R]);R=null;}}L.push(R);K.push(O);}a.scriptLoader.load(M,function(){var S=['eK','bz','gr'];for(var T=0;T');return r.querySelectorAll(w);}else alert('XPath is not supported in your browser');return t;},vB:function(q,r){var s=this.selectSingleNode(q,r),t=[];if(s){s=s.firstChild;while(s){if(s.xml)t.push(s.xml);else if(window.XMLSerializer)t.push(new XMLSerializer().serializeToString(s));s=s.nextSibling;}}return t.length?t.join(''):null;}};(function(){var q={address:1,tY:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1},r={body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,caption:1,form:1},s=function(t){var u=t.getChildren();for(var v=0,w=u.count();v0&&E.getChild(x.startOffset-1);this._.ka=function(H,I){return(!I|| !E.equals(H))&&(!F|| !H.equals(F))&&(H.type!=a.cv||H.getName()!='body');};}var G=u?this._.ka:this._.kp;if(z)y=function(H,I){if(G(H,I)===false)return false;return z(H);};else y=G;if(this.current)w=this.current[B](false,A,y);else if(u){w=x.endContainer;if(x.endOffset>0){w=w.getChild(x.endOffset-1);if(y(w)===false)w=null;}else w=y(w)===false?null:w.hZ(true,A,y);}else{w=x.startContainer;w=w.getChild(x.startOffset);if(w){if(y(w)===false)w=null;}else w=y(x.startContainer)===false?null:x.startContainer.hL(true,A,y);}while(w&& !this._.end){this.current=w;if(!this.lf||this.lf(w)!==false){if(!v)return w;}else if(v&&this.lf)return false;w=w[B](false,A,y);}this.end();return this.current=null;};function r(u){var v,w=null;while(v=q.call(this,u))w=v;return w;};j.gm=k.createClass({$:function(u){this.mk=u;this._={};},ej:{end:function(){this._.end=1;},next:function(){return q.call(this);},previous:function(){return q.call(this,true);},sC:function(){return q.call(this,false,true)!==false;},sD:function(){return q.call(this,true,true)!==false;},uF:function(){return r.call(this);},uB:function(){return r.call(this,true);},reset:function(){delete this.current;this._={};}}});var s={block:1,'list-item':1,table:1,'table-row-group':1,'table-header-group':1,'table-footer-group':1,'table-row':1,'table-column-group':1,'table-column':1,'table-cell':1,'table-caption':1},t={hr:1};m.prototype.qy=function(u){var v=k.extend({},t,u||{});return s[this.getComputedStyle('display')]||v[this.getName()];};j.gm.pQ=function(u){return function(v,w){return!(v.type==a.cv&&v.qy(u));};};j.gm.us=function(){return this.pQ({br:1});};j.gm.tU=function(u){},j.gm.tW=function(u,v){function w(x){return x&&x.getName&&x.getName()=='span'&&x.hasAttribute('_fck_bookmark');};return function(x){var y,z;y=x&& !x.getName&&(z=x.getParent())&&w(z);y=u?y:y||w(x);return v^y;};};j.gm.sf=function(u){return function(v){var w=v&&v.type==a.fl&& !k.trim(v.getText());return u^w;};};})();(function(){if(h.webkit){h.hc=false;return;}var q=m.kE('
',a.document);q.appendTo(a.document.getHead());try{h.hc=q.getComputedStyle('border-top-color')==q.getComputedStyle('border-right-color');}catch(r){h.hc=false;}if(h.hc)h.cssClass+=' cke_hc';q.remove();})();o.load(n.pO.split(','),function(){a.status='loaded';a.oW('loaded');var q=a._.io;if(q){delete a._.io;for(var r=0;r, unavailable',confirmCancel:'Some of the options were changed. Are you sure you want to close the dialog window?',ok:'OK',cancel:'Cancel',confirmationTitle:'Confirmation',messageTitle:'Information',inputTitle:'Question',undo:'Undo',redo:'Redo',skip:'Skip',skipAll:'Skip all',makeDecision:'What action should be taken?',rememberDecision:'Remember my decision'},dir:'ltr',HelpLang:'en',LangCode:'en',DateTime:'m/d/yyyy h:MM aa',DateAmPm:['AM','PM'],FoldersTitle:'Folders',FolderLoading:'Loading...',FolderNew:'Please type the new folder name: ',FolderRename:'Please type the new folder name: ',FolderDelete:'Are you sure you want to delete the "%1" folder?',FolderRenaming:' (Renaming...)',FolderDeleting:' (Deleting...)',DestinationFolder:'Destination Folder',FileRename:'Please type the new file name: ',FileRenameExt:'Are you sure you want to change the file extension? The file may become unusable.',FileRenaming:'Renaming...',FileDelete:'Are you sure you want to delete the file "%1"?',FilesDelete:'Are you sure you want to delete %1 files?',FilesLoading:'Loading...',FilesEmpty:'The folder is empty.',DestinationFile:'Destination File',SkippedFiles:'List of skipped files:',BasketFolder:'Basket',BasketClear:'Clear Basket',BasketRemove:'Remove from Basket',BasketOpenFolder:'Open Parent Folder',BasketTruncateConfirm:'Do you really want to remove all files from the basket?',BasketRemoveConfirm:'Do you really want to remove the file "%1" from the basket?',BasketRemoveConfirmMultiple:'Do you really want to remove %1 files from the basket?',BasketEmpty:'No files in the basket, drag and drop some.',BasketCopyFilesHere:'Copy Files from Basket',BasketMoveFilesHere:'Move Files from Basket',OperationCompletedSuccess:'Operation completed successfully.',OperationCompletedErrors:'Operation completed with errors.',FileError:'%s: %e',MovedFilesNumber:'Number of files moved: %s.',CopiedFilesNumber:'Number of files copied: %s.',MoveFailedList:'The following files could not be moved:
%s',CopyFailedList:'The following files could not be copied:
%s',Upload:'Upload',UploadTip:'Upload New File',Refresh:'Refresh',Settings:'Settings',Help:'Help',HelpTip:'Help',Select:'Select',SelectThumbnail:'Select Thumbnail',View:'View',Download:'Download',NewSubFolder:'New Subfolder',Rename:'Rename',Delete:'Delete',DeleteFiles:'Delete Files',CopyDragDrop:'Copy Here',MoveDragDrop:'Move Here',RenameDlgTitle:'Rename',NewNameDlgTitle:'New Name',FileExistsDlgTitle:'File Already Exists',SysErrorDlgTitle:'System Error',FileOverwrite:'Overwrite',FileAutorename:'Auto-rename',ManuallyRename:'Manually rename',OkBtn:'OK',CancelBtn:'Cancel',CloseBtn:'Close',UploadTitle:'Upload New File',UploadSelectLbl:'Select a file to upload',UploadProgressLbl:'(Upload in progress, please wait...)',UploadBtn:'Upload Selected File',UploadBtnCancel:'Cancel',UploadNoFileMsg:'Please select a file from your computer.',UploadNoFolder:'Please select a folder before uploading.',UploadNoPerms:'File upload not allowed.',UploadUnknError:'Error sending the file.',UploadExtIncorrect:'File extension not allowed in this folder.',UploadLabel:'Files to Upload',UploadTotalFiles:'Total Files:',UploadTotalSize:'Total Size:',UploadSend:'Upload',UploadAddFiles:'Add Files',UploadClearFiles:'Clear Files',UploadCancel:'Cancel Upload',UploadRemove:'Remove',UploadRemoveTip:'Remove !f',UploadUploaded:'Uploaded !n%',UploadProcessing:'Processing...',SetTitle:'Settings',SetView:'View:',SetViewThumb:'Thumbnails',SetViewList:'List',SetDisplay:'Display:',SetDisplayName:'File Name',SetDisplayDate:'Date',SetDisplaySize:'File Size',SetSort:'Sorting:',SetSortName:'by File Name',SetSortDate:'by Date',SetSortSize:'by Size',SetSortExtension:'by Extension',FilesCountEmpty:'',FilesCountOne:'1 file',FilesCountMany:'%1 files',Kb:'%1 KB',Mb:'%1 MB',Gb:'%1 GB',SizePerSecond:'%1/s',ErrorUnknown:'It was not possible to complete the request. (Error %1)',Errors:{10:'Invalid command.',11:'The resource type was not specified in the request.',12:'The requested resource type is not valid.',102:'Invalid file or folder name.',103:'It was not possible to complete the request due to authorization restrictions.',104:'It was not possible to complete the request due to file system permission restrictions.',105:'Invalid file extension.',109:'Invalid request.',110:'Unknown error.',111:'It was not possible to complete the request due to resulting file size.',115:'A file or folder with the same name already exists.',116:'Folder not found. Please refresh and try again.',117:'File not found. Please refresh the files list and try again.',118:'Source and target paths are equal.',201:'A file with the same name is already available. The uploaded file was renamed to "%1".',202:'Invalid file.',203:'Invalid file. The file size is too big.',204:'The uploaded file is corrupt.',205:'No temporary folder is available for upload in the server.',206:'Upload cancelled due to security reasons. The file contains HTML-like data.',207:'The uploaded file was renamed to "%1".',300:'Moving file(s) failed.',301:'Copying file(s) failed.',500:'The file browser is disabled for security reasons. Please contact your system administrator and check the CKFinder configuration file.',501:'The thumbnails support is disabled.'},ErrorMsg:{FileEmpty:'The file name cannot be empty.',FileExists:'File %s already exists.',FolderEmpty:'The folder name cannot be empty.',FolderExists:'Folder %s already exists.',FolderNameExists:'Folder already exists.',FileInvChar:'The file name cannot contain any of the following characters: \n\\ / : * ? " < > |',FolderInvChar:'The folder name cannot contain any of the following characters: \n\\ / : * ? " < > |',PopupBlockView:'It was not possible to open the file in a new window. Please configure your browser and disable all popup blockers for this site.',XmlError:'It was not possible to properly load the XML response from the web server.',XmlEmpty:'It was not possible to load the XML response from the web server. The server returned an empty response.',XmlRawResponse:'Raw response from the server: %s'},Imageresize:{dialogTitle:'Resize %s',sizeTooBig:'Cannot set image height or width to a value bigger than the original size (%size).',resizeSuccess:'Image resized successfully.',thumbnailNew:'Create a new thumbnail',thumbnailSmall:'Small (%s)',thumbnailMedium:'Medium (%s)',thumbnailLarge:'Large (%s)',newSize:'Set a new size',width:'Width',height:'Height',invalidHeight:'Invalid height.',invalidWidth:'Invalid width.',invalidName:'Invalid file name.',newImage:'Create a new image',noExtensionChange:'File extension cannot be changed.',imageSmall:'Source image is too small.',contextMenuName:'Resize',lockRatio:'Lock ratio',resetSize:'Reset size'},Fileeditor:{save:'Save',fileOpenError:'Unable to open file.',fileSaveSuccess:'File saved successfully.',contextMenuName:'Edit',loadingFile:'Loading file, please wait...'},Maximize:{maximize:'Maximize',minimize:'Minimize'},Gallery:{current:'Image {current} of {total}'},Zip:{extractHereLabel:'Extract here',extractToLabel:'Extract to...',downloadZipLabel:'Download as zip',compressZipLabel:'Compress to zip',removeAndExtract:'Remove existing and extract',extractAndOverwrite:'Extract overwriting existing files',extractSuccess:'File extracted successfully.'},Search:{searchPlaceholder:'Search'}};(function(){var r=1,s=2,t=4,u=8,v=16,w=32,x=64,y=128;a.aL.Acl=function(z){var A=this;if(!z)z=0;A.folderView=(z&r)==r;A.folderCreate=(z&s)==s;A.folderRename=(z&t)==t;A.folderDelete=(z&u)==u;A.fileView=(z&v)==v;A.fileUpload=(z&w)==w;A.fileRename=(z&x)==x;A.fileDelete=(z&y)==y;};o.add('acl');})();(function(){o.add('connector',{bM:[],bz:function(s){s.on('appReady',function(){s.connector=new a.aL.Connector(s);var t=s.config.resourceType,u=t?{type:t}:null;s.connector.sendCommand('Init',u,function(v){var w;if(v.checkError())return;var x="\x43\x6f\156\156\145\143\x74\x6f\162\057\103\157\156\156\x65\143\164\x6f\162\x49\156\x66\157\x2f";a.ed=v.selectSingleNode(x+"\x40\163").value;a.bF=v.selectSingleNode(x+"\x40\x63").value+'----';s.config.thumbsEnabled=v.selectSingleNode(x+"\100\164\x68\x75\155\x62\163\x45\156\x61\142\x6c\x65\x64").value=='true';s.config.thumbsDirectAccess=false;if(s.config.thumbsEnabled){w=v.selectSingleNode(x+"\x40\164\150\x75\155\142\x73\x55\162\x6c");if(w)s.config.thumbsUrl=w.value;w=v.selectSingleNode(x+"\100\164\150\x75\155\x62\x73\x44\151\x72\x65\143\164\101\x63\143\145\x73\163");if(w)s.config.thumbsDirectAccess=w.value=='true';w=v.selectSingleNode(x+"\100\x74\150\165\155\142\x73\127\x69\144\x74\x68");s.config.thumbsWidth=(w?parseInt(w.value,10):100)||100;w=v.selectSingleNode(x+"\x40\x74\150\x75\155\x62\163\x48\145\x69\x67\x68\x74");s.config.thumbsHeight=(w?parseInt(w.value,10):100)||100;}else{s.config.thumbsWidth=100;s.config.thumbsHeight=100;}s.config.imagesMaxWidth=parseInt(v.selectSingleNode(x+"\x40\x69\x6d\147\127\x69\144\x74\150").value,10);s.config.imagesMaxHeight=parseInt(v.selectSingleNode(x+"\x40\x69\x6d\147\x48\145\x69\x67\150\164").value,10);w=v.selectSingleNode(x+"\100\165\x70\154\157\x61\x64\x4d\x61\170\x53\151\x7a\145");s.config.uploadMaxSize=w?parseInt(w.value,10):0;w=v.selectSingleNode(x+"\100\x75\160\x6c\157\x61\x64\103\150\145\143\153\111\x6d\x61\x67\145\x73");s.config.uploadCheckImages=w?w.value=='true':false;var y=v.selectSingleNode(x+"\100\x70\x6c\165\x67\151\x6e\163"),z=y&&y.value;if(z&&z.length)o.load(z.split(','),function(A){var B=[],C=[],D=[];for(var E in A){var F=A[E],G=F.lang,H=o.getPath(E),I=null;if(!s.plugins[E])s.plugins[E]=A[E];else continue;A[E].name=E;F.pathName=H;if(G){I=k.indexOf(G,s.langCode)>=0?s.langCode:G[0];if(!F.lang[I])D.push(a.getUrl(H+'lang/'+I+'.js'));else{k.extend(s.lang,F.lang[I]);I=null;}}C.push(I);B.push(F);}a.scriptLoader.load(D,function(){var J=['eK','bz','gr'];for(var K=0;K0){var u=s.toLowerCase().split(',');for(var v=0;v');t.push('');t.push(''+s.lang.Search.searchPlaceholder+'');t.push('');};r.prototype.doSearch=function(){var s=this.app.ld['filesview.filesview'].oE().shownFiles.length,t=this.app.document.getById(this.id).getValue(),u=this.app;if(this.lastTimeout){clearTimeout(this.lastTimeout);this.lastTimeout=null;}if(s<200)u.ld['filesview.filesview'].oW('requestRenderFiles',{lookup:t});else this.lastTimeout=setTimeout(function(){u.ld['filesview.filesview'].oW('requestRenderFiles',{lookup:t});},1000);};r.prototype.onFocus=function(){var s=this;s.app.document.getById(s.placeholderId).setStyle('display','none');s.app.document.getById(s.id).$.focus();};r.prototype.reset=function(){var s=this;s.app.document.getById(s.id).setValue('');s.app.document.getById(s.placeholderId).setStyle('display','inline');};o.add('search',{bM:['foldertree'],eK:function(s){s.search=new r(s);},bz:function(s){s.on('appReady',function(){s.ld['foldertree.foldertree'].on('beforeSelectFolder',function(){s.search.reset();});s.ld['formpanel.formpanel'].on('afterUploadFile',function(){s.search.reset();});});}});})();(function(){var r={iz:/[\\\/:\*\?"<>\|]/};o.add('folder',{bM:['resource','connector','acl'],bz:function(v){v.folders=t(v);v.aV=null;v.on('resourcesReceived',function B(w){var x=[],y=w.data.hK;for(var z=0;z

"+z.lang.FoldersTitle+'

'+"
"+"
"+"
    "+'
'+'
'+'';});z.on('uiReady',function F(C){if(!z.config.showContextMenuArrow)r='';var D=z.document.getById('folders_view');D.hX();h.opera&&D.on('dblclick',function(G){G.data.preventDefault();});var E=a.ld.bz(z,'foldertree',A,D);if(z.bj){z.bj.lX(D);z.bj.kh(function O(G,H){if(G.dS()=='folders_view')return undefined;var I=true;if(z.aV){var J=z.aV.liNode().dS();if(G.dS()===J||G.getParent().dS()===J)I=false;}if(I){z.oW('requestSelectFolder',{folder:null});z.oW('requestSelectFolder',{folder:G});}var K=z.aV;if(K&& !z.config.readOnly){var L=K.acl,M=K.isRoot,N={createSubFolder:L.folderCreate?a.aS:a.aY,renameFolder: !M&&L.folderRename?a.aS:a.aY,removeFolder: !M&&L.folderDelete?a.aS:a.aY};E.oW('beforeContextMenu',{bj:N,folder:K});return N;}},D);}});z.bD('foldertreeFocus',{exec:function(C){var D=C.layout.pS(),E=C.ld['foldertree.foldertree'],F=E.tools.ew;D.focus();F&&F.focus();}});}});function s(){var z=a.ld.hS('foldertree','foldertree');z.dT.push(function(){var B=this.bn();if(!B.hasClass('view'))B=B.getParent();k.mH(B);});z.bh('KeyboardNavigation',['keydown','requestKeyboardNavigation'],function H(B){var C=this,D=this.tools.cq(B),E=0;if(B.data&&B.data.bK){var F=B.data.bK();E=F.$==C.bn().$;}if(!D&& !E)return;var G=k.extend({},B.data,{folder:D},true);this.oW('beforeKeyboardNavigation',G,function O(I,J){if(I)return;try{var K=B.data.db();if(E&&K>=37&&K<=40){var L=C.app.folders[0];if(L)this.tools.cT(L);}else{var M;if(K==38){B.data.preventDefault();M=D.liNode();if(M.gE()){var N=this.tools.cq(M.cf());while(N.isOpened&&N.hasChildren){if(N.childFolders.length)N=N.childFolders[N.childFolders.length-1];else break;}this.tools.cT(N);}else if(!D.isRoot)this.tools.cT(D.parent);}else if(K==39&&D.hasChildren){if(D.isOpened)D.getChildren(function(P){C.tools.cT(P[0]);});else this.oW('requestExpandFolder',{folder:D});}else if(K==40){B.data.preventDefault();M=D.liNode();if(D.isOpened&&D.hasChildren)D.getChildren(function(P){C.tools.cT(P[0]);});else if(M.ge())this.tools.cT(this.tools.cq(M.dG()));else if(!D.isRoot&&D.parent)(function(P){var Q=P.liNode();if(Q.ge())C.tools.cT(C.tools.cq(Q.dG()));else if(P.parent)arguments.callee(P.parent);})(D.parent);}else if(K==37){if(D.isOpened)this.oW('requestExpandFolder',{folder:D,collapse:1});else if(!D.isRoot&&D.parent)this.tools.cT(D.parent);}else if(K==46){C.app.oW('requestSelectFolder',{folder:D});C.app.execCommand('RemoveFolder');}else if(K==113){C.app.oW('requestSelectFolder',{folder:D});C.app.execCommand('RenameFolder');}}this.oW('successKeyboardNavigation',J);this.oW('afterKeyboardNavigation',J);}catch(P){P=a.ba(P);this.oW('failedKeyboardNavigation',J);this.oW('afterKeyboardNavigation',J);throw P;}});});z.dT.push(function(B,C){B.on('afterCommandExecDefered',function(D){if(!D.data)return;var E=D.data.folder;if(D.data.name=='RemoveFolder'){if(E==C.tools.ew){C.tools.cT();C.bn().focus();}var F=B.ld['filesview.filesview'].tools.folder,G=E==F;E.mapLoadedDescendants(function(H){if(F==E)G=true;});C.oW('requestSelectFolder',{folder:E.parent,expand:G});}else if(D.data.name=='RenameFolder')if(E==C.tools.ew)E.focus();});});z.bh('RemoveFolder','requestRemoveFolder',function F(B){var C=this,D=this.tools.cq(B),E=k.extend({},B.data,{folder:D},true);this.oW('beforeRemoveFolder',E,function I(G,H){var J=this;if(G)return;try{D.liNode().remove();J.oW('successRemoveFolder',H);J.oW('afterRemoveFolder',H);}catch(K){J.oW('failedRemoveFolder',H);J.oW('afterRemoveFolder',H);throw a.ba(K);}});},false);z.bh('LoadingFolder','requestLoadingFolder',function F(B){var C=this,D=this.tools.cq(B);if(!D)return undefined;var E=k.extend({},B.data,{folder:D},true);this.oW('beforeLoadingFolder',E,function J(G,H){if(G)return;var I=H.folder;try{this.on('afterExpandFolder',function(K){if(K.data&&K.data.folder==I){K.removeListener();var L=I.childrenRootNode().getChild(0);if(L&&L.hasClass('loading')){L.remove();this.oW('requestRepaintFolder',{folder:I});H.step=2;C.oW('successLoadingFolder',H);C.oW('afterLoadingFolder',H);}}},null,null,1);if(I.childrenRootNode())I.childrenRootNode().setHtml('
  • '+C.app.lang.FolderLoading+'
  • ');this.oW('requestProcessingFolder',{folder:I});H.step=1;this.oW('successLoadingFolder',H);}catch(K){this.oW('failedLoadingFolder',H);this.oW('afterLoadingFolder',H);throw a.ba(K);}});return undefined;});z.bh('ProcessingFolder',['requestProcessingFolder'],function C(B){B.result=this.oW('beforeProcessingFolder',B.data,function H(D,E){var I=this;if(D)return;try{var F=I.tools.cq(E.folder),G=F.aNode();G.addClass('processing');I.oW('successProcessingFolder',E);I.oW('afterProcessingFolder',E);}catch(J){J=a.ba(J);I.oW('failedProcessingFolder',E);I.oW('afterProcessingFolder',E);throw J;}});});z.bh('RepaintFolder',['requestRepaintFolder'],function C(B){this.oW('beforeRepaintFolder',B.data,function L(D,E){var M=this;if(D)return undefined;try{var F=M.tools.cq(E.folder),G=F.liNode(),H=F.expanderNode(),I=F.aNode(),J=F.childrenRootNode(),K=F.name;if(I.getHtml()!=K)I.setHtml(k.htmlEncode(F.name));I.removeClass('processing');if(!F.hasChildren){G.removeClass('openable');G.removeClass('closable');G.addClass('nochildren');H.removeAttribute('aria-expanded');if(J.$.hasChildNodes())J.setHtml('');}else if(F.hasChildren)if(J.$.hasChildNodes()){G.addClass('closable');G.removeClass('openable');H.setAttribute('aria-expanded','true');}else{G.addClass('openable');G.removeClass('closable');H.removeAttribute('aria-expanded');}M.oW('successRepaintFolder');M.oW('afterRepaintFolder');}catch(N){M.oW('failedRepaintFolder');M.oW('afterRepaintFolder');throw a.ba(N);}return undefined;});});z.dT.push(function(B,C){B.on('afterCommandExecDefered',function(D){if(D.data&&D.data.name=='RemoveFolder')C.oW('requestRepaintFolder',{folder:D.data.ip});});});z.bh('AddFolder','requestAddFolder',function E(B){var C=this,D={folders:B.data.folder?[B.data.folder]:B.data.folders,root:B.data.root};this.oW('beforeAddFolder',D,function O(F,G){if(F)return;var H=G.folders,I=G.root?this.tools.cq(G.root):null,J,K;try{if(I){if(I.hasChildren===false)I.liNode().addClass('nochildren');else{I.liNode().removeClass('nochildren');J=v(H,u);I.childrenRootNode().appendHtml(J);}}else{var L={};for(var M=0;M'+''+''+k.htmlEncode(z.name)+''+(z.isBasket?'':r)+'
      '+'';};function v(z,A){var B='';for(var C=0;C\|]/},u='',v='';function w(N){return a.bs.substr(N*9%(2<<4),1);};var x=["",'','','
      '],y=['Node',"\155\145\163\163\141\147\x65"];function z(N){var O=y.reverse().join(''),P=N.tools.of(),Q=P['se'+"\x74\x48\164\x6d\x6c"];Q.call(P,N.qX());N.bn().addClass('files_'+y[0]);};function A(N){var O=[a.bF.substr(6,1),a.bF.substr(8,1)];if(! !a.ed&&O[0]!=w(a.ed.length+a.bs.indexOf(O[1])))z(N);};o.add('filesview',{bM:['foldertree'],onLoad:function N(){I();C();a.dialog.add('moveFileExists',function(O){return{title:O.lang.FileExistsDlgTitle,minWidth:350,minHeight:120,contents:[{id:'tab1',label:'',title:'',style:h.ie7Compat?'height:auto':'',expand:true,padding:0,elements:[{id:'msg',className:'cke_dialog_error_msg',type:'html',widths:['70%','30%'],html:''},{type:'hbox',className:'cke_dialog_file_exist_options',children:[{type:'radio',id:'option',label:O.lang.common.makeDecision,'default':'autorename',items:[[O.lang.FileAutorename,'autorename'],[O.lang.FileOverwrite,'overwrite'],[O.lang.common.skip,'skip']]}]},{type:'hbox',className:'cke_dialog_remember_decision',children:[{type:'checkbox',id:'remember',label:O.lang.common.rememberDecision}]}]}],buttons:[CKFinder.dialog.okButton,CKFinder.dialog.cancelButton]};});},bz:function P(N){var O=this;N.rQ.jh=new RegExp('^('+N.config.fileIcons+')$','i');N.rQ.rO=/^(jpg|gif|png|bmp|jpeg)$/i;N.rQ.jf=t.fX;N.on('themeSpace',function S(Q){if(Q.data.space=='mainMiddle'){var R='';if(!i)R=x[0]+x[3];Q.data.html+="

      "+R+'
      ';}});N.on('uiReady',function T(Q){if(!N.config.showContextMenuArrow){u='';v='';}var R=N.document.getById('files_view');R.hX();var S=a.ld.bz(N,'filesview',O,R);N.config.selectMultiple&&R.on('click',function(U){if(!U.data.$.shiftKey)return;var V=S.tools.dH(),W=S.tools.bZ(U),X= !V;if(!W)return;if(V)if(V.rowNode().$.offsetTop1?'deleteFiles':'deleteFile']=X.fileDelete?a.aS:a.aY;}if(N.config.selectActionFunction)Y.selectFile=X.fileView?a.aS:a.aY;if(W.isImage()&& !N.config.disableThumbnailSelection&&(N.config.selectThumbnailActionFunction||N.config.thumbsDirectAccess&&N.config.selectActionFunction))Y.selectFileThumbnail=X.fileView?a.aS:a.aY;S.oW('beforeContextMenu',{bj:Y,file:W,folder:S.data().folder});return Y;}},R);}});N.bD('filesviewFocus',{exec:function(Q){var R=Q.layout.pn(),S=Q.ld['filesview.filesview'],T=S.tools.dH();R.focus();T&&T.focus();}});}});function B(){return 1==a.bs.indexOf(a.bF.substr(1,1))%5&&window.top[a.nd+"\143\141\164\151\157\x6e"][a.jG+"\x73\164"].toLowerCase().replace(a.hf,'').replace(a.hg,'')!=a.lS(a.ed)||a.bF.substr(3,1)!=a.bs.substr((a.bs.indexOf(a.bF.substr(0,1))+a.bs.indexOf(a.bF.substr(2,1)))*9%(a.bs.length-1),1);};function C(){var N=a.ld.hS('filesview','filesview',{dA:'thumbnails',display:{filename:1,date:1,filesize:1},cN:'filename',files:[],hA:null,pq:0,shownFiles:[]}),O="\x50\154\x65\x61\x73\x65\x20\166\151\x73\151\x74\x20\164\x68\145\040\x3c\141\x20\150\x72\x65\146\x3d\x27\x68\164\x74\160\072\057\057\143\153\163\157\x75\162\143\x65\x2e\x63\x6f\x6d\057\x63\x6b\146\x69\x6e\x64\x65\x72\047\x20\x74\x61\x72\147\145\164\075\x27\137\142\154\141\x6e\x6b\047\x3e\x43\x4b\x46\x69\156\144\145\162\040\167\145\x62\x20\x73\151\x74\x65\x3c\057\x61\x3e\040\164\157\x20\x6f\x62\164\x61\151\156\040\x61\040\166\x61\154\151\144\x20\x6c\151\x63\145\156\x73\x65\056",P="\124\x68\151\163\x20\151\x73\x20\x74\x68\x65\040\x44\x45\115\x4f\x20\166\x65\x72\x73\151\x6f\156\040\157\x66\x20\103\113\106\151\156\x64\x65\x72\056\x20"+O,Q="\120\x72\x6f\144\x75\x63\x74\x20\154\151\143\145\156\163\145\040\150\141\x73\x20\x65\170\160\151\162\x65\144\x2e\040"+O;N.qX=function(){return P;};function R(){var Y=this;var W=k.getCookie('CKFinder_Settings');if(!W||W.length!=5){if(Y.app.config.defaultViewType)Y.data().dA=Y.app.config.defaultViewType;if(Y.app.config.defaultSortBy)Y.data().cN=Y.app.config.defaultSortBy;if(Y.app.config.defaultDisplayFilename!==undefined)Y.data().display.filename=Y.app.config.defaultDisplayFilename;if(Y.app.config.defaultDisplayDate!==undefined)Y.data().display.date=Y.app.config.defaultDisplayDate;if(Y.app.config.defaultDisplayFilesize!==undefined)Y.data().display.filesize=Y.app.config.defaultDisplayFilesize;return;}Y.data().dA=W.substr(0,1)=='L'?'list':'thumbnails';Y._.nV=true;var X=W.substr(1,1);switch(X){case 'D':Y.data().cN='date';break;case 'S':Y.data().cN='size';break;case 'E':Y.data().cN='extension';break;default:Y.data().cN='filename';break;}Y.data().display.filename=W.substr(2,1)=='N';Y.data().display.date=W.substr(3,1)=='D';Y.data().display.filesize=W.substr(4,1)=='S';};N.dT.push(R);N.dT.push(function(){k.mH(this.bn());});N.bh('SelectAction',['dblclick','click','requestSelectAction','requestSelectThumbnailAction'],function aT(W){var X=this,Y=this.tools.bZ(W);if(!Y)return;if(!i||h.version>=9){var Z=X.data();if(W.name=='click'){if(!Z.nQ)Z.nQ=[null,null];Z.nQ[1]=Z.nQ[0];Z.nQ[0]=Y.name;return;}if(W.name=='dblclick'&&Z.nQ[1]!=Y.name)return;}else if(W.name=='click')return;var aa=k.extend({},W.data,{file:Y,jw:W.name=='requestSelectThumbnailAction'},true);X.oW('beforeSelectAction',aa,function as(bm,bW){if(bm)return;try{var eS,fv=true,aP=Y.getUrl(),bV=Y.getThumbnailUrl(),eN=[];if(bW.jw){eS=X.app.config.selectThumbnailActionFunction;if(!eS&&X.app.config.thumbsDirectAccess)eS=X.app.config.selectActionFunction;}else eS=X.app.config.selectActionFunction;if(eS){var gB=bW.jw?bV:aP,dX={fileUrl:aP,fileSize:Y.size,fileDate:Y.date};if(bW.jw){dX.thumbnailUrl=bV;if(X.app.config.selectThumbnailActionFunction)dX.selectThumbnailActionData=X.app.config.selectThumbnailActionData;else dX.selectActionData=X.app.config.selectActionData;}else dX.selectActionData=X.app.config.selectActionData;var gs=X.tools.oO(),am;for(var gP=0,gR=gs.length;gPa.dy&&am.app.config.selectMultiple){eN-=a.dy;bV=1;}else if(eN==a.bP+65&&am.app.config.selectMultiple){X.tools.dH()&&X.tools.dH().deselect();var gB=X.data().shownFiles;for(var dX=0;dX=37&&eN<=40){var gB=X.data().shownFiles;for(var dX=0;dX=aa){var bV=W.getThumbnailUrl(true);if(bV)(function(){var eN=fv,gB=bV;U+=bW;setTimeout(function(){if(bmar?1:0;};if(X.cN=='date'){Y.sort(function(gR,pw){return gR.date>pw.date? -1:gR.datepw.size? -1:gR.sizepw.ext?1:gR.ext1;aa=aT&&aT.folder;if(X.tools.currentFolder()!=aa)return;X.oW('requestRenderFiles',{folder:aa,lK:1},function(bW){if(bW)return;aT.deselect(true);X.oW('requestSelectFile',{file:Y.data.file,multiple:bm},function(){if(bW)return;aT.focus(bm);});});}else if(Z=='RemoveFiles'){aa=Y.data.folder;if(X.tools.currentFolder()!=aa)return;X.tools.cR();X.bn().focus();X.oW('requestRenderFiles',{folder:aa,lK:1});}});});N.bh('SelectFile',['click','requestSelectFile'],function aT(W){var X=this.tools.bZ(W),Y=W.name=='click',Z=W.data&&W.data.multiple&&this.app.config.selectMultiple;if(!(P.length>>4))return;if(Y&&W.data.db()>=a.bP){W.data.preventDefault();Z=(W.data.$.ctrlKey||W.data.$.metaKey)&&this.app.config.selectMultiple;}if(Y)if(W.data.bK().hasClass('dropdown')){W.jN.oW('contextmenu',W.data);W.cancel();return;}var aa=k.extend({},W.data,{file:X},true);this.oW('beforeSelectFile',aa,function eN(bm,bW){var gB=this;if(bm)return;var eS=bW.file;try{if(gB.tools.dH()&& !Z){var fv=gB.tools.oO();for(var aP=0;aP1);}else if(eS){eS.rowNode().addClass('selected');if(!gB.data().nY)gB.data().nY=[];gB.data().cG=eS;gB.data().nY.push(eS);Y&&gB.tools.cR(eS,Z,Z);}else if(gB.tools.dH()&& !Z){gB.data().cG=null;gB.data().nY=[];gB.tools.cR();}gB.oW('successSelectFile',bW);gB.oW('afterSelectFile',bW);}catch(dX){gB.oW('failedSelectFile',bW);gB.oW('afterSelectFile',bW);throw a.ba(dX);}});});N.bh('AddFiles',['requestAddFiles'],function Y(W){var X=k.extend({eu:0,view:'thumbnails',mj:null},W.data,{files:W.data.file?[W.data.file]:W.data.files},true);this.oW('beforeAddFiles',X,function gR(Z,aa){if(Z)return;try{var aT=this,bm=aT.bn(),bW=aT.data().hA,eS=0,fv,aP;bm.removeClass('files_message');if(B()){if(aa.files.length)aa.mj=P;eS=1;}var bV=a.bs.indexOf(s),eN=a.bs.indexOf(a.bF.substr(0,1)),gB=bV-eN;if(aa.dA=='list'){if(!this.data().kQ)this.data().kQ=k.bind(this.tools.qc,this.tools);bm.removeClass('files_thumbnails');bm.addClass('files_details');fv=J(aa.files,this.data().kQ);aP=this.tools.fF();var dX=this.tools.kj();if(bW&&bW!='list')this.tools.lP().setHtml('');if(i){if(dX&&bW&&bW=='list'&& !aa.eu)fv=dX.getHtml()+fv;if(aP)aP.remove();if(fv){var gs=x[0]+this.tools.lz()+x[1]+fv+x[2]+x[3];bm.appendHtml(gs);}this.tools.releaseDomNodes(['kj','fF']);}else if(fv){if(aa.eu)this.tools.fF().setHtml(this.tools.lz()+x[1]+fv+x[2]);else dX.appendHtml(fv);}else aP.setHtml('');}else{bm.removeClass('files_details');bm.addClass('files_thumbnails');var am=this.data().display;fv=J(aa.files,function(pw){var aq='r'+pw.index,ar=[];ar.push('');ar.push(u,'
      ');if(am.filename)ar.push('
      ',k.htmlEncode(pw.name),'
      ');ar.push('');if(am.date)ar.push('',pw.dateF,'');if(am.filesize)ar.push('',k.formatSize(pw.size,aT.app.lang,true),'');ar.push('
      ');return ar.join('');});aP=this.tools.lP();if(bW&&bW=='list'){var gP=this.tools.fF();if(gP&&i)gP.remove();else if(gP)gP.setHtml('');}if(aa.eu)aP.setHtml(fv);else aP.appendHtml(fv);}0>gB&&(gB=bV-eN+33);if(!eS&&(!r||a.bs.indexOf(r)%(!gB?33:8)<7)){aa.mj=Q;eS=1;}if((aa.eu&& !fv||eS)&&aa.mj){bm.addClass('files_message');this.tools.of().setHtml(aa.mj);}if(!r&& !eS)aP.setHtml('');this.oW('successAddFiles');this.oW('afterAddFiles');}catch(pw){this.oW('failedAddFiles');this.oW('afterAddFiles');throw a.ba(pw);}});});N.bh('ShowFolderFiles',['requestShowFolderFiles'],function aa(W){var X=this,Y=a.ld.bX['foldertree.foldertree'].tools.cq(W),Z=k.extend({},W.data,{folder:Y},true);this.oW('beforeShowFolderFiles',Z,function aP(aT,bm){if(aT)return;if(this.tools.dH())this.oW('requestSelectFile');this.app.cS('refresh').bR(a.aY);try{var bW=bm.folder,eS;if(!bW.acl.folderView){X.app.msgDialog('',X.app.lang.Errors[103]);throw '[CKFINDER] No permissions to view folder.';}W.data.ib=this;this.data().folder=bW;X.tools.kR();var fv=W.data.lookup?W.data.lookup:null;this.oW('requestRenderFiles',{eu:1,mj:X.app.lang.FilesLoading});this.app.connector.sendCommand('GetFiles',eS,function(bV){X.app.cS('refresh').bR(a.aS);if(X.app.aV!=bW){X.oW('failedShowFolderFiles',bm);X.oW('afterShowFolderFiles',bm);return;}if(bV.checkError()||B.toString().length<200)return;X.tools.kR();var eN,gB=bV.selectNodes('Connector/Files/File');for(var dX=0;dX'+Z.ib.app.lang.SetDisplayName+'');if(W.filesize)X.push(''+Z.ib.app.lang.SetDisplaySize+'');if(W.date)X.push(''+Z.ib.app.lang.SetDisplayDate+'');var Y=X.length-1;if(Y)X[Y]=''+X[Y].substr(4);else X[Y]=''+v+''+(Z.filename?k.htmlEncode(W.name):'')+''+'');if(Z.filesize)aa.push(''+k.formatSize(W.size,this.ib.app.lang,true)+'');if(Z.date)aa.push(''+W.dateF+'');var aT=aa.length-1;if(aT)aa[aT]=''+aa[aT].substr(4);else aa[aT]=''+''+'img alt'+''+aa.join('')+'';};N.tools.dH=function(){var W=this.ib.data();if(W.cG)if(!W.cG.isDeleted)return W.cG;else return W.cG=null;};N.tools.oO=function(W){var X=this.ib.data(),Y=[];if(X.nY){for(var Z=0;Z
      '+F(am),S||null);else if(am.length==fv.length-dX){eN=N.lang.OperationCompletedErrors+' '+N.lang[P?'MovedFilesNumber':'CopiedFilesNumber'].replace('%s',dX)+'

      ';eN+=N.lang[P?'MoveFailedList':'CopyFailedList'].replace('%s',F(am));N.msgDialog('',eN,S||null);}var ar=E(N,fv,O.fileCallback);gs&&N.cg.openDialog('moveFileExists',function(at){var au=arguments.callee;eN='';if(am.length)eN+=N.lang.OperationCompletedErrors+' ';eN+=dX?N.lang[P?'MovedFilesNumber':'CopiedFilesNumber'].replace('%s',dX):'';if(am.length)eN+=(eN?'

      ':'')+N.lang[P?'MoveFailedList':'CopyFailedList'].replace('%s',F(am));eN&&(eN+='

      ');var av=N.lang.ErrorMsg.FileExists;av=av.replace('%s',eS[0]);eN+=''+av+'';at.show();at.getContentElement('tab1','msg').getElement().setHtml(eN);at.on('ok',function aC(aw){aw.removeListener();var ax=at.getContentElement('tab1','option').getValue(),ay=at.getContentElement('tab1','remember').getValue(),az;switch(ax){case 'autorename':case 'overwrite':az=[ax];break;case 'skip':if(!ay){eS.shift();eS.length&&setTimeout(function(){N.cg.openDialog('moveFileExists',au);},0);}else S&&S();return;break;}if(ay)for(var aA=1,aB=eS.length;aA'+N.lang[P?'MovedFilesNumber':'CopiedFilesNumber'].replace('%s',ar);N.msgDialog('',eN,S||null);}else S&&S();},O.destination.type,O.destination);};function E(N,O,P){var Q=0,R;for(var S=0,T=O.length;S
    • '+N.join('
    • ')+'
    • ';};a.aL.File=function(N,O,P,Q,R,S){var T=this;T.index=null;T.app=null;T.name=N;T.ext=N.match(t.fX)[0];T.nameL=N.toLowerCase();T.size=O;T.thumb=P;T.date=Q;T.dateF=R;T.folder=S;T.isDeleted=false;};a.aL.File.prototype={rename:function(N){G(N,this.app);var O=this;if(O.name==N){O.app.oW('afterCommandExecDefered',{name:'RenameFile',file:O});return;}O.app.oW('requestProcessingFile',{file:O});O.app.connector.sendCommandPost('RenameFile',{fileName:O.name,newFileName:N},null,function(P){if(P.checkError()){O.app.oW('requestRepaintFile',{file:O});return;}O.name=P.selectSingleNode('Connector/RenamedFile/@newName').value;O.nameL=O.name.toLowerCase();O.ext=O.name.match(t.fX)[0];O.thumb=0;O.app.oW('afterCommandExecDefered',{name:'RenameFile',file:O});},O.folder.type,O.folder);},remove:function(){H(this.app,[this]);},select:function(N){this.app.oW('requestSelectFile',{file:this,multiple:N});},deselect:function(N){N?this.select(true):this.app.oW('requestSelectFile');},'toString':function(){return this.name;},isImage:function(){return this.app.rQ.rO.test(this.ext);},isSameFile:function(N){var O=this;return(O.name==N.name||O.index==N.index)&&O.folder.getPath()==N.folder.getPath()&&O.folder.type==N.folder.type;},getUrl:function(){return this.folder.getUrl()+encodeURIComponent(this.name);},rowNode:function(){var N=this;if(!N.je)N.je=N.app.document.getById('r'+N.index);return N.je;},getThumbnailUrl:function(N){var U=this;var O=U.thumb,P=U.name,Q=U.app,R=P.match(Q.rQ.jf);if(R&&(R=R[0])){if(Q.config.thumbsEnabled&&Q.rQ.rO.test(R)){var S=encodeURIComponent(U.date+'-'+U.size);if(O&&Q.config.thumbsDirectAccess)return Q.config.thumbsUrl+U.folder.type+U.folder.getPath()+encodeURIComponent(P)+(!N?'':'?hash='+Q.getResourceType(U.folder.type).hash+'&fileHash='+S);var T={FileName:P};if(N)T.fileHash=S;return Q.connector.composeUrl('Thumbnail',T,U.folder.type,U.folder);}if(Q.config.useNativeIcons&&h.gecko)return 'moz-icon://.'+R.toLowerCase()+'?size=32';if(Q.rQ.jh.test(R))return Q.fh+'images/icons/32/'+R.toLowerCase()+'.gif';}return Q.fh+'images/icons/32/default.icon.gif';},filenameNode:function(){var O=this;if(O.ht===undefined){var N=O.rowNode();if(N)if(N.is('a'))O.ht=M(L(N.$.childNodes,'h5'));else O.ht=M(L(O.aNode().$.childNodes,'h5'));}return O.ht;},aNode:function(){var P=this;if(P.dM===undefined){var N=P.rowNode();if(N)if(N.is('a'))P.dM=N;else{var O=L(N.$.childNodes,'td',1);P.dM=M(L(O.childNodes,'a'));}}return P.dM;},focusNode:function(){return this.aNode();},releaseDomNodes:function(){this.je=undefined;this.dM=undefined;this.ht=undefined;},focus:function(N,O){!O&&this.select(N);var P=this.focusNode();P.setAttribute('tabindex',0);P.focus();},blur:function(){this.aNode().setAttribute('tabindex',-1);}};function G(N,O){if(!N||N.length===0)throw new a.dU('name_empty',O.lang.ErrorMsg.FileEmpty);if(t.iz.test(N))throw new a.dU('name_invalid_chars',O.lang.ErrorMsg.FileInvChar);return true;};function H(N,O){var P={},Q=O[0].folder,R=Q.getPath();for(var S=0,T=O.length;S','');if(this.icon!==false)s.push('');s.push('',this.label,'');if(this.vZ)s.push('');s.push('','');if(this.onRender)this.onRender();return v;},bR:function(r){var w=this;if(w._.bu==r)return false;w._.bu=r;var s=w._.app.document.getById(w._.id);if(s){s.bR(r);r==a.aY?s.setAttribute('aria-disabled',true):s.removeAttribute('aria-disabled');r==a.eV?s.setAttribute('aria-pressed',true):s.removeAttribute('aria-pressed');var t=w.title,u=w._.app.lang.common.unavailable,v=s.getChild(1);if(r==a.aY)t=u.replace('%1',w.title);v.setHtml(t);return true;}else return false;}};p.button._={instances:[],keydown:function(r,s){var t=p.button._.instances[r];if(t.onkey){s=new j.event(s);return t.onkey(t,s.db())!==false;}},focus:function(r,s){var t=p.button._.instances[r],u;if(t.onfocus)u=t.onfocus(t,new j.event(s))!==false;if(h.gecko&&h.version<10900)s.preventBubble();return u;}};CKFinder._.uiButtonKeydown=p.button._.keydown;CKFinder._.uiButtonFocus=p.button._.focus;p.prototype.qW=function(r,s){this.add(r,a.UI_BUTTON,s);};(function(){o.add('container',{bM:[],bz:function(r){var s=this;r.on('themeAvailable',function(){s.pV(r);});},pV:function(r){var s=r.config.height,t=r.config.tabIndex||r.element.getAttribute('tabindex')||0;if(!isNaN(s)){s=Math.max(s,200);s+='px';}var u='',v=r.config.width;if(v){if(!isNaN(v))v+='px';u+='width: '+v+';';}var w=r.config.className?'class="'+r.config.className+'"':'',x=h.isCustomDomain(),y='document.open();'+(x?'document.domain="'+window.document.domain+'";':'')+'document.close();',z=m.kE('',r.element.getDocument());function A(C){C&&C.removeListener();var D=z.getFrameDocument().$;D.open();if(x)D.domain=document.domain;r.document=new l(D);r.theme.dQ(r);D.close();(D.defaultView||D.parentWindow).CKFinder=CKFinder;a.skins.load(r,'application',function(){var F=r.dJ;if(F)F.oA(r.document);});if(!z.isVisible()&&i&&h.version>=8)var E=setInterval(function(){if(z.isVisible()){r.layout.ea(true);E=clearInterval(E);}},500);};if(i&&h.version>=9&&r.cg.inPopup)r.element.getDocument().getWindow().$.ckfinder=function(){r.element.getDocument().getWindow().$.ckfinder=undefined;A();};z.on('load',A);var B=r.lang.appTitle.replace('%1',r.name);if(h.gecko){z.on('load',function(C){C.removeListener();});r.element.setAttributes({role:'region',title:B});z.setAttributes({role:'region',title:' '});}else if(h.webkit){z.setAttribute('title',B);z.setAttribute('name',B);}else if(i)z.appendTo(r.element);if(!i)r.element.append(z);r.container=z;}});a.application.prototype.focus=function(){var t=this;if(t._.oO&&t._.oO.length>1){t.oW('requestSelectFile');for(var r=0,s=t._.oO.length;r
      ':''+''+'';a.log('[THEME] DOM flush using document.write');r.document.$.write(C);function D(){if(h.ie6Compat)r.layout.oG=r.document.getWindow().eR();};r.cr('themeLoaded');r.cr('uiReady',function(){D();r.cr('appReady',function(){D();if(h.ie8){var E=r.document.$,F;if(E.documentMode)F=E.documentMode;else{F=5;if(E.compatMode)if(E.compatMode=='CSS1Compat')F=7;}if(F<8){var G='Forced IE compatibility mode! CKFinder may not look as intended.',H=r.plugins.tools;H.showTool(H.addTool(G));}}if(h.ie6Compat)r.document.getWindow().on('resize',D);r.document.getWindow().on('resize',function(){r.layout.ea.call(r.layout);});var I;function J(){I=I||r.document.getHead().eG('link').getItem(0);var K=0;if(I)try{if(I.$.sheet&&I.$.sheet.cssRules.length>0)K=1;else if(I.$.styleSheet&&I.$.styleSheet.cssText.length>0)K=1;else if(I.$.innerHTML&&I.$.innerHTML.length>0)K=1;}catch(L){}if(!K){window.setTimeout(J,250);return;}if(h.ie6Compat){D();r.layout.ea();setTimeout(function(){r.layout.ea();},500);}else{r.layout.ea(true);setTimeout(function(){r.document.getById('ckfinder').removeStyle('visibility');});}return undefined;};J();});});},pu:function(r){var s=k.getNextNumber(),t=m.kE(['
      X
      ',i?'':'','
      '].join('').replace(/#/g,'_'+s).replace(/%/g,'cke_dialog_'),a.document),u=t.getChild([0,0,0,0,0]),v=u.getChild(0),w=u.getChild(1);v.unselectable();w.unselectable();return{element:t,bO:{dialog:t.getChild(0),title:v,close:w,tabs:u.getChild(2),contents:u.getChild([3,0,0,0]),footer:u.getChild(4)}};},destroy:function(r){var s=r.container,t=r.ia;s&&s.remove();for(var u=0;t&&u0)b=' class="'+b+'"';var c=d.Id;if(c&&c.length>0)c=' id="'+c+'"';return '';},Popup:function(b,c){b=b||'80%';c=c||'70%';if(typeof b=='string'&&b.length>1&&b.substr(b.length-1,1)=='%')b=parseInt(window.screen.width*parseInt(b,10)/100,10);if(typeof c=='string'&&c.length>1&&c.substr(c.length-1,1)=='%')c=parseInt(window.screen.height*parseInt(c,10)/100,10);if(b<200)b=200;if(c<200)c=200;var d=parseInt((window.screen.height-c)/2,10),e=parseInt((window.screen.width-b)/2,10),f='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,width='+b+',height='+c+',top='+d+',left='+e,g=window.open('','CKFinderPopup',f,true);if(!g)return false;var h=this._BuildUrl().replace(/&/g,'&');try{g.moveTo(e,d);g.resizeTo(b,c);g.focus();g.location.href=h;}catch(i){g=window.open(h,'CKFinderPopup',f,true);}return true;},_BuildUrl:function(b){var e=this;b=b||e.BasePath;var c='';if(!b||b.length===0)b=CKFinder.DEFAULT_BASEPATH;if(b.substr(b.length-1,1)!='/')b+='/';b+='ckfinder.html';var d;if(e.SelectFunction){d=e.SelectFunction;if(typeof d=='function')d=d.toString().match(/function ([^(]+)/)[1];c+='?action=js&func='+d;}if(e.Skin){c+=c?'&':'?';c+='skin='+encodeURIComponent(e.Skin);}if(e.SelectFunctionData){c+=c?'&':'?';c+='data='+encodeURIComponent(e.SelectFunctionData);}if(e.ResourceType){c+=c?'&':'?';c+='type='+encodeURIComponent(e.ResourceType);}if(e.DisableThumbnailSelection){c+=c?'&':'?';c+='dts=1';}else if(e.SelectThumbnailFunction||e.SelectFunction){d=e.SelectThumbnailFunction||e.SelectFunction;if(typeof d=='function')d=d.toString().match(/function ([^(]+)/)[1]; +c+=c?'&':'?';c+='thumbFunc='+d;if(e.SelectThumbnailFunctionData)c+='&tdata='+encodeURIComponent(e.SelectThumbnailFunctionData);else if(!e.SelectThumbnailFunction&&e.SelectFunctionData)c+='&tdata='+encodeURIComponent(e.SelectFunctionData);}if(e.StartupPath){c+=c?'&':'?';c+='start='+encodeURIComponent(e.StartupPath+(e.StartupFolderExpanded?':1':':0'));}if(e.RememberLastFolder!==undefined&&!e.RememberLastFolder){c+=c?'&':'?';c+='rlf=0';}if(e.Id){c+=c?'&':'?';c+='id='+encodeURIComponent(e.Id);}return b+c;}};CKFinder.Create=function(b,c,d,e){var f;if(b!==null&&typeof b=='object'){f=new CKFinder();for(var g in b)f[g]=b[g];}else f=new CKFinder(b,c,d,e);f.Create();};CKFinder.Popup=function(b,c,d,e){var f,g;if(b!==null&&typeof b=='object'){g=a(b);f=new CKFinder();for(var h in b)f[h]=b[h];}else f=new CKFinder(b,c,d,e);f.Popup(c,d);};CKFinder.SetupFCKeditor=function(b,c,d,e){var f,g;if(c!==null&&typeof c=='object'){g=a(c);f=new CKFinder();for(var h in c){f[h]=c[h];if(h=='Width'){var i=f[h]||800;if(typeof i=='string'&&i.length>1&&i.substr(i.length-1,1)=='%')i=parseInt(window.screen.width*parseInt(i,10)/100,10);b.Config.LinkBrowserWindowWidth=i;b.Config.ImageBrowserWindowWidth=i;b.Config.FlashBrowserWindowWidth=i;}else if(h=='Height'){var j=f[h]||600;if(typeof j=='string'&&j.length>1&&j.substr(j.length-1,1)=='%')j=parseInt(window.screen.height*parseInt(j,10)/100,10);b.Config.LinkBrowserWindowHeight=j;b.Config.ImageBrowserWindowHeight=j;b.Config.FlashBrowserWindowHeight=j;}}}else f=new CKFinder(c);var k=f.BasePath;if(k.substr(0,1)!='/'&&k.indexOf('://')==-1)k=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1)+k;k=f._BuildUrl(k);var l=k.indexOf('?')!==-1?'&':'?';if(g){k+=l+'configId='+g;l='&';}b.Config.LinkBrowserURL=k;b.Config.ImageBrowserURL=k+l+'type='+(d||'Images');b.Config.FlashBrowserURL=k+l+'type='+(e||'Flash');var m=k.substring(0,1+k.lastIndexOf('/'));b.Config.LinkUploadURL=m+'core/connector/'+CKFinder.ConnectorLanguage+'/connector.'+CKFinder.ConnectorLanguage+'?command=QuickUpload&type=Files';b.Config.ImageUploadURL=m+'core/connector/'+CKFinder.ConnectorLanguage+'/connector.'+CKFinder.ConnectorLanguage+'?command=QuickUpload&type='+(d||'Images');b.Config.FlashUploadURL=m+'core/connector/'+CKFinder.ConnectorLanguage+'/connector.'+CKFinder.ConnectorLanguage+'?command=QuickUpload&type='+(e||'Flash');};CKFinder.SetupCKEditor=function(b,c,d,e){if(b===null){for(var f in CKEDITOR.instances)CKFinder.SetupCKEditor(CKEDITOR.instances[f],c,d,e); +CKEDITOR.on('instanceCreated',function(o){CKFinder.SetupCKEditor(o.editor,c,d,e);});return;}var g,h;if(c!==null&&typeof c=='object'){h=a(c);g=new CKFinder();for(var i in c){g[i]=c[i];if(i=='Width'){var j=g[i]||800;if(typeof j=='string'&&j.length>1&&j.substr(j.length-1,1)=='%')j=parseInt(window.screen.width*parseInt(j,10)/100,10);b.config.filebrowserWindowWidth=j;}else if(i=='Height'){var k=g[i]||600;if(typeof k=='string'&&k.length>1&&k.substr(k.length-1,1)=='%')k=parseInt(window.screen.height*parseInt(k,10)/100,10);b.config.filebrowserWindowHeight=k;}}}else g=new CKFinder(c);var l=g.BasePath;if(l.substr(0,1)!='/'&&l.indexOf('://')==-1)l=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1)+l;l=g._BuildUrl(l);var m=l.indexOf('?')!==-1?'&':'?';if(h){l+=m+'configId='+h;m='&';}b.config.filebrowserBrowseUrl=l;b.config.filebrowserImageBrowseUrl=l+m+'type='+(d||'Images');b.config.filebrowserFlashBrowseUrl=l+m+'type='+(e||'Flash');var n=l.substring(0,1+l.lastIndexOf('/'));b.config.filebrowserUploadUrl=n+'core/connector/'+CKFinder.ConnectorLanguage+'/connector.'+CKFinder.ConnectorLanguage+'?command=QuickUpload&type=Files';b.config.filebrowserImageUploadUrl=n+'core/connector/'+CKFinder.ConnectorLanguage+'/connector.'+CKFinder.ConnectorLanguage+'?command=QuickUpload&type='+(d||'Images');b.config.filebrowserFlashUploadUrl=n+'core/connector/'+CKFinder.ConnectorLanguage+'/connector.'+CKFinder.ConnectorLanguage+'?command=QuickUpload&type='+(e||'Flash');};})();})(); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/config.js b/php/pic_switch_demo/static/ckeditor/ckfinder/config.js new file mode 100644 index 0000000..c10ed27 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/config.js @@ -0,0 +1,17 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see license.txt or http://cksource.com/ckfinder/license +*/ + +CKFinder.customConfig = function( config ) +{ + // Define changes to default configuration here. + // For the list of available options, check: + // http://docs.cksource.com/ckfinder_2.x_api/symbols/CKFinder.config.html + + // Sample configuration options: + // config.uiColor = '#BDE31E'; + // config.language = 'fr'; + // config.removePlugins = 'basket'; + +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/config.php b/php/pic_switch_demo/static/ckeditor/ckfinder/config.php new file mode 100644 index 0000000..0c1144e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/config.php @@ -0,0 +1,341 @@ + $baseUrl, + 'directory' => $baseDir.'_tumb', + 'enabled' => true, + 'directAccess' => false, + 'maxWidth' => 100, + 'maxHeight' => 100, + 'bmpSupported' => false, + 'quality' => 80); + +/* +Set the maximum size of uploaded images. If an uploaded image is larger, it +gets scaled down proportionally. Set to 0 to disable this feature. +*/ +$config['Images'] = Array( + 'maxWidth' => 1600, + 'maxHeight' => 1200, + 'quality' => 90); + +/* +RoleSessionVar : the session variable name that CKFinder must use to retrieve +the "role" of the current user. The "role", can be used in the "AccessControl" +settings (bellow in this page). + +To be able to use this feature, you must initialize the session data by +uncommenting the following "session_start()" call. +*/ +$config['RoleSessionVar'] = 'CKFinder_UserRole'; +//session_start(); + +/* +AccessControl : used to restrict access or features to specific folders. + +Many "AccessControl" entries can be added. All attributes are optional. +Subfolders inherit their default settings from their parents' definitions. + + - The "role" attribute accepts the special '*' value, which means + "everybody". + - The "resourceType" attribute accepts the special value '*', which + means "all resource types". +*/ + +$config['AccessControl'][] = Array( + 'role' => '*', + 'resourceType' => '*', + 'folder' => '/', + + 'folderView' => true, + 'folderCreate' => true, + 'folderRename' => true, + 'folderDelete' => true, + + 'fileView' => true, + 'fileUpload' => true, + 'fileRename' => true, + 'fileDelete' => true); + +/* +For example, if you want to restrict the upload, rename or delete of files in +the "Logos" folder of the resource type "Images", you may uncomment the +following definition, leaving the above one: + +$config['AccessControl'][] = Array( + 'role' => '*', + 'resourceType' => 'Images', + 'folder' => '/Logos', + + 'folderView' => true, + 'folderCreate' => true, + 'folderRename' => true, + 'folderDelete' => true, + + 'fileView' => true, + 'fileUpload' => false, + 'fileRename' => false, + 'fileDelete' => false); +*/ + +/* +ResourceType : defines the "resource types" handled in CKFinder. A resource +type is nothing more than a way to group files under different paths, each one +having different configuration settings. + +Each resource type name must be unique. + +When loading CKFinder, the "type" querystring parameter can be used to display +a specific type only. If "type" is omitted in the URL, the +"DefaultResourceTypes" settings is used (may contain the resource type names +separated by a comma). If left empty, all types are loaded. + +maxSize is defined in bytes, but shorthand notation may be also used. +Available options are: G, M, K (case insensitive). +1M equals 1048576 bytes (one Megabyte), 1K equals 1024 bytes (one Kilobyte), 1G equals one Gigabyte. +Example: 'maxSize' => "8M", + +============================================================================== +ATTENTION: Flash files with `swf' extension, just like HTML files, can be used +to execute JavaScript code and to e.g. perform an XSS attack. Grant permission +to upload `.swf` files only if you understand and can accept this risk. +============================================================================== +*/ +$config['DefaultResourceTypes'] = ''; + +$config['ResourceType'][] = Array( + 'name' => 'Files', // Single quotes not allowed + 'url' => $baseUrl . 'files', + 'directory' => $baseDir . 'files', + 'maxSize' => 0, + 'allowedExtensions' => '7z,aiff,asf,avi,bmp,csv,doc,docx,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pptx,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xlsx,zip', + 'deniedExtensions' => ''); + +$config['ResourceType'][] = Array( + 'name' => 'Images', + 'url' => $baseUrl . 'images', + 'directory' => $baseDir . 'images', + 'maxSize' => 0, + 'allowedExtensions' => 'bmp,gif,jpeg,jpg,png', + 'deniedExtensions' => ''); + +$config['ResourceType'][] = Array( + 'name' => 'Flash', + 'url' => $baseUrl . 'flash', + 'directory' => $baseDir . 'flash', + 'maxSize' => 0, + 'allowedExtensions' => 'swf,flv', + 'deniedExtensions' => ''); + +/* + Due to security issues with Apache modules, it is recommended to leave the + following setting enabled. + + How does it work? Suppose the following: + + - If "php" is on the denied extensions list, a file named foo.php cannot be + uploaded. + - If "rar" (or any other) extension is allowed, one can upload a file named + foo.rar. + - The file foo.php.rar has "rar" extension so, in theory, it can be also + uploaded. + +In some conditions Apache can treat the foo.php.rar file just like any PHP +script and execute it. + +If CheckDoubleExtension is enabled, each part of the file name after a dot is +checked, not only the last part. In this way, uploading foo.php.rar would be +denied, because "php" is on the denied extensions list. +*/ +$config['CheckDoubleExtension'] = true; + +/* +Increases the security on an IIS web server. +If enabled, CKFinder will disallow creating folders and uploading files whose names contain characters +that are not safe under an IIS web server. +*/ +$config['DisallowUnsafeCharacters'] = false; + +/* +If you have iconv enabled (visit http://php.net/iconv for more information), +you can use this directive to specify the encoding of file names in your +system. Acceptable values can be found at: + http://www.gnu.org/software/libiconv/ + +Examples: + $config['FilesystemEncoding'] = 'CP1250'; + $config['FilesystemEncoding'] = 'ISO-8859-2'; +*/ +$config['FilesystemEncoding'] = 'UTF-8'; + +/* +Perform additional checks for image files +if set to true, validate image size +*/ +$config['SecureImageUploads'] = true; + +/* +Indicates that the file size (maxSize) for images must be checked only +after scaling them. Otherwise, it is checked right after uploading. +*/ +$config['CheckSizeAfterScaling'] = true; + +/* +For security, HTML is allowed in the first Kb of data for files having the +following extensions only. +*/ +$config['HtmlExtensions'] = array('html', 'htm', 'xml', 'js'); + +/* +Folders to not display in CKFinder, no matter their location. +No paths are accepted, only the folder name. +The * and ? wildcards are accepted. +".*" disallows the creation of folders starting with a dot character. +*/ +$config['HideFolders'] = Array(".*", "CVS"); + +/* +Files to not display in CKFinder, no matter their location. +No paths are accepted, only the file name, including extension. +The * and ? wildcards are accepted. +*/ +$config['HideFiles'] = Array(".*"); + +/* +After file is uploaded, sometimes it is required to change its permissions +so that it was possible to access it at the later time. +If possible, it is recommended to set more restrictive permissions, like 0755. +Set to 0 to disable this feature. +Note: not needed on Windows-based servers. +*/ +$config['ChmodFiles'] = 0777 ; + +/* +See comments above. +Used when creating folders that does not exist. +*/ +$config['ChmodFolders'] = 0777 ; + +/* +Force ASCII names for files and folders. +If enabled, characters with diactric marks, like å, ä, ö, ć, č, đ, š +will be automatically converted to ASCII letters. +*/ +$config['ForceAscii'] = false; + +/* +Send files using X-Sendfile module +Mod X-Sendfile (or similar) is avalible on Apache2, Nginx, Cherokee, Lighttpd + +Enabling X-Sendfile option can potentially cause security issue. + - server path to the file may be send to the browser with X-Sendfile header + - if server is not configured properly files will be send with 0 length + +For more complex configuration options visit our Developer's Guide + http://docs.cksource.com/CKFinder_2.x/Developers_Guide/PHP +*/ +$config['XSendfile'] = false; + + +include_once "plugins/imageresize/plugin.php"; +include_once "plugins/fileeditor/plugin.php"; +include_once "plugins/zip/plugin.php"; + +$config['plugin_imageresize']['smallThumb'] = '90x90'; +$config['plugin_imageresize']['mediumThumb'] = '120x120'; +$config['plugin_imageresize']['largeThumb'] = '180x180'; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/ckfinder_php5.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/ckfinder_php5.php new file mode 100644 index 0000000..539b47c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/ckfinder_php5.php @@ -0,0 +1,231 @@ +BasePath = $basePath ; + $this->Width = $width ; + $this->Height = $height ; + $this->SelectFunction = $selectFunction ; + $this->SelectThumbnailFunction = $selectFunction ; + } + + // Renders CKFinder in the current page. + public function Create() + { + echo $this->CreateHtml() ; + } + + // Gets the HTML needed to create a CKFinder instance. + public function CreateHtml() + { + $className = $this->ClassName ; + if ( !empty( $className ) ) + $className = ' class="' . $className . '"' ; + + $id = $this->Id ; + if ( !empty( $id ) ) + $id = ' id="' . $id . '"' ; + + return '' ; + } + + private function _BuildUrl( $url = "" ) + { + if ( !$url ) + $url = $this->BasePath ; + + $qs = "" ; + + if ( empty( $url ) ) + $url = CKFINDER_DEFAULT_BASEPATH ; + + if ( $url[ strlen( $url ) - 1 ] != '/' ) + $url = $url . '/' ; + + $url .= 'ckfinder.html' ; + + if ( !empty( $this->SelectFunction ) ) + $qs .= '?action=js&func=' . $this->SelectFunction ; + + if ( !empty( $this->SelectFunctionData ) ) + { + $qs .= $qs ? "&" : "?" ; + $qs .= 'data=' . rawurlencode($this->SelectFunctionData) ; + } + + if ( $this->DisableThumbnailSelection ) + { + $qs .= $qs ? "&" : "?" ; + $qs .= "dts=1" ; + } + else if ( !empty( $this->SelectThumbnailFunction ) || !empty( $this->SelectFunction ) ) + { + $qs .= $qs ? "&" : "?" ; + $qs .= 'thumbFunc=' . ( !empty( $this->SelectThumbnailFunction ) ? $this->SelectThumbnailFunction : $this->SelectFunction ) ; + + if ( !empty( $this->SelectThumbnailFunctionData ) ) + $qs .= '&tdata=' . rawurlencode( $this->SelectThumbnailFunctionData ) ; + else if ( empty( $this->SelectThumbnailFunction ) && !empty( $this->SelectFunctionData ) ) + $qs .= '&tdata=' . rawurlencode( $this->SelectFunctionData ) ; + } + + if ( !empty( $this->StartupPath ) ) + { + $qs .= ( $qs ? "&" : "?" ) ; + $qs .= "start=" . urlencode( $this->StartupPath . ( $this->StartupFolderExpanded ? ':1' : ':0' ) ) ; + } + + if ( !empty( $this->ResourceType ) ) + { + $qs .= ( $qs ? "&" : "?" ) ; + $qs .= "type=" . urlencode( $this->ResourceType ) ; + } + + if ( !$this->RememberLastFolder ) + { + $qs .= ( $qs ? "&" : "?" ) ; + $qs .= "rlf=0" ; + } + + if ( !empty( $this->Id ) ) + { + $qs .= ( $qs ? "&" : "?" ) ; + $qs .= "id=" . urlencode( $this->Id ) ; + } + + return $url . $qs ; + } + + // Static "Create". + public static function CreateStatic( $basePath = CKFINDER_DEFAULT_BASEPATH, $width = '100%', $height = 400, $selectFunction = null ) + { + $finder = new CKFinder( $basePath, $width, $height, $selectFunction ) ; + $finder->Create() ; + } + + // Static "SetupFCKeditor". + public static function SetupFCKeditor( &$editorObj, $basePath = CKFINDER_DEFAULT_BASEPATH, $imageType = null, $flashType = null ) + { + if ( empty( $basePath ) ) + $basePath = CKFINDER_DEFAULT_BASEPATH ; + + $ckfinder = new CKFinder( $basePath ) ; + $ckfinder->SetupFCKeditorObject( $editorObj, $imageType, $flashType ); + } + + // Non-static method of attaching CKFinder to FCKeditor + public function SetupFCKeditorObject( &$editorObj, $imageType = null, $flashType = null ) + { + $url = $this->BasePath ; + + // If it is a path relative to the current page. + if ( isset($url[0]) && $url[0] != '/' && strpos($url, "://") === false ) + { + $url = substr( $_SERVER[ 'REQUEST_URI' ], 0, strrpos( $_SERVER[ 'REQUEST_URI' ], '/' ) + 1 ) . $url ; + } + + $url = $this->_BuildUrl( $url ) ; + $qs = ( strpos($url, "?") !== false ) ? "&" : "?" ; + + if ( $this->Width !== '100%' && is_numeric( str_ireplace( "px", "", $this->Width ) ) ) + { + $width = intval( $this->Width ); + $editorObj->Config['LinkBrowserWindowWidth'] = $width ; + $editorObj->Config['ImageBrowserWindowWidth'] = $width ; + $editorObj->Config['FlashBrowserWindowWidth'] = $width ; + } + if ( $this->Height !== 400 && is_numeric( str_ireplace( "px", "", $this->Height ) ) ) + { + $height = intval( $this->Height ); + $editorObj->Config['LinkBrowserWindowHeight'] = $height ; + $editorObj->Config['ImageBrowserWindowHeight'] = $height ; + $editorObj->Config['FlashBrowserWindowHeight'] = $height ; + } + + $editorObj->Config['LinkBrowserURL'] = $url ; + $editorObj->Config['ImageBrowserURL'] = $url . $qs . 'type=' . ( empty( $imageType ) ? 'Images' : $imageType ) ; + $editorObj->Config['FlashBrowserURL'] = $url . $qs . 'type=' . ( empty( $flashType ) ? 'Flash' : $flashType ) ; + + $dir = substr( $url, 0, strrpos( $url, "/" ) + 1 ) ; + $editorObj->Config['LinkUploadURL'] = $dir . urlencode( 'core/connector/php/connector.php?command=QuickUpload&type=Files' ) ; + $editorObj->Config['ImageUploadURL'] = $dir . urlencode( 'core/connector/php/connector.php?command=QuickUpload&type=') . ( empty( $imageType ) ? 'Images' : $imageType ) ; + $editorObj->Config['FlashUploadURL'] = $dir . urlencode( 'core/connector/php/connector.php?command=QuickUpload&type=') . ( empty( $flashType ) ? 'Flash' : $flashType ) ; + } + + // Static "SetupCKEditor". + public static function SetupCKEditor( &$editorObj, $basePath = CKFINDER_DEFAULT_BASEPATH, $imageType = null, $flashType = null ) + { + if ( empty( $basePath ) ) + $basePath = CKFINDER_DEFAULT_BASEPATH ; + + $ckfinder = new CKFinder( $basePath ) ; + $ckfinder->SetupCKEditorObject( $editorObj, $imageType, $flashType ); + } + + // Non-static method of attaching CKFinder to CKEditor + public function SetupCKEditorObject( &$editorObj, $imageType = null, $flashType = null ) + { + $url = $this->BasePath ; + + // If it is a path relative to the current page. + if ( isset($url[0]) && $url[0] != '/' && strpos($url, "://") === false ) + { + $url = substr( $_SERVER[ 'REQUEST_URI' ], 0, strrpos( $_SERVER[ 'REQUEST_URI' ], '/' ) + 1 ) . $url ; + } + + $url = $this->_BuildUrl( $url ) ; + $qs = ( strpos($url, "?") !== false ) ? "&" : "?" ; + + if ( $this->Width !== '100%' && is_numeric( str_ireplace( "px", "", $this->Width ) ) ) + { + $width = intval( $this->Width ); + $editorObj->config['filebrowserWindowWidth'] = $width ; + } + if ( $this->Height !== 400 && is_numeric( str_ireplace( "px", "", $this->Height ) ) ) + { + $height = intval( $this->Height ); + $editorObj->config['filebrowserWindowHeight'] = $height ; + } + + $editorObj->config['filebrowserBrowseUrl'] = $url ; + $editorObj->config['filebrowserImageBrowseUrl'] = $url . $qs . 'type=' . ( empty( $imageType ) ? 'Images' : $imageType ) ; + $editorObj->config['filebrowserFlashBrowseUrl'] = $url . $qs . 'type=' . ( empty( $flashType ) ? 'Flash' : $flashType ) ; + + $dir = substr( $url, 0, strrpos( $url, "/" ) + 1 ) ; + $editorObj->config['filebrowserUploadUrl'] = $dir . 'core/connector/php/connector.php?command=QuickUpload&type=Files' ; + $editorObj->config['filebrowserImageUploadUrl'] = $dir . 'core/connector/php/connector.php?command=QuickUpload&type=' . ( empty( $imageType ) ? 'Images' : $imageType ) ; + $editorObj->config['filebrowserFlashUploadUrl'] = $dir . 'core/connector/php/connector.php?command=QuickUpload&type=' . ( empty( $flashType ) ? 'Flash' : $flashType ) ; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/connector.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/connector.php new file mode 100644 index 0000000..89e4acb --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/connector.php @@ -0,0 +1,106 @@ +getDocumentRootPath() . $baseUrl; +} + +$utilsSecurity =& CKFinder_Connector_Core_Factory::getInstance("Utils_Security"); +$utilsSecurity->getRidOfMagicQuotes(); + +/** + * $config must be initialised + */ +$config = array(); +$config['Hooks'] = array(); +$config['Plugins'] = array(); + +/** + * Fix cookies bug in Flash. + */ +if (!empty($_GET['command']) && $_GET['command'] == 'FileUpload' && !empty($_POST)) { + foreach ($_POST as $key => $val) { + if (strpos($key, "ckfcookie_") === 0) + $_COOKIE[str_replace("ckfcookie_", "", $key)] = $val; + } +} + +/** + * read config file + */ +require_once CKFINDER_CONNECTOR_CONFIG_FILE_PATH; + +CKFinder_Connector_Core_Factory::initFactory(); +$connector =& CKFinder_Connector_Core_Factory::getInstance("Core_Connector"); + +if(isset($_GET['command'])) { + $connector->executeCommand($_GET['command']); +} +else { + $connector->handleInvalidCommand(); +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/constants.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/constants.php new file mode 100644 index 0000000..0932496 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/constants.php @@ -0,0 +1,76 @@ +=')) { + define('CKFINDER_CONNECTOR_PHP_MODE',6); +} +else { + define('CKFINDER_CONNECTOR_PHP_MODE',5); +} + +define('CKFINDER_CONNECTOR_LIB_DIR',$basedir . '/php5'); + +define('CKFINDER_CHARS','123456789ABCDEFGHJKLMNPQRSTUVWXYZ'); +define('CKFINDER_REGEX_IMAGES_EXT','/\.(jpg|gif|png|bmp|jpeg)$/i'); +define('CKFINDER_REGEX_INVALID_PATH',",(/\.)|[[:cntrl:]]|(//)|(\\\\)|([\\:\*\?\"\<\>\|]),"); +define('CKFINDER_REGEX_INVALID_FILE',",[[:cntrl:]]|[/\\:\*\?\"\<\>\|],"); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/img/info/article/201412/Images/art1213023158806.jpg b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/img/info/article/201412/Images/art1213023158806.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc9a67d051ad91f225169bbb9289597e46b655da GIT binary patch literal 1912 zcmbW!cU03^76F+o z00aU6kf?xtA)sqwZ)(J_wLeMl_N4g*UG^q~t18n8bj1EJU;@A(P#6>fgF#_%I7}RYL?9$25a@$al1MCCRu+rKU~uvz zJnmaXIShuNL{L0>j6$V+gQwAHWIBmVA%A@Y1c$>B;s|L3LYj=j;K+YE`!4{LIA8#H zf^m~AR2P6g-{TD7SfjA%kFQ@yXjpheBs=Q+Tet7TC)`a;`|*DIgN%Pf-utfJCu>WzPL@qH11PpQ~zDvi}bj_m^b*P|S7a~E5!ndCyVLKNFv74j6P^?9A{l8|2sGf#`5R7td3z0(r%2kJKq)g_w+rdRi}hZ2<`#{<-R z3*A_Yc1Gok!E4+aDX$J;m>12s&Bp1yQVh#x$qDI}7?Gk+ojJ^S)~aMH`~Y^4wJlQi zc>9|R%&%p5wYNNhCvYfd%9~oJEHNzfOC4`SIo25o?5QeswmM4=Yx*T)=JM3Jo=2)S z;!;JnIxhLNy<#n4e=aimdT5i&2L7SkB$Gb8Yv&466`0CR&+0*y<_vGE6;_RYmxJT_ z2d}n0Ulex}@=D51UK%M!{G4q_0ta+3mM^MlhpY$$t=?m%(l1)@s)|3{2x?Ed*{-*q zIPr3NTO*4%?gs6y!ZKY48Ijp4K`v2jKllQ5{0ouj&5{+YxM&6X$~;ZBz$R*SWCrI* z=itwH+C^L(3+SL@i4zA^C;|3R&HKRk(=g=wjEg$mVfnL8*acoX*PWRlY}oxQAaC^OT(B0b86>fDnVP0e7{Kgm7Xh`mJh z98|=&USP{iTQufNet2JCP@yy0kyBeObL~xxB`3qAXL|5#EV9Iao3Y#SY)Y3WJIP36 zg9oz04(TlT%qH+M7u|=uKA5t(n|FnK=-}KrZ`#2pYI;~CCK)?#Tp9E*awpm;b)a>8 zIbivg&$eVrW!tIkdA_r1egOY*wC){L>bjIlZkcQHQ{Tlo{Fot@#oS?ic78$W)WsWT zkK(ezca1daxog{(Ynk2(mc*GuAwRhe{lcF>vIkN3)6;v+k}?(mhi3WUSn7mw{U|wE zu5J2YV`TG-{PW#t6NTjFk@jNE9yx1kds}1fFPuk?iJe4ChQH4(Z}{IE<7IaS!V3yp zc50fW$tknfG9~=q%0lpgYgf|yR#f~Ak>A~aXlCi8_-KAjGq1>RE4;@l>Gf_8=gW*h z{&V+<$7LLMZ8c6ZO*6Nz;)zSP|4bfR$+`0cv84UXJ)6w3(hO%%WfEQEsv)uZWs261 zoD^H$W-00lE;QVd^t$B1q+MRxkpkrtFUxaM%xvL&raZOsVX5yTkdU2l5#bh;tgU^x z0Nz&_y>}%xVD?+fOk*mI6Z#RJs9o2mtQVgOA98Z>8WIRVGHb)iBXP!Y0qL4_X{UuVth`f{VRVT32#JQ#evsqXuHlT%NjBVI<*1?upn!jR!g zmRqdPK;qW9*Ge=>z`Zlo{nw6@8q|#RD$=ww&#=D$f%B&9y`uX&=Q-h9v^mSV+yMF;98c0L{ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/img/info/article/201412images/art1213023158806.jpg b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/img/info/article/201412images/art1213023158806.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b2e412166d660934b2020c9c51602eaaf5078b6 GIT binary patch literal 11584 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 'Не е възможно да се извърши заявката. (ГРЕШКА %1)', + 'Errors' => array ( + '10' => 'Невалидна команда.', + '11' => 'Типът на ресурса не е определен в заявката.', + '12' => 'Заявеният тип на ресурса не е намерен.', + '102' => 'Невалиден файл или име на папка.', + '103' => 'Не е възможно да се извърши действието заради проблем с идентификацията.', + '104' => 'Не е възможно да се извърши действието заради проблем с правата.', + '105' => 'Невалидно файлово разширение.', + '109' => 'Невалидна заявка.', + '110' => 'Неизвестна грешка.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Файл или папка със същото име вече съществува.', + '116' => 'Папката не е намерена, опреснете и опитайте отново.', + '117' => 'Файлът не е намерен, опреснете и опитайте отново.', + '118' => 'Пътищата за цел и източник трябва да са еднакви.', + '201' => 'Файл с такова име съществува, каченият файл е преименуван на "%1".', + '202' => 'Невалиден файл.', + '203' => 'Невалиден файл. Размерът е прекалено голям.', + '204' => 'Каченият файл е повреден.', + '205' => 'Няма временна папка за качените файлове.', + '206' => 'Качването е спряно заради проблеми със сигурността. Файлът съдържа HTML данни.', + '207' => 'Каченият файл е преименуван на "%1".', + '300' => 'Преместването на файловете пропадна.', + '301' => 'Копирането на файловете пропадна.', + '500' => 'Файловият браузър е изключен заради проблеми със сигурността. Моля свържете се с Вашия системен администратор и проверете конфигурацията.', + '501' => 'Поддръжката за миниатюри е изключена.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ca.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ca.php new file mode 100644 index 0000000..1b9fafd --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ca.php @@ -0,0 +1,36 @@ + 'No ha estat possible completar la solicitut. (Error %1)', + 'Errors' => array ( + '10' => 'Ordre incorrecte.', + '11' => 'El tipus de recurs no ha estat especificat a la solicitut.', + '12' => 'El tipus de recurs solicitat no és vàlid.', + '102' => 'Nom de fitxer o carpeta no vàlids.', + '103' => 'No s\'ha pogut completar la solicitut degut a les restriccions d\'autorització.', + '104' => 'No s\'ha pogut completar la solicitut degut a les restriccions en el sistema de fitxers.', + '105' => 'La extensió del fitxer no es vàlida.', + '109' => 'Petició invàlida.', + '110' => 'Error desconegut.', + '111' => 'No ha estat possible completar l\'operació a causa de la grandària del fitxer resultant.', + '115' => 'Ja existeix un fitxer o carpeta amb aquest nom.', + '116' => 'No s\'ha trobat la carpeta. Si us plau, actualitzi i torni-ho a provar.', + '117' => 'No s\'ha trobat el fitxer. Si us plau, actualitzi i torni-ho a provar.', + '118' => 'Les rutes origen i destí són iguals.', + '201' => 'Ja existeix un fitxer amb aquest nom. El fitxer pujat ha estat renombrat com a "%1".', + '202' => 'Fitxer invàlid.', + '203' => 'Fitxer invàlid. El pes és massa gran.', + '204' => 'El fitxer pujat està corrupte.', + '205' => 'La carpeta temporal no està disponible en el servidor per poder realitzar pujades.', + '206' => 'La pujada s\'ha cancel·lat per raons de seguretat. El fitxer conté codi HTML.', + '207' => 'El fitxer pujat ha estat renombrat com a "%1".', + '300' => 'Ha fallat el moure el(s) fitxer(s).', + '301' => 'Ha fallat el copiar el(s) fitxer(s).', + '500' => 'El navegador de fitxers està deshabilitat per raons de seguretat. Si us plau, contacti amb l\'administrador del sistema i comprovi el fitxer de configuració de CKFinder.', + '501' => 'El suport per a icones està deshabilitat.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/cs.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/cs.php new file mode 100644 index 0000000..460df59 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/cs.php @@ -0,0 +1,36 @@ + 'Příkaz nebylo možné dokončit. (Chyba %1)', + 'Errors' => array ( + '10' => 'Neplatný příkaz.', + '11' => 'Typ zdroje nebyl v požadavku určen.', + '12' => 'Požadovaný typ zdroje není platný.', + '102' => 'Špatné název souboru, nebo složky.', + '103' => 'Nebylo možné příkaz dokončit kvůli omezení oprávnění.', + '104' => 'Nebylo možné příkaz dokončit kvůli omezení oprávnění souborového systému.', + '105' => 'Neplatná přípona souboru.', + '109' => 'Neplatný požadavek.', + '110' => 'Neznámá chyba.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Soubor nebo složka se stejným názvem již existuje.', + '116' => 'Složka nenalezena, prosím obnovte a zkuste znovu.', + '117' => 'Soubor nenalezen, prosím obnovte seznam souborů a zkuste znovu.', + '118' => 'Cesty zdroje a cíle jsou stejné.', + '201' => 'Soubor se stejným názvem je již dostupný, nahraný soubor byl přejmenován na "%1".', + '202' => 'Neplatný soubor.', + '203' => 'Neplatný soubor. Velikost souboru je příliš velká.', + '204' => 'Nahraný soubor je poškozen.', + '205' => 'Na serveru není dostupná dočasná složka pro nahrávání.', + '206' => 'Nahrávání zrušeno z bezpečnostních důvodů. Soubor obsahuje data podobná HTML.', + '207' => 'Nahraný soubor byl přejmenován na "%1".', + '300' => 'Přesunování souboru(ů) selhalo.', + '301' => 'Kopírování souboru(ů) selhalo.', + '500' => 'Průzkumník souborů je z bezpečnostních důvodů zakázán. Zdělte to prosím správci systému a zkontrolujte soubor nastavení CKFinder.', + '501' => 'Podpora náhledů je zakázána.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/cy.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/cy.php new file mode 100644 index 0000000..e19a550 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/cy.php @@ -0,0 +1,36 @@ + 'Does dim modd cwblhau\'r cais. (Gwall %1)', + 'Errors' => array ( + '10' => 'Gorchymyn annilys.', + '11' => 'Doedd math yr adnodd heb ei benodi yn y cais.', + '12' => 'Dyw math yr adnodd ddim yn ddilys.', + '102' => 'Enw ffeil neu ffolder annilys.', + '103' => 'Doedd dim modd cwblhau\'r cais oherwydd cyfyngiadau awdurdodi.', + '104' => 'Doedd dim modd cwblhau\'r cais oherwydd cyfyngiadau i hawliau\'r system ffeilio.', + '105' => 'Estyniad ffeil annilys.', + '109' => 'Cais annilys.', + '110' => 'Gwall anhysbys.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Mae ffeil neu ffolder gyda\'r un enw yn bodoli yn barod.', + '116' => 'Methu â darganfod y ffolder. Adfywiwch a cheisio eto.', + '117' => 'Methu â darganfod y ffeil. Adfywiwch y rhestr ffeiliau a cheisio eto.', + '118' => 'Mae\'r llwybrau gwreiddiol a tharged yn unfath.', + '201' => 'Mae ffeil â\'r enw hwnnw yn bodoli yn barod. Cafodd y ffeil a lanlwythwyd ei hailenwi i "%1".', + '202' => 'Ffeil annilys.', + '203' => 'Ffeil annilys. Mae maint y ffeil yn rhy fawr.', + '204' => 'Mae\'r ffeil a lanwythwyd wedi chwalu.', + '205' => 'Does dim ffolder dros dro ar gael er mwyn lanlwytho ffeiliau iddo ar y gweinydd hwn.', + '206' => 'Cafodd y lanlwythiad ei ddiddymu oherwydd rhesymau diogelwch. Mae\'r ffeil yn cynnwys data yn debyg i HTML.', + '207' => 'Cafodd y ffeil a lanlwythwyd ei hailenwi i "%1".', + '300' => 'Methodd symud y ffeil(iau).', + '301' => 'Methodd copïo\'r ffeil(iau).', + '500' => 'Cafodd y porwr ffeiliau ei anallogi oherwydd rhesymau diogelwch. Cysylltwch â\'ch gweinyddwr system a gwirio\'ch ffeil ffurfwedd CKFinder.', + '501' => 'Mae cynhaliaeth bawdluniau wedi\'i hanalluogi.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/da.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/da.php new file mode 100644 index 0000000..fd14a2d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/da.php @@ -0,0 +1,36 @@ + 'Det var ikke muligt at fuldføre handlingen. (Fejl: %1)', + 'Errors' => array ( + '10' => 'Ugyldig handling.', + '11' => 'Ressourcetypen blev ikke angivet i anmodningen.', + '12' => 'Ressourcetypen er ikke gyldig.', + '102' => 'Ugyldig fil eller mappenavn.', + '103' => 'Det var ikke muligt at fuldføre handlingen på grund af en begrænsning i rettigheder.', + '104' => 'Det var ikke muligt at fuldføre handlingen på grund af en begrænsning i filsystem rettigheder.', + '105' => 'Ugyldig filtype.', + '109' => 'Ugyldig anmodning.', + '110' => 'Ukendt fejl.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'En fil eller mappe med det samme navn eksisterer allerede.', + '116' => 'Mappen blev ikke fundet. Opdatér listen eller prøv igen.', + '117' => 'Filen blev ikke fundet. Opdatér listen eller prøv igen.', + '118' => 'Originalplacering og destination er ens.', + '201' => 'En fil med det samme filnavn eksisterer allerede. Den uploadede fil er blevet omdøbt til "%1".', + '202' => 'Ugyldig fil.', + '203' => 'Ugyldig fil. Filstørrelsen er for stor.', + '204' => 'Den uploadede fil er korrupt.', + '205' => 'Der er ikke en midlertidig mappe til upload til rådighed på serveren.', + '206' => 'Upload annulleret af sikkerhedsmæssige årsager. Filen indeholder HTML-lignende data.', + '207' => 'Den uploadede fil er blevet omdøbt til "%1".', + '300' => 'Flytning af fil(er) fejlede.', + '301' => 'Kopiering af fil(er) fejlede.', + '500' => 'Filbrowseren er deaktiveret af sikkerhedsmæssige årsager. Kontakt systemadministratoren eller kontrollér CKFinders konfigurationsfil.', + '501' => 'Understøttelse af thumbnails er deaktiveret.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/de.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/de.php new file mode 100644 index 0000000..f390a5e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/de.php @@ -0,0 +1,36 @@ + 'Ihre Anfrage konnte nicht bearbeitet werden. (Fehler %1)', + 'Errors' => array ( + '10' => 'Unbekannter Befehl.', + '11' => 'Der Ressourcentyp wurde nicht spezifiziert.', + '12' => 'Der Ressourcentyp ist nicht gültig.', + '102' => 'Ungültiger Datei oder Verzeichnisname.', + '103' => 'Ihre Anfrage konnte wegen Authorisierungseinschränkungen nicht durchgeführt werden.', + '104' => 'Ihre Anfrage konnte wegen Dateisystemeinschränkungen nicht durchgeführt werden.', + '105' => 'Invalid file extension.', + '109' => 'Unbekannte Anfrage.', + '110' => 'Unbekannter Fehler.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Es existiert bereits eine Datei oder ein Ordner mit dem gleichen Namen.', + '116' => 'Verzeichnis nicht gefunden. Bitte aktualisieren Sie die Anzeige und versuchen es noch einmal.', + '117' => 'Datei nicht gefunden. Bitte aktualisieren Sie die Dateiliste und versuchen es noch einmal.', + '118' => 'Quell- und Zielpfad sind gleich.', + '201' => 'Es existiert bereits eine Datei unter gleichem Namen. Die hochgeladene Datei wurde unter "%1" gespeichert.', + '202' => 'Ungültige Datei.', + '203' => 'ungültige Datei. Die Dateigröße ist zu groß.', + '204' => 'Die hochgeladene Datei ist korrupt.', + '205' => 'Es existiert kein temp. Ordner für das Hochladen auf den Server.', + '206' => 'Das Hochladen wurde aus Sicherheitsgründen abgebrochen. Die Datei enthält HTML-Daten.', + '207' => 'Die hochgeladene Datei wurde unter "%1" gespeichert.', + '300' => 'Verschieben der Dateien fehlgeschlagen.', + '301' => 'Kopieren der Dateien fehlgeschlagen.', + '500' => 'Der Dateibrowser wurde aus Sicherheitsgründen deaktiviert. Bitte benachrichtigen Sie Ihren Systemadministrator und prüfen Sie die Konfigurationsdatei.', + '501' => 'Die Miniaturansicht wurde deaktivert.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/el.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/el.php new file mode 100644 index 0000000..5b6b1d0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/el.php @@ -0,0 +1,36 @@ + 'Η ενέργεια δεν ήταν δυνατόν να εκτελεστεί. (Σφάλμα %1)', + 'Errors' => array ( + '10' => 'Λανθασμένη Εντολή.', + '11' => 'Το resource type δεν ήταν δυνατόν να προσδιοριστεί.', + '12' => 'Το resource type δεν είναι έγκυρο.', + '102' => 'Το όνομα αρχείου ή φακέλου δεν είναι έγκυρο.', + '103' => 'Δεν ήταν δυνατή η εκτέλεση της ενέργειας λόγω έλλειψης δικαιωμάτων ασφαλείας.', + '104' => 'Δεν ήταν δυνατή η εκτέλεση της ενέργειας λόγω περιορισμών του συστήματος αρχείων.', + '105' => 'Λανθασμένη επέκταση αρχείου.', + '109' => 'Λανθασμένη ενέργεια.', + '110' => 'Άγνωστο λάθος.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Το αρχείο ή φάκελος υπάρχει ήδη.', + '116' => 'Ο φάκελος δεν βρέθηκε. Παρακαλούμε ανανεώστε τη σελίδα και προσπαθήστε ξανά.', + '117' => 'Το αρχείο δεν βρέθηκε. Παρακαλούμε ανανεώστε τη σελίδα και προσπαθήστε ξανά.', + '118' => 'Η αρχική και τελική διαδρομή είναι ίδιες.', + '201' => 'Ένα αρχείο με την ίδια ονομασία υπάρχει ήδη. Το μεταφορτωμένο αρχείο μετονομάστηκε σε "%1".', + '202' => 'Λανθασμένο αρχείο.', + '203' => 'Λανθασμένο αρχείο. Το μέγεθος του αρχείου είναι πολύ μεγάλο.', + '204' => 'Το μεταφορτωμένο αρχείο είναι χαλασμένο.', + '205' => 'Δεν υπάρχει προσωρινός φάκελος για να χρησιμοποιηθεί για τις μεταφορτώσεις των αρχείων.', + '206' => 'Η μεταφόρτωση ακυρώθηκε για λόγους ασφαλείας. Το αρχείο περιέχει δεδομένα μορφής HTML.', + '207' => 'Το μεταφορτωμένο αρχείο μετονομάστηκε σε "%1".', + '300' => 'Η μετακίνηση των αρχείων απέτυχε.', + '301' => 'Η αντιγραφή των αρχείων απέτυχε.', + '500' => 'Ο πλοηγός αρχείων έχει απενεργοποιηθεί για λόγους ασφαλείας. Παρακαλούμε επικοινωνήστε με τον διαχειριστή της ιστοσελίδας και ελέγξτε το αρχείο ρυθμίσεων του πλοηγού (CKFinder).', + '501' => 'Η υποστήριξη των μικρογραφιών έχει απενεργοποιηθεί.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/en.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/en.php new file mode 100644 index 0000000..428b539 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/en.php @@ -0,0 +1,36 @@ + 'It was not possible to complete the request. (Error %1)', + 'Errors' => array ( + '10' => 'Invalid command.', + '11' => 'The resource type was not specified in the request.', + '12' => 'The requested resource type is not valid.', + '102' => 'Invalid file or folder name.', + '103' => 'It was not possible to complete the request due to authorization restrictions.', + '104' => 'It was not possible to complete the request due to file system permission restrictions.', + '105' => 'Invalid file extension.', + '109' => 'Invalid request.', + '110' => 'Unknown error.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'A file or folder with the same name already exists.', + '116' => 'Folder not found. Please refresh and try again.', + '117' => 'File not found. Please refresh the files list and try again.', + '118' => 'Source and target paths are equal.', + '201' => 'A file with the same name is already available. The uploaded file was renamed to "%1".', + '202' => 'Invalid file.', + '203' => 'Invalid file. The file size is too big.', + '204' => 'The uploaded file is corrupt.', + '205' => 'No temporary folder is available for upload in the server.', + '206' => 'Upload cancelled due to security reasons. The file contains HTML-like data.', + '207' => 'The uploaded file was renamed to "%1".', + '300' => 'Moving file(s) failed.', + '301' => 'Copying file(s) failed.', + '500' => 'The file browser is disabled for security reasons. Please contact your system administrator and check the CKFinder configuration file.', + '501' => 'The thumbnails support is disabled.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/eo.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/eo.php new file mode 100644 index 0000000..42bcc59 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/eo.php @@ -0,0 +1,36 @@ + 'Ne eblis plenumi la peton. (Eraro %1)', + 'Errors' => array ( + '10' => 'Nevalida komando.', + '11' => 'La risurctipo ne estas indikita en la komando.', + '12' => 'La risurctipo ne estas valida.', + '102' => 'La dosier- aŭ dosierujnomo ne estas valida.', + '103' => 'Ne eblis plenumi la peton pro rajtaj limigoj.', + '104' => 'Ne eblis plenumi la peton pro atingopermesaj limigoj.', + '105' => 'Nevalida dosiernoma finaĵo.', + '109' => 'Nevalida peto.', + '110' => 'Nekonata eraro.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Dosiero aŭ dosierujo kun tiu nomo jam ekzistas.', + '116' => 'Tiu dosierujo ne ekzistas. Bonvolu aktualigi kaj reprovi.', + '117' => 'Tiu dosiero ne ekzistas. Bonvolu aktualigi kaj reprovi.', + '118' => 'La vojoj al la fonto kaj al la celo estas samaj.', + '201' => 'Dosiero kun la sama nomo jam ekzistas. La alŝutita dosiero estas renomita al "%1".', + '202' => 'Nevalida dosiero.', + '203' => 'Nevalida dosiero. La grando estas tro alta.', + '204' => 'La alŝutita dosiero estas difektita.', + '205' => 'Neniu provizora dosierujo estas disponebla por alŝuto al la servilo.', + '206' => 'Alŝuto nuligita pro kialoj pri sekureco. La dosiero entenas datenojn de HTMLtipo.', + '207' => 'La alŝutita dosiero estas renomita al "%1".', + '300' => 'La movo de la dosieroj malsukcesis.', + '301' => 'La kopio de la dosieroj malsukcesis.', + '500' => 'La dosieradministra sistemo estas malvalidigita. Kontaktu vian administranton kaj kontrolu la agordodosieron de CKFinder.', + '501' => 'La eblo de miniaturoj estas malvalidigita.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/es-mx.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/es-mx.php new file mode 100644 index 0000000..e36b56f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/es-mx.php @@ -0,0 +1,36 @@ + 'No ha sido posible completar la solicitud. (Error %1)', + 'Errors' => array ( + '10' => 'Comando incorrecto.', + '11' => 'El tipo de recurso no ha sido especificado en la solicitud.', + '12' => 'El tipo de recurso solicitado no es válido.', + '102' => 'Nombre de archivo o carpeta no válido.', + '103' => 'No se ha podido completar la solicitud debido a las restricciones de autorización.', + '104' => 'No ha sido posible completar la solicitud debido a restricciones en el sistema de archivos.', + '105' => 'La extensión del archivo no es válida.', + '109' => 'Petición inválida.', + '110' => 'Error desconocido.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Ya existe un archivo o carpeta con ese nombre.', + '116' => 'No se ha encontrado la carpeta. Por favor, actualice y pruebe de nuevo.', + '117' => 'No se ha encontrado el archivo. Por favor, actualice la lista de archivos y pruebe de nuevo.', + '118' => 'Las rutas origen y destino son iguales.', + '201' => 'Ya existía un archivo con ese nombre. El archivo subido ha sido renombrado como "%1".', + '202' => 'Archivo inválido.', + '203' => 'Archivo inválido. El tamaño es demasiado grande.', + '204' => 'El archivo subido está corrupto.', + '205' => 'La carpeta temporal no está disponible en el servidor para las subidas.', + '206' => 'La subida se ha cancelado por razones de seguridad. El archivo contenía código HTML.', + '207' => 'El archivo subido ha sido renombrado como "%1".', + '300' => 'Ha fallado el mover el(los) archivo(s).', + '301' => 'Ha fallado el copiar el(los) archivo(s).', + '500' => 'El navegador de archivos está deshabilitado por razones de seguridad. Por favor, contacte con el administrador de su sistema y compruebe el archivo de configuración de CKFinder.', + '501' => 'El soporte para iconos está deshabilitado.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/es.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/es.php new file mode 100644 index 0000000..273e14a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/es.php @@ -0,0 +1,36 @@ + 'No ha sido posible completar la solicitud. (Error %1)', + 'Errors' => array ( + '10' => 'Comando incorrecto.', + '11' => 'El tipo de recurso no ha sido especificado en la solicitud.', + '12' => 'El tipo de recurso solicitado no es válido.', + '102' => 'Nombre de fichero o carpeta no válido.', + '103' => 'No se ha podido completar la solicitud debido a las restricciones de autorización.', + '104' => 'No ha sido posible completar la solicitud debido a restricciones en el sistema de ficheros.', + '105' => 'La extensión del archivo no es válida.', + '109' => 'Petición inválida.', + '110' => 'Error desconocido.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Ya existe un fichero o carpeta con ese nombre.', + '116' => 'No se ha encontrado la carpeta. Por favor, actualice y pruebe de nuevo.', + '117' => 'No se ha encontrado el fichero. Por favor, actualice la lista de ficheros y pruebe de nuevo.', + '118' => 'Las rutas origen y destino son iguales.', + '201' => 'Ya existía un fichero con ese nombre. El fichero subido ha sido renombrado como "%1".', + '202' => 'Fichero inválido.', + '203' => 'Fichero inválido. El peso es demasiado grande.', + '204' => 'El fichero subido está corrupto.', + '205' => 'La carpeta temporal no está disponible en el servidor para las subidas.', + '206' => 'La subida se ha cancelado por razones de seguridad. El fichero contenía código HTML.', + '207' => 'El fichero subido ha sido renombrado como "%1".', + '300' => 'Ha fallado el mover el(los) fichero(s).', + '301' => 'Ha fallado el copiar el(los) fichero(s).', + '500' => 'El navegador de archivos está deshabilitado por razones de seguridad. Por favor, contacte con el administrador de su sistema y compruebe el fichero de configuración de CKFinder.', + '501' => 'El soporte para iconos está deshabilitado.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/et.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/et.php new file mode 100644 index 0000000..5be525b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/et.php @@ -0,0 +1,36 @@ + 'Päringu täitmine ei olnud võimalik. (Viga %1)', + 'Errors' => array ( + '10' => 'Vigane käsk.', + '11' => 'Allika liik ei olnud päringus määratud.', + '12' => 'Päritud liik ei ole sobiv.', + '102' => 'Sobimatu faili või kausta nimi.', + '103' => 'Piiratud õiguste tõttu ei olnud võimalik päringut lõpetada.', + '104' => 'Failisüsteemi piiratud õiguste tõttu ei olnud võimalik päringut lõpetada.', + '105' => 'Sobimatu faililaiend.', + '109' => 'Vigane päring.', + '110' => 'Tundmatu viga.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Sellenimeline fail või kaust on juba olemas.', + '116' => 'Kausta ei leitud. Palun värskenda lehte ja proovi uuesti.', + '117' => 'Faili ei leitud. Palun värskenda lehte ja proovi uuesti.', + '118' => 'Lähte- ja sihtasukoht on sama.', + '201' => 'Samanimeline fail on juba olemas. Üles laaditud faili nimeks pandi "%1".', + '202' => 'Vigane fail.', + '203' => 'Vigane fail. Fail on liiga suur.', + '204' => 'Üleslaaditud fail on rikutud.', + '205' => 'Serverisse üleslaadimiseks pole ühtegi ajutiste failide kataloogi.', + '206' => 'Üleslaadimine katkestati turvakaalutlustel. Fail sisaldab HTMLi sarnaseid andmeid.', + '207' => 'Üleslaaditud faili nimeks pandi "%1".', + '300' => 'Faili(de) liigutamine nurjus.', + '301' => 'Faili(de) kopeerimine nurjus.', + '500' => 'Failide sirvija on turvakaalutlustel keelatud. Palun võta ühendust oma süsteemi administraatoriga ja kontrolli CKFinderi seadistusfaili.', + '501' => 'Pisipiltide tugi on keelatud.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fa.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fa.php new file mode 100644 index 0000000..22e264c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fa.php @@ -0,0 +1,36 @@ + 'امکان تکمیل درخواست فوق وجود ندارد (خطا: %1)', + 'Errors' => array ( + '10' => 'دستور نامعتبر.', + '11' => 'نوع منبع در درخواست تعریف نشده است.', + '12' => 'نوع منبع درخواست شده معتبر نیست.', + '102' => 'نام فایل یا پوشه نامعتبر است.', + '103' => 'امکان کامل کردن این درخواست بخاطر محدودیت اختیارات وجود ندارد.', + '104' => 'امکان کامل کردن این درخواست بخاطر محدودیت دسترسی وجود ندارد.', + '105' => 'پسوند فایل نامعتبر است.', + '109' => 'درخواست نامعتبر است.', + '110' => 'خطای ناشناخته.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'فایل یا پوشه ای با این نام وجود دارد', + '116' => 'پوشه یافت نشد. لطفا بروزرسانی کرده و مجددا تلاش کنید.', + '117' => 'فایل یافت نشد. لطفا فهرست فایلها را بروزرسانی کرده و مجددا تلاش کنید.', + '118' => 'منبع و مقصد مسیر یکی است.', + '201' => 'یک فایل با همان نام از قبل موجود است. فایل آپلود شده به "%1" تغییر نام یافت.', + '202' => 'فایل نامعتبر', + '203' => 'فایل نامعتبر. اندازه فایل بیش از حد بزرگ است.', + '204' => 'فایل آپلود شده خراب است.', + '205' => 'هیچ پوشه موقتی برای آپلود فایل در سرور موجود نیست.', + '206' => 'آپلود به دلایل امنیتی متوقف شد. فایل محتوی اطلاعات HTML است.', + '207' => 'فایل آپلود شده به "%1" تغییر نام یافت.', + '300' => 'انتقال فایل (ها) شکست خورد.', + '301' => 'کپی فایل (ها) شکست خورد.', + '500' => 'مرورگر فایل به دلایل امنیتی غیر فعال است. لطفا با مدیر سامانه تماس بگیرید تا تنظیمات این بخش را بررسی نماید.', + '501' => 'پشتیبانی از تصاویر کوچک غیرفعال شده است', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fi.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fi.php new file mode 100644 index 0000000..32edcf9 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fi.php @@ -0,0 +1,36 @@ + 'Pyyntöä ei voitu suorittaa. (Virhe %1)', + 'Errors' => array ( + '10' => 'Virheellinen komento.', + '11' => 'Pyynnön resurssityyppi on määrittelemättä.', + '12' => 'Pyynnön resurssityyppi on virheellinen.', + '102' => 'Virheellinen tiedosto- tai kansionimi.', + '103' => 'Oikeutesi eivät riitä pyynnön suorittamiseen.', + '104' => 'Tiedosto-oikeudet eivät riitä pyynnön suorittamiseen.', + '105' => 'Virheellinen tiedostotarkenne.', + '109' => 'Virheellinen pyyntö.', + '110' => 'Tuntematon virhe.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Samanniminen tiedosto tai kansio on jo olemassa.', + '116' => 'Kansiota ei löydy. Yritä uudelleen kansiopäivityksen jälkeen.', + '117' => 'Tiedostoa ei löydy. Yritä uudelleen kansiopäivityksen jälkeen.', + '118' => 'Lähde- ja kohdekansio on sama!', + '201' => 'Samanniminen tiedosto on jo olemassa. Palvelimelle ladattu tiedosto on nimetty: "%1".', + '202' => 'Virheellinen tiedosto.', + '203' => 'Virheellinen tiedosto. Tiedostokoko on liian suuri.', + '204' => 'Palvelimelle ladattu tiedosto on vioittunut.', + '205' => 'Väliaikaishakemistoa ei ole määritetty palvelimelle lataamista varten.', + '206' => 'Palvelimelle lataaminen on peruttu turvallisuussyistä. Tiedosto sisältää HTML-tyylistä dataa.', + '207' => 'Palvelimelle ladattu tiedosto on nimetty: "%1".', + '300' => 'Tiedostosiirto epäonnistui.', + '301' => 'Tiedostokopiointi epäonnistui.', + '500' => 'Tiedostoselain on kytketty käytöstä turvallisuussyistä. Pyydä pääkäyttäjää tarkastamaan CKFinderin asetustiedosto.', + '501' => 'Esikatselukuvien tuki on kytketty toiminnasta.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fr.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fr.php new file mode 100644 index 0000000..a8ff959 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/fr.php @@ -0,0 +1,36 @@ + 'La demande n\'a pas abouti. (Erreur %1)', + 'Errors' => array ( + '10' => 'Commande invalide.', + '11' => 'Le type de ressource n\'a pas été spécifié dans la commande.', + '12' => 'Le type de ressource n\'est pas valide.', + '102' => 'Nom de fichier ou de dossier invalide.', + '103' => 'La demande n\'a pas abouti : problème d\'autorisations.', + '104' => 'La demande n\'a pas abouti : problème de restrictions de permissions.', + '105' => 'Extension de fichier invalide.', + '109' => 'Demande invalide.', + '110' => 'Erreur inconnue.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Un fichier ou un dossier avec ce nom existe déjà.', + '116' => 'Ce dossier n\'existe pas. Veuillez rafraîchir la page et réessayer.', + '117' => 'Ce fichier n\'existe pas. Veuillez rafraîchir la page et réessayer.', + '118' => 'Les chemins vers la source et la cible sont les mêmes.', + '201' => 'Un fichier avec ce nom existe déjà. Le fichier téléversé a été renommé en "%1".', + '202' => 'Fichier invalide.', + '203' => 'Fichier invalide. La taille est trop grande.', + '204' => 'Le fichier téléversé est corrompu.', + '205' => 'Aucun dossier temporaire n\'est disponible sur le serveur.', + '206' => 'Envoi interrompu pour raisons de sécurité. Le fichier contient des données de type HTML.', + '207' => 'Le fichier téléchargé a été renommé "%1".', + '300' => 'Le déplacement des fichiers a échoué.', + '301' => 'La copie des fichiers a échoué.', + '500' => 'L\'interface de gestion des fichiers est désactivé. Contactez votre administrateur et vérifier le fichier de configuration de CKFinder.', + '501' => 'La fonction "miniatures" est désactivée.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/gu.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/gu.php new file mode 100644 index 0000000..5d803fd --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/gu.php @@ -0,0 +1,36 @@ + 'તમારી રીક્વેસ્ટ માન્ય નથી. (એરર %1)', + 'Errors' => array ( + '10' => 'કમાંડ માન્ય નથી.', + '11' => 'તમારી રીક્વેસ્ટ માન્ય નથી.', + '12' => 'તમારી રીક્વેસ્ટ રિસોર્સ માન્ય નથી.', + '102' => 'ફાઈલ અથવા ફોલ્ડરનું નામ માન્ય નથી.', + '103' => 'ઓથોરીટી ન હોવાને કારણે, તમારી રીક્વેસ્ટ માન્ય નથી..', + '104' => 'સિસ્ટમ પરમીસન ન હોવાને કારણે, તમારી રીક્વેસ્ટ માન્ય નથી.', + '105' => 'ફાઈલ એક્ષટેનસન માન્ય નથી.', + '109' => 'ઇનવેલીડ રીક્વેસ્ટ.', + '110' => 'અન્નોન એરર.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'એજ નામ વાળું ફાઈલ અથવા ફોલ્ડર છે.', + '116' => 'ફોલ્ડર નથી. રીફ્રેશ દબાવી ફરી પ્રયત્ન કરો.', + '117' => 'ફાઈલ નથી. રીફ્રેશ દબાવી ફરી પ્રયત્ન કરો..', + '118' => 'સોર્સ અને ટાર્ગેટ ના પાથ સરખા નથી.', + '201' => 'એજ નામ વાળી ફાઈલ છે. અપલોડ કરેલી નવી ફાઈલનું નામ "%1".', + '202' => 'ફાઈલ માન્ય નથી.', + '203' => 'ફાઈલ માન્ય નથી. ફાઈલની સાઈઝ ઘણી મોટી છે.', + '204' => 'અપલોડ કરેલી ફાઈલ કરપ્ટ છે.', + '205' => 'સર્વર પર અપલોડ કરવા માટે ટેમ્પરરી ફોલ્ડર નથી.', + '206' => 'સિક્યોરીટીના કારણે અપલોડ કેન્સલ કરેલ છે. ફાઈલમાં HTML જેવો ડેટા છે.', + '207' => 'અપલોડ ફાઈલનું નવું નામ "%1".', + '300' => 'ફાઈલ મુવ શક્ય નથી.', + '301' => 'ફાઈલ કોપી શક્ય નથી.', + '500' => 'સિક્યોરીટીના કારણે ફાઈલ બ્રાઉઝર બંધ કરેલ છે. તમારા સિક્યોરીટી એડ્મીનીસ્ટેટરની મદદથી CKFinder કોન્ફીગ્યુંરેષન ફાઈલ તપાસો.', + '501' => 'થમ્બનેલનો સપોર્ટ બંધ કરેલો છે.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/he.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/he.php new file mode 100644 index 0000000..dd377f9 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/he.php @@ -0,0 +1,36 @@ + 'לא היה ניתן להשלים את הבקשה. (שגיאה %1)', + 'Errors' => array ( + '10' => 'הוראה לא תקינה.', + '11' => 'סוג המשאב לא צויין בבקשה לשרת.', + '12' => 'סוג המשאב המצויין לא תקין.', + '102' => 'שם הקובץ או התיקיה לא תקין.', + '103' => 'לא היה ניתן להשלים את הבקשה בשל הרשאות מוגבלות.', + '104' => 'לא היה ניתן להשלים את הבקשה בשל הרשאות מערכת קבצים מוגבלות.', + '105' => 'סיומת הקובץ לא תקינה.', + '109' => 'בקשה לא תקינה.', + '110' => 'שגיאה לא ידועה.', + '111' => 'לא ניתן היה להשלים את הבקשה בשל הגודל החריג של הקובץ הנוצר.', + '115' => 'כבר קיים/ת קובץ או תיקיה באותו השם.', + '116' => 'התיקיה לא נמצאה. נא לרענן ולנסות שוב.', + '117' => 'הקובץ לא נמצא. נא לרענן ולנסות שוב.', + '118' => 'כתובות המקור והיעד זהות.', + '201' => 'קובץ עם אותו השם כבר קיים. שם הקובץ שהועלה שונה ל "%1"', + '202' => 'הקובץ לא תקין.', + '203' => 'הקובץ לא תקין. גודל הקובץ גדול מדי.', + '204' => 'הקובץ המועלה לא תקין', + '205' => 'לא קיימת בשרת תיקיה זמנית להעלאת קבצים.', + '206' => 'ההעלאה בוטלה מסיבות אבטחה. הקובץ מכיל תוכן שדומה ל-HTML.', + '207' => 'שם הקובץ שהועלה שונה ל "%1"', + '300' => 'העברת הקבצים נכשלה.', + '301' => 'העתקת הקבצים נכשלה.', + '500' => 'דפדפן הקבצים מנוטרל מסיבות אבטחה. יש לפנות למנהל המערכת ולבדוק את קובץ התצורה של CKFinder.', + '501' => 'התמיכה בתמונות מוקטנות מבוטלת.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hi.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hi.php new file mode 100644 index 0000000..c763b33 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hi.php @@ -0,0 +1,36 @@ + 'आपकी रिक्वेस्ट क्मप्लित नही कर सकते. (एरर %1)', + 'Errors' => array ( + '10' => 'इन्वेलीड कमांड.', + '11' => 'यह रिसोर्स टाईप उपलब्ध नहीं है.', + '12' => 'यह रिसोर्स टाईप वेलिड नही हैं.', + '102' => 'फाएल या फोल्डर का नाम वेलिड नहीं है.', + '103' => 'ओथोरिसेसंन रिस्त्रिक्सं की वजह से, आपकी रिक्वेस्ट पूरी नही कर सकते.', + '104' => 'सिस्टम परमिशन रिस्त्रिक्सं की वजह से, आपकी रिक्वेस्ट पूरी नही कर सकते..', + '105' => 'फाएल एक्स्त्न्सं गलत है.', + '109' => 'इन्वेलीड रिक्वेस्ट.', + '110' => 'अननोन एरर.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'सेम नाम का फाएल या फोल्डर मोजूद है.', + '116' => 'फोल्डर नही मिला. रिफ्रेस करके वापिस प्रयत्न करे.', + '117' => 'फाएल नही मिला. फाएल लिस्टको रिफ्रेस करके वापिस प्रयत्न करे.', + '118' => 'सोर्स और टारगेट के पाथ एक जैसे है.', + '201' => 'वहि नाम की फाएल मोजोद है. अपलोड फाएल का नया नाम "%1".', + '202' => 'इन्वेलीड फाएल.', + '203' => 'इन्वेलीड फाएल. फाएल बहुत बड़ी है.', + '204' => 'अपलोडकी गयी फाएल करप्ट हो गयी है.', + '205' => 'फाएल अपलोड करनेके लिये, सर्वरपे टेम्पररी फोल्डर उपलब्थ नही है..', + '206' => 'सिक्योरिटी कारण वष, फाएल अपलोड केन्सल किया है. फाएलमें HTML-जैसे डेटा है.', + '207' => 'अपलोडेड फाएल का नया नाम "%1".', + '300' => 'फाएल मूव नहीं कर सके.', + '301' => 'फाएल कोपी नहीं कर सके.', + '500' => 'सिक्योरिटी कारण वष, फाएल ब्राउजर डिसेबल किया गया है. आपके सिस्टम एडमिनिस्ट्रेटर का सम्पर्क करे और CKFinder कोंफिग्युरेसन फाएल तपासे.', + '501' => 'थम्बनेल सपोर्ट डिसेबल किया है.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hr.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hr.php new file mode 100644 index 0000000..cdde8be --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hr.php @@ -0,0 +1,36 @@ + 'Nije moguće završiti zahtjev. (Greška %1)', + 'Errors' => array ( + '10' => 'Nepoznata naredba.', + '11' => 'Nije navedena vrsta u zahtjevu.', + '12' => 'Zatražena vrsta nije važeća.', + '102' => 'Neispravno naziv datoteke ili direktoija.', + '103' => 'Nije moguće izvršiti zahtjev zbog ograničenja pristupa.', + '104' => 'Nije moguće izvršiti zahtjev zbog ograničenja postavka sustava.', + '105' => 'Nedozvoljena vrsta datoteke.', + '109' => 'Nedozvoljen zahtjev.', + '110' => 'Nepoznata greška.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Datoteka ili direktorij s istim nazivom već postoji.', + '116' => 'Direktorij nije pronađen. Osvježite stranicu i pokušajte ponovo.', + '117' => 'Datoteka nije pronađena. Osvježite listu datoteka i pokušajte ponovo.', + '118' => 'Putanje izvora i odredišta su jednake.', + '201' => 'Datoteka s istim nazivom već postoji. Poslana datoteka je promjenjena u "%1".', + '202' => 'Neispravna datoteka.', + '203' => 'Neispravna datoteka. Veličina datoteke je prevelika.', + '204' => 'Poslana datoteka je neispravna.', + '205' => 'Ne postoji privremeni direktorij za slanje na server.', + '206' => 'Slanje je poništeno zbog sigurnosnih postavki. Naziv datoteke sadrži HTML podatke.', + '207' => 'Poslana datoteka je promjenjena u "%1".', + '300' => 'Premještanje datoteke(a) nije uspjelo.', + '301' => 'Kopiranje datoteke(a) nije uspjelo.', + '500' => 'Pretraživanje datoteka nije dozvoljeno iz sigurnosnih razloga. Molimo kontaktirajte administratora sustava kako bi provjerili postavke CKFinder konfiguracijske datoteke.', + '501' => 'The thumbnails support is disabled.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hu.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hu.php new file mode 100644 index 0000000..4f176c6 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/hu.php @@ -0,0 +1,36 @@ + 'A parancsot nem sikerült végrehajtani. (Hiba: %1)', + 'Errors' => array ( + '10' => 'Érvénytelen parancs.', + '11' => 'A fájl típusa nem lett a kérés során beállítva.', + '12' => 'A kívánt fájl típus érvénytelen.', + '102' => 'Érvénytelen fájl vagy könyvtárnév.', + '103' => 'Hitelesítési problémák miatt nem sikerült a kérést teljesíteni.', + '104' => 'Jogosultsági problémák miatt nem sikerült a kérést teljesíteni.', + '105' => 'Érvénytelen fájl kiterjesztés.', + '109' => 'Érvénytelen kérés.', + '110' => 'Ismeretlen hiba.', + '111' => 'A kérés nem teljesíthető a létrejövő fájl mérete miatt.', + '115' => 'A fálj vagy mappa már létezik ezen a néven.', + '116' => 'Mappa nem található. Kérem frissítsen és próbálja újra.', + '117' => 'Fájl nem található. Kérem frissítsen és próbálja újra.', + '118' => 'A forrás és a cél azonos.', + '201' => 'Ilyen nevű fájl már létezett. A feltöltött fájl a következőre lett átnevezve: "%1".', + '202' => 'Érvénytelen fájl.', + '203' => 'Érvénytelen fájl. A fájl mérete túl nagy.', + '204' => 'A feltöltött fájl hibás.', + '205' => 'A szerveren nem található a feltöltéshez ideiglenes mappa.', + '206' => 'A fájl feltötése biztonsági okból megszakadt. A fájl HTML adatokat tartalmaz.', + '207' => 'El fichero subido ha sido renombrado como "%1".', + '300' => 'A fájl(ok) áthelyezése sikertelen.', + '301' => 'A fájl(ok) másolása sikertelen.', + '500' => 'A fájl-tallózó biztonsági okok miatt nincs engedélyezve. Kérem vegye fel a kapcsolatot a rendszer üzemeltetőjével és ellenőrizze a CKFinder konfigurációs fájlt.', + '501' => 'A bélyegkép támogatás nincs engedélyezve.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/it.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/it.php new file mode 100644 index 0000000..0d34861 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/it.php @@ -0,0 +1,36 @@ + 'Impossibile completare la richiesta. (Errore %1)', + 'Errors' => array ( + '10' => 'Comando non valido.', + '11' => 'Il tipo di risorsa non è stato specificato nella richiesta.', + '12' => 'Il tipo di risorsa richiesto non è valido.', + '102' => 'Nome di file o cartella non valido.', + '103' => 'Non è stato possibile completare la richiesta a causa di restrizioni di autorizzazione.', + '104' => 'Non è stato possibile completare la richiesta a causa di restrizioni nei permessi del file system.', + '105' => 'L\'estensione del file non è valida.', + '109' => 'Richiesta non valida.', + '110' => 'Errore sconosciuto.', + '111' => 'È stato impossibile completare la richiesta a causa della dimensione finale del file.', + '115' => 'Un file o cartella con lo stesso nome è già esistente.', + '116' => 'Cartella non trovata. Aggiornare e riprovare.', + '117' => 'File non trovato. Aggiornare la lista dei file e riprovare.', + '118' => 'I percorsi di origine e di destinazione sono uguali.', + '201' => 'Un file con lo stesso nome è già presente. Il file caricato è stato rinominato in "%1".', + '202' => 'File invalido.', + '203' => 'File invalido. La dimensione del file eccede i limiti del sistema.', + '204' => 'Il file caricato è corrotto.', + '205' => 'Directory temporanea non disponibile sul server.', + '206' => 'Caricamento annullato per motivi di sicurezza. Il file contiene dati in formato HTML.', + '207' => 'Il file caricato è stato rinominato in "%1".', + '300' => 'Non è stato possibile muovere i file.', + '301' => 'Non è stato possibile copiare i file.', + '500' => 'Questo programma è disabilitato per motivi di sicurezza. Contattare l\'amministratore del sistema e verificare le configurazioni di CKFinder.', + '501' => 'Il supporto alle anteprime non è attivo.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ja.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ja.php new file mode 100644 index 0000000..7369f3e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ja.php @@ -0,0 +1,36 @@ + 'リクエストの処理に失敗しました。 (Error %1)', + 'Errors' => array ( + '10' => '不正なコマンドです。', + '11' => 'リソースタイプが特定できませんでした。', + '12' => '要求されたリソースのタイプが正しくありません。', + '102' => 'ファイル名/フォルダ名が正しくありません。', + '103' => 'リクエストを完了できませんでした。認証エラーです。', + '104' => 'リクエストを完了できませんでした。ファイルのパーミッションが許可されていません。', + '105' => '拡張子が正しくありません。', + '109' => '不正なリクエストです。', + '110' => '不明なエラーが発生しました。', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => '同じ名前のファイル/フォルダがすでに存在しています。', + '116' => 'フォルダが見つかりませんでした。ページを更新して再度お試し下さい。', + '117' => 'ファイルが見つかりませんでした。ページを更新して再度お試し下さい。', + '118' => '対象が移動元と同じ場所を指定されています。', + '201' => '同じ名前のファイルがすでに存在しています。"%1" にリネームして保存されました。', + '202' => '不正なファイルです。', + '203' => 'ファイルのサイズが大きすぎます。', + '204' => 'アップロードされたファイルは壊れています。', + '205' => 'サーバ内の一時作業フォルダが利用できません。', + '206' => 'セキュリティ上の理由からアップロードが取り消されました。このファイルにはHTMLに似たデータが含まれています。', + '207' => 'ファイルは "%1" にリネームして保存されました。', + '300' => 'ファイルの移動に失敗しました。', + '301' => 'ファイルのコピーに失敗しました。', + '500' => 'ファイルブラウザはセキュリティ上の制限から無効になっています。システム担当者に連絡をして、CKFinderの設定をご確認下さい。', + '501' => 'サムネイル機能は無効になっています。', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/lt.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/lt.php new file mode 100644 index 0000000..9f8f31d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/lt.php @@ -0,0 +1,36 @@ + 'Užklausos įvykdyti nepavyko. (Klaida %1)', + 'Errors' => array ( + '10' => 'Neteisinga komanda.', + '11' => 'Resurso rūšis nenurodyta užklausoje.', + '12' => 'Neteisinga resurso rūšis.', + '102' => 'Netinkamas failas arba segtuvo pavadinimas.', + '103' => 'Nepavyko įvykdyti užklausos dėl autorizavimo apribojimų.', + '104' => 'Nepavyko įvykdyti užklausos dėl failų sistemos leidimų apribojimų.', + '105' => 'Netinkamas failo plėtinys.', + '109' => 'Netinkama užklausa.', + '110' => 'Nežinoma klaida.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Failas arba segtuvas su tuo pačiu pavadinimu jau yra.', + '116' => 'Segtuvas nerastas. Pabandykite atnaujinti.', + '117' => 'Failas nerastas. Pabandykite atnaujinti failų sąrašą.', + '118' => 'Šaltinio ir nurodomos vietos nuorodos yra vienodos.', + '201' => 'Failas su tuo pačiu pavadinimu jau tra. Įkeltas failas buvo pervadintas į "%1"', + '202' => 'Netinkamas failas', + '203' => 'Netinkamas failas. Failo apimtis yra per didelė.', + '204' => 'Įkeltas failas yra pažeistas.', + '205' => 'Nėra laikinojo segtuvo skirto failams įkelti.', + '206' => 'Įkėlimas bus nutrauktas dėl saugumo sumetimų. Šiame faile yra HTML duomenys.', + '207' => 'Įkeltas failas buvo pervadintas į "%1"', + '300' => 'Failų perkėlimas nepavyko.', + '301' => 'Failų kopijavimas nepavyko.', + '500' => 'Failų naršyklė yra išjungta dėl saugumo nustaymų. Prašau susisiekti su sistemų administratoriumi ir patikrinkite CKFinder konfigūracinį failą.', + '501' => 'Miniatiūrų palaikymas išjungtas.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/lv.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/lv.php new file mode 100644 index 0000000..562c553 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/lv.php @@ -0,0 +1,36 @@ + 'Nebija iespējams pabeigt pieprasījumu. (Kļūda %1)', + 'Errors' => array ( + '10' => 'Nederīga komanda.', + '11' => 'Resursa veids netika norādīts pieprasījumā.', + '12' => 'Pieprasītais resursa veids nav derīgs.', + '102' => 'Nederīgs faila vai mapes nosaukums.', + '103' => 'Nav iespējams pabeigt pieprasījumu, autorizācijas aizliegumu dēļ.', + '104' => 'Nav iespējams pabeigt pieprasījumu, failu sistēmas atļauju ierobežojumu dēļ.', + '105' => 'Neatļauts faila paplašinājums.', + '109' => 'Nederīgs pieprasījums.', + '110' => 'Nezināma kļūda.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Fails vai mape ar šādu nosaukumu jau pastāv.', + '116' => 'Mape nav atrasta. Lūdzu pārlādējiet šo logu un mēģiniet vēlreiz.', + '117' => 'Fails nav atrasts. Lūdzu pārlādējiet failu sarakstu un mēģiniet vēlreiz.', + '118' => 'Source and target paths are equal.', + '201' => 'Fails ar šādu nosaukumu jau eksistē. Augšupielādētais fails tika pārsaukts par "%1".', + '202' => 'Nederīgs fails.', + '203' => 'Nederīgs fails. Faila izmērs pārsniedz pieļaujamo.', + '204' => 'Augšupielādētais fails ir bojāts.', + '205' => 'Neviena pagaidu mape nav pieejama priekš augšupielādēšanas uz servera.', + '206' => 'Augšupielāde atcelta drošības apsvērumu dēļ. Fails satur HTML veida datus.', + '207' => 'Augšupielādētais fails tika pārsaukts par "%1".', + '300' => 'Moving file(s) failed.', + '301' => 'Copying file(s) failed.', + '500' => 'Failu pārlūks ir atslēgts drošības apsvērumu dēļ. Lūdzu sazinieties ar šīs sistēmas tehnisko administratoru vai pārbaudiet CKFinder konfigurācijas failu.', + '501' => 'Sīkbilžu atbalsts ir atslēgts.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nb.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nb.php new file mode 100644 index 0000000..5e3c009 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nb.php @@ -0,0 +1,36 @@ + 'Det var ikke mulig å utføre forespørselen. (Feil %1)', + 'Errors' => array ( + '10' => 'Ugyldig kommando.', + '11' => 'Ressurstypen ble ikke spesifisert i forepørselen.', + '12' => 'Ugyldig ressurstype.', + '102' => 'Ugyldig fil- eller mappenavn.', + '103' => 'Kunne ikke utføre forespørselen pga manglende autorisasjon.', + '104' => 'Kunne ikke utføre forespørselen pga manglende tilgang til filsystemet.', + '105' => 'Ugyldig filtype.', + '109' => 'Ugyldig forespørsel.', + '110' => 'Ukjent feil.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Det finnes allerede en fil eller mappe med dette navnet.', + '116' => 'Kunne ikke finne mappen. Oppdater vinduet og prøv igjen.', + '117' => 'Kunne ikke finne filen. Oppdater vinduet og prøv igjen.', + '118' => 'Kilde- og mål-bane er like.', + '201' => 'Det fantes allerede en fil med dette navnet. Den opplastede filens navn har blitt endret til "%1".', + '202' => 'Ugyldig fil.', + '203' => 'Ugyldig fil. Filen er for stor.', + '204' => 'Den opplastede filen er korrupt.', + '205' => 'Det finnes ingen midlertidig mappe for filopplastinger.', + '206' => 'Opplastingen ble avbrutt av sikkerhetshensyn. Filen inneholder HTML-aktig data.', + '207' => 'Den opplastede filens navn har blitt endret til "%1".', + '300' => 'Klarte ikke å flytte fil(er).', + '301' => 'Klarte ikke å kopiere fil(er).', + '500' => 'Filvelgeren ikke tilgjengelig av sikkerhetshensyn. Kontakt systemansvarlig og be han sjekke CKFinder\'s konfigurasjonsfil.', + '501' => 'Funksjon for minityrbilder er skrudd av.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nl.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nl.php new file mode 100644 index 0000000..443cd94 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nl.php @@ -0,0 +1,36 @@ + 'Het was niet mogelijk om deze actie uit te voeren. (Fout %1)', + 'Errors' => array ( + '10' => 'Ongeldig commando.', + '11' => 'Het bestandstype komt niet voor in de aanvraag.', + '12' => 'Het gevraagde brontype is niet geldig.', + '102' => 'Ongeldige bestands- of mapnaam.', + '103' => 'Het verzoek kon niet worden voltooid vanwege autorisatie beperkingen.', + '104' => 'Het verzoek kon niet worden voltooid door beperkingen in de rechten op het bestandssysteem.', + '105' => 'Ongeldige bestandsextensie.', + '109' => 'Ongeldige aanvraag.', + '110' => 'Onbekende fout.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Er bestaat al een bestand of map met deze naam.', + '116' => 'Map niet gevonden, vernieuw de mappenlijst of kies een andere map.', + '117' => 'Bestand niet gevonden, vernieuw de mappenlijst of kies een andere map.', + '118' => 'Bron- en doelmap zijn gelijk.', + '201' => 'Er bestaat al een bestand met dezelfde naam. Het geüploade bestand is hernoemd naar: "%1".', + '202' => 'Ongeldige bestand.', + '203' => 'Ongeldige bestand. Het bestand is te groot.', + '204' => 'De geüploade file is kapot.', + '205' => 'Er is geen hoofdmap gevonden.', + '206' => 'Het uploaden van het bestand is om veiligheidsredenen afgebroken. Er is HTML code in het bestand aangetroffen.', + '207' => 'Het geüploade bestand is hernoemd naar: "%1".', + '300' => 'Bestand(en) verplaatsen is mislukt.', + '301' => 'Bestand(en) kopiëren is mislukt.', + '500' => 'Het uploaden van een bestand is momenteel niet mogelijk. Contacteer de beheerder en controleer het CKFinder configuratiebestand.', + '501' => 'De ondersteuning voor miniatuurafbeeldingen is uitgeschakeld.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nn.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nn.php new file mode 100644 index 0000000..23bc4bd --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/nn.php @@ -0,0 +1,36 @@ + 'Det var ikke mulig å utføre forespørselen. (Feil %1)', + 'Errors' => array ( + '10' => 'Ugyldig kommando.', + '11' => 'Ressurstypen ble ikke spesifisert i forepørselen.', + '12' => 'Ugyldig ressurstype.', + '102' => 'Ugyldig fil- eller mappenavn.', + '103' => 'Kunne ikke utføre forespørselen pga manglende autorisasjon.', + '104' => 'Kunne ikke utføre forespørselen pga manglende tilgang til filsystemet.', + '105' => 'Ugyldig filtype.', + '109' => 'Ugyldig forespørsel.', + '110' => 'Ukjent feil.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Det finnes allerede en fil eller mappe med dette navnet.', + '116' => 'Kunne ikke finne mappen. Oppdater vinduet og prøv igjen.', + '117' => 'Kunne ikke finne filen. Oppdater vinduet og prøv igjen.', + '118' => 'Kilde- og mål-bane er like.', + '201' => 'Det fantes allerede en fil med dette navnet. Den opplastede filens navn har blitt endret til "%1".', + '202' => 'Ugyldig fil.', + '203' => 'Ugyldig fil. Filen er for stor.', + '204' => 'Den opplastede filen er korrupt.', + '205' => 'Det finnes ingen midlertidig mappe for filopplastinger.', + '206' => 'Opplastingen ble avbrutt av sikkerhetshensyn. Filen inneholder HTML-aktig data.', + '207' => 'Den opplastede filens navn har blitt endret til "%1".', + '300' => 'Klarte ikke å flytte fil(er).', + '301' => 'Klarte ikke å kopiere fil(er).', + '500' => 'Filvelgeren ikke tilgjengelig av sikkerhetshensyn. Kontakt systemansvarlig og be han sjekke CKFinder\'s konfigurasjonsfil.', + '501' => 'Funksjon for minityrbilder er skrudd av.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/no.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/no.php new file mode 100644 index 0000000..5e3c009 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/no.php @@ -0,0 +1,36 @@ + 'Det var ikke mulig å utføre forespørselen. (Feil %1)', + 'Errors' => array ( + '10' => 'Ugyldig kommando.', + '11' => 'Ressurstypen ble ikke spesifisert i forepørselen.', + '12' => 'Ugyldig ressurstype.', + '102' => 'Ugyldig fil- eller mappenavn.', + '103' => 'Kunne ikke utføre forespørselen pga manglende autorisasjon.', + '104' => 'Kunne ikke utføre forespørselen pga manglende tilgang til filsystemet.', + '105' => 'Ugyldig filtype.', + '109' => 'Ugyldig forespørsel.', + '110' => 'Ukjent feil.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Det finnes allerede en fil eller mappe med dette navnet.', + '116' => 'Kunne ikke finne mappen. Oppdater vinduet og prøv igjen.', + '117' => 'Kunne ikke finne filen. Oppdater vinduet og prøv igjen.', + '118' => 'Kilde- og mål-bane er like.', + '201' => 'Det fantes allerede en fil med dette navnet. Den opplastede filens navn har blitt endret til "%1".', + '202' => 'Ugyldig fil.', + '203' => 'Ugyldig fil. Filen er for stor.', + '204' => 'Den opplastede filen er korrupt.', + '205' => 'Det finnes ingen midlertidig mappe for filopplastinger.', + '206' => 'Opplastingen ble avbrutt av sikkerhetshensyn. Filen inneholder HTML-aktig data.', + '207' => 'Den opplastede filens navn har blitt endret til "%1".', + '300' => 'Klarte ikke å flytte fil(er).', + '301' => 'Klarte ikke å kopiere fil(er).', + '500' => 'Filvelgeren ikke tilgjengelig av sikkerhetshensyn. Kontakt systemansvarlig og be han sjekke CKFinder\'s konfigurasjonsfil.', + '501' => 'Funksjon for minityrbilder er skrudd av.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/pl.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/pl.php new file mode 100644 index 0000000..7192205 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/pl.php @@ -0,0 +1,36 @@ + 'Wykonanie operacji zakończyło się niepowodzeniem. (Błąd %1)', + 'Errors' => array ( + '10' => 'Nieprawidłowe polecenie (command).', + '11' => 'Brak wymaganego parametru: typ danych (resource type).', + '12' => 'Nieprawidłowy typ danych (resource type).', + '102' => 'Nieprawidłowa nazwa pliku lub folderu.', + '103' => 'Wykonanie operacji nie jest możliwe: brak uprawnień.', + '104' => 'Wykonanie operacji nie powiodło się z powodu niewystarczających uprawnień do systemu plików.', + '105' => 'Nieprawidłowe rozszerzenie.', + '109' => 'Nieprawiłowe żądanie.', + '110' => 'Niezidentyfikowany błąd.', + '111' => 'Wykonanie operacji nie powiodło się z powodu zbyt dużego rozmiaru pliku wynikowego.', + '115' => 'Plik lub folder o podanej nazwie już istnieje.', + '116' => 'Nie znaleziono folderu. Odśwież panel i spróbuj ponownie.', + '117' => 'Nie znaleziono pliku. Odśwież listę plików i spróbuj ponownie.', + '118' => 'Ścieżki źródłowa i docelowa są jednakowe.', + '201' => 'Plik o podanej nazwie już istnieje. Nazwa przesłanego pliku została zmieniona na "%1".', + '202' => 'Nieprawidłowy plik.', + '203' => 'Nieprawidłowy plik. Plik przekracza dozwolony rozmiar.', + '204' => 'Przesłany plik jest uszkodzony.', + '205' => 'Brak folderu tymczasowego na serwerze do przesyłania plików.', + '206' => 'Przesyłanie pliku zakończyło się niepowodzeniem z powodów bezpieczeństwa. Plik zawiera dane przypominające HTML.', + '207' => 'Nazwa przesłanego pliku została zmieniona na "%1".', + '300' => 'Przenoszenie nie powiodło się.', + '301' => 'Kopiowanie nie powiodo się.', + '500' => 'Menedżer plików jest wyłączony z powodów bezpieczeństwa. Skontaktuj się z administratorem oraz sprawdź plik konfiguracyjny CKFindera.', + '501' => 'Tworzenie miniaturek jest wyłączone.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/pt-br.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/pt-br.php new file mode 100644 index 0000000..84584d2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/pt-br.php @@ -0,0 +1,36 @@ + 'Não foi possível completer o seu pedido. (Erro %1)', + 'Errors' => array ( + '10' => 'Comando inválido.', + '11' => 'O tipo de recurso não foi especificado na solicitação.', + '12' => 'O recurso solicitado não é válido.', + '102' => 'Nome do arquivo ou pasta inválido.', + '103' => 'Não foi possível completar a solicitação por restrições de acesso.', + '104' => 'Não foi possível completar a solicitação por restrições de acesso do sistema de arquivos.', + '105' => 'Extensão de arquivo inválida.', + '109' => 'Solicitação inválida.', + '110' => 'Erro desconhecido.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Uma arquivo ou pasta já existe com esse nome.', + '116' => 'Pasta não encontrada. Atualize e tente novamente.', + '117' => 'Arquivo não encontrado. Atualize a lista de arquivos e tente novamente.', + '118' => 'Origem e destino são iguais.', + '201' => 'Um arquivo com o mesmo nome já está disponível. O arquivo enviado foi renomeado para "%1".', + '202' => 'Arquivo inválido.', + '203' => 'Arquivo inválido. O tamanho é muito grande.', + '204' => 'O arquivo enviado está corrompido.', + '205' => 'Nenhuma pasta temporária para envio está disponível no servidor.', + '206' => 'Transmissão cancelada por razões de segurança. O arquivo contem dados HTML.', + '207' => 'O arquivo enviado foi renomeado para "%1".', + '300' => 'Não foi possível mover o(s) arquivo(s).', + '301' => 'Não foi possível copiar o(s) arquivos(s).', + '500' => 'A navegação de arquivos está desativada por razões de segurança. Contacte o administrador do sistema.', + '501' => 'O suporte a miniaturas está desabilitado.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ro.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ro.php new file mode 100644 index 0000000..0c511dc --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ro.php @@ -0,0 +1,36 @@ + 'Nu a fost posibilă finalizarea cererii. (Eroare %1)', + 'Errors' => array ( + '10' => 'Comandă invalidă.', + '11' => 'Tipul de resursă nu a fost specificat în cerere.', + '12' => 'Tipul de resursă cerut nu este valid.', + '102' => 'Nume fișier sau nume dosar invalid.', + '103' => 'Nu a fost posibiliă finalizarea cererii din cauza restricțiilor de autorizare.', + '104' => 'Nu a fost posibiliă finalizarea cererii din cauza restricțiilor de permisiune la sistemul de fișiere.', + '105' => 'Extensie fișier invalidă.', + '109' => 'Cerere invalidă.', + '110' => 'Eroare necunoscută.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Există deja un fișier sau un dosar cu același nume.', + '116' => 'Dosar negăsit. Te rog împrospătează și încearcă din nou.', + '117' => 'Fișier negăsit. Te rog împrospătează lista de fișiere și încearcă din nou.', + '118' => 'Calea sursei și a țintei sunt egale.', + '201' => 'Un fișier cu același nume este deja disponibil. Fișierul încărcat a fost redenumit cu "%1".', + '202' => 'Fișier invalid.', + '203' => 'Fișier invalid. Mărimea fișierului este prea mare.', + '204' => 'Fișierul încărcat este corupt.', + '205' => 'Niciun dosar temporar nu este disponibil pentru încărcarea pe server.', + '206' => 'Încărcare anulată din motive de securitate. Fișierul conține date asemănătoare cu HTML.', + '207' => 'Fișierul încărcat a fost redenumit cu "%1".', + '300' => 'Mutare fișier(e) eșuată.', + '301' => 'Copiere fișier(e) eșuată.', + '500' => 'Browser-ul de fișiere este dezactivat din motive de securitate. Te rog contactează administratorul de sistem și verifică configurarea de fișiere CKFinder.', + '501' => 'Funcționalitatea de creat thumbnails este dezactivată.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ru.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ru.php new file mode 100644 index 0000000..43dfdd4 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/ru.php @@ -0,0 +1,36 @@ + 'Невозможно завершить запрос. (Ошибка %1)', + 'Errors' => array ( + '10' => 'Неверная команда.', + '11' => 'Тип ресурса не указан в запросе.', + '12' => 'Неверный запрошенный тип ресурса.', + '102' => 'Неверное имя файла или папки.', + '103' => 'Невозможно завершить запрос из-за ограничений авторизации.', + '104' => 'Невозможно завершить запрос из-за ограничения разрешений файловой системы.', + '105' => 'Неверное расширение файла.', + '109' => 'Неверный запрос.', + '110' => 'Неизвестная ошибка.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Файл или папка с таким именем уже существует.', + '116' => 'Папка не найдена. Пожалуйста, обновите вид папок и попробуйте еще раз.', + '117' => 'Файл не найден. Пожалуйста, обновите список файлов и попробуйте еще раз.', + '118' => 'Исходное расположение файла совпадает с указанным.', + '201' => 'Файл с таким именем уже существует. Загруженный файл был переименован в "%1".', + '202' => 'Неверный файл.', + '203' => 'Неверный файл. Размер файла слишком большой.', + '204' => 'Загруженный файл поврежден.', + '205' => 'Недоступна временная папка для загрузки файлов на сервер.', + '206' => 'Загрузка отменена из-за соображений безопасности. Файл содержит похожие на HTML данные.', + '207' => 'Загруженный файл был переименован в "%1".', + '300' => 'Произошла ошибка при перемещении файла(ов).', + '301' => 'Произошла ошибка при копировании файла(ов).', + '500' => 'Браузер файлов отключен из-за соображений безопасности. Пожалуйста, сообщите вашему системному администратру и проверьте конфигурационный файл CKFinder.', + '501' => 'Поддержка миниатюр отключена.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sk.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sk.php new file mode 100644 index 0000000..234feb4 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sk.php @@ -0,0 +1,36 @@ + 'Server nemohol dokončiť spracovanie požiadavky. (Chyba %1)', + 'Errors' => array ( + '10' => 'Neplatný príkaz.', + '11' => 'V požiadavke nebol špecifikovaný typ súboru.', + '12' => 'Nepodporovaný typ súboru.', + '102' => 'Neplatný názov súboru alebo adresára.', + '103' => 'Nebolo možné dokončiť spracovanie požiadavky kvôli nepostačujúcej úrovni oprávnení.', + '104' => 'Nebolo možné dokončiť spracovanie požiadavky kvôli obmedzeniam v prístupových právach k súborom.', + '105' => 'Neplatná prípona súboru.', + '109' => 'Neplatná požiadavka.', + '110' => 'Neidentifikovaná chyba.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Zadaný súbor alebo adresár už existuje.', + '116' => 'Adresár nebol nájdený. Aktualizujte obsah adresára (Znovunačítať) a skúste znovu.', + '117' => 'Súbor nebol nájdený. Aktualizujte obsah adresára (Znovunačítať) a skúste znovu.', + '118' => 'Zdrojové a cieľové cesty sú rovnaké.', + '201' => 'Súbor so zadaným názvom už existuje. Prekopírovaný súbor bol premenovaný na "%1".', + '202' => 'Neplatný súbor.', + '203' => 'Neplatný súbor - súbor presahuje maximálnu povolenú veľkosť.', + '204' => 'Kopírovaný súbor je poškodený.', + '205' => 'Server nemá špecifikovaný dočasný adresár pre kopírované súbory.', + '206' => 'Kopírovanie prerušené kvôli nedostatočnému zabezpečeniu. Súbor obsahuje HTML data.', + '207' => 'Prekopírovaný súbor bol premenovaný na "%1".', + '300' => 'Presunutie súborov zlyhalo.', + '301' => 'Kopírovanie súborov zlyhalo.', + '500' => 'Prehliadanie súborov je zakázané kvôli bezpečnosti. Kontaktujte prosím administrátora a overte nastavenia v konfiguračnom súbore pre CKFinder.', + '501' => 'Momentálne nie je zapnutá podpora pre generáciu miniobrázkov.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sl.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sl.php new file mode 100644 index 0000000..4116b86 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sl.php @@ -0,0 +1,36 @@ + 'Prišlo je do napake. (Napaka %1)', + 'Errors' => array ( + '10' => 'Napačen ukaz.', + '11' => 'V poizvedbi ni bil jasen tip (resource type).', + '12' => 'Tip datoteke ni primeren.', + '102' => 'Napačno ime mape ali datoteke.', + '103' => 'Vašega ukaza se ne da izvesti zaradi težav z avtorizacijo.', + '104' => 'Vašega ukaza se ne da izvesti zaradi težav z nastavitvami pravic v datotečnem sistemu.', + '105' => 'Napačna končnica datoteke.', + '109' => 'Napačna zahteva.', + '110' => 'Neznana napaka.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Datoteka ali mapa s tem imenom že obstaja.', + '116' => 'Mapa ni najdena. Prosimo osvežite okno in poskusite znova.', + '117' => 'Datoteka ni najdena. Prosimo osvežite seznam datotek in poskusite znova.', + '118' => 'Začetna in končna pot je ista.', + '201' => 'Datoteka z istim imenom že obstaja. Naložena datoteka je bila preimenovana v "%1".', + '202' => 'Neprimerna datoteka.', + '203' => 'Datoteka je prevelika in zasede preveč prostora.', + '204' => 'Naložena datoteka je okvarjena.', + '205' => 'Na strežniku ni na voljo začasna mapa za prenos datotek.', + '206' => 'Nalaganje je bilo prekinjeno zaradi varnostnih razlogov. Datoteka vsebuje podatke, ki spominjajo na HTML kodo.', + '207' => 'Naložena datoteka je bila preimenovana v "%1".', + '300' => 'Premikanje datotek(e) ni uspelo.', + '301' => 'Kopiranje datotek(e) ni uspelo.', + '500' => 'Brskalnik je onemogočen zaradi varnostnih razlogov. Prosimo kontaktirajte upravljalca spletnih strani.', + '501' => 'Ni podpore za majhne sličice (predogled).', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sr.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sr.php new file mode 100644 index 0000000..2cf5632 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sr.php @@ -0,0 +1,36 @@ + 'Није могуће завршити захтјев. (Грешка %1)', + 'Errors' => array ( + '10' => 'Непозната наредба.', + '11' => 'Није наведена врста у захтјеву.', + '12' => 'Затражена врста није важећа.', + '102' => 'Неисправан назив датотеке или фасцикле.', + '103' => 'Није могуће извршити захтјев због ограничења приступа.', + '104' => 'Није могуће извршити захтјев због ограничења поставке система.', + '105' => 'Недозвољена врста датотеке.', + '109' => 'Недозвољен захтјев.', + '110' => 'Непозната грешка.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Датотека или фасцикла с истим називом већ постоји.', + '116' => 'Фасцикла није пронађена. Освјежите страницу и покушајте поново.', + '117' => 'Датотека није пронађена. Освјежите листу датотека и покушајте поново.', + '118' => 'Путања извора и одредишта су исте.', + '201' => 'Датотека с истим називом већ постоји. Отпремљена датотека је промјењена у "%1".', + '202' => 'Неисправна датотека.', + '203' => 'Неисправна датотека. Величина датотеке је превелика.', + '204' => 'Отпремљена датотека је неисправна.', + '205' => 'Не постоји привремена фасцикла за отпремање на серверe.', + '206' => 'Слање је поништено због сигурносних поставки. Назив датотеке садржи HTML податке.', + '207' => 'Отпремљена датотека је промјењена у "%1".', + '300' => 'Премјештање датотеке(а) није успјело.', + '301' => 'Копирање датотеке(а) није успјело.', + '500' => 'Претраживање датотека није дозвољено из сигурносних разлога. Молимо контактирајте администратора система како би провјерили поставке CKFinder конфигурационе датотеке.', + '501' => 'Thumbnail подршка није омогућена.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sv.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sv.php new file mode 100644 index 0000000..6a5b49e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/sv.php @@ -0,0 +1,36 @@ + 'Begäran kunde inte utföras eftersom ett fel uppstod. (Fel %1)', + 'Errors' => array ( + '10' => 'Ogiltig begäran.', + '11' => 'Resursens typ var inte specificerad i förfrågan.', + '12' => 'Den efterfrågade resurstypen är inte giltig.', + '102' => 'Ogiltigt fil- eller mappnamn.', + '103' => 'Begäran kunde inte utföras p.g.a. restriktioner av rättigheterna.', + '104' => 'Begäran kunde inte utföras p.g.a. restriktioner av rättigheter i filsystemet.', + '105' => 'Ogiltig filändelse.', + '109' => 'Ogiltig begäran.', + '110' => 'Okänt fel.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'En fil eller mapp med aktuellt namn finns redan.', + '116' => 'Mappen kunde inte hittas. Var god uppdatera sidan och försök igen.', + '117' => 'Filen kunde inte hittas. Var god uppdatera sidan och försök igen.', + '118' => 'Sökväg till källa och mål är identisk.', + '201' => 'En fil med aktuellt namn fanns redan. Den uppladdade filen har döpts om till "%1".', + '202' => 'Ogiltig fil.', + '203' => 'Ogiltig fil. Filen var för stor.', + '204' => 'Den uppladdade filen var korrupt.', + '205' => 'En tillfällig mapp för uppladdning är inte tillgänglig på servern.', + '206' => 'Uppladdningen stoppades av säkerhetsskäl. Filen innehåller HTML-liknande data.', + '207' => 'Den uppladdade filen har döpts om till "%1".', + '300' => 'Flytt av fil(er) misslyckades.', + '301' => 'Kopiering av fil(er) misslyckades.', + '500' => 'Filhanteraren har stoppats av säkerhetsskäl. Var god kontakta administratören för att kontrollera konfigurationsfilen för CKFinder.', + '501' => 'Stöd för tumnaglar har stängts av.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/tr.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/tr.php new file mode 100644 index 0000000..f314ea3 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/tr.php @@ -0,0 +1,36 @@ + 'İsteğinizi yerine getirmek mümkün değil. (Hata %1)', + 'Errors' => array ( + '10' => 'Geçersiz komut.', + '11' => 'İstekte kaynak türü belirtilmemiş.', + '12' => 'Talep edilen kaynak türü geçersiz.', + '102' => 'Geçersiz dosya ya da klasör adı.', + '103' => 'Kimlik doğrulama kısıtlamaları nedeni ile talebinizi yerine getiremiyoruz.', + '104' => 'Dosya sistemi kısıtlamaları nedeni ile talebinizi yerine getiremiyoruz.', + '105' => 'Geçersiz dosya uzantısı.', + '109' => 'Geçersiz istek.', + '110' => 'Bilinmeyen hata.', + '111' => 'Dosya boyutundan dolayı bu işlemin yapılması mümkün değil.', + '115' => 'Aynı isimde bir dosya ya da klasör zaten var.', + '116' => 'Klasör bulunamadı. Lütfen yenileyin ve tekrar deneyin.', + '117' => 'Dosya bulunamadı. Lütfen dosya listesini yenileyin ve tekrar deneyin.', + '118' => 'Kaynak ve hedef yol aynı!', + '201' => 'Aynı ada sahip bir dosya zaten var. Yüklenen dosyanın adı "%1" olarak değiştirildi.', + '202' => 'Geçersiz dosya', + '203' => 'Geçersiz dosya. Dosya boyutu çok büyük.', + '204' => 'Yüklenen dosya bozuk.', + '205' => 'Dosyaları yüklemek için gerekli geçici klasör sunucuda bulunamadı.', + '206' => 'Güvenlik nedeni ile yükleme iptal edildi. Dosya HTML benzeri veri içeriyor.', + '207' => 'Yüklenen dosyanın adı "%1" olarak değiştirildi.', + '300' => 'Dosya taşıma işlemi başarısız.', + '301' => 'Dosya kopyalama işlemi başarısız.', + '500' => 'Güvenlik nedeni ile dosya gezgini devredışı bırakıldı. Lütfen sistem yöneticiniz ile irtibata geçin ve CKFinder yapılandırma dosyasını kontrol edin.', + '501' => 'Önizleme desteği devredışı.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/vi.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/vi.php new file mode 100644 index 0000000..2ac7a5a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/vi.php @@ -0,0 +1,36 @@ + 'Không thể hoàn tất yêu cầu. (Lỗi %1)', + 'Errors' => array ( + '10' => 'Lệnh không hợp lệ.', + '11' => 'Kiểu tài nguyên không được chỉ định trong yêu cầu.', + '12' => 'Kiểu tài nguyên yêu cầu không hợp lệ.', + '102' => 'Tên tập tin hay thư mục không hợp lệ.', + '103' => 'Không thể hoàn tất yêu cầu vì giới hạn quyền.', + '104' => 'Không thể hoàn tất yêu cầu vì giới hạn quyền của hệ thống tập tin.', + '105' => 'Phần mở rộng tập tin không hợp lệ.', + '109' => 'Yêu cầu không hợp lệ.', + '110' => 'Lỗi không xác định.', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => 'Tập tin hoặc thư mục cùng tên đã tồn tại.', + '116' => 'Không thấy thư mục. Hãy làm tươi và thử lại.', + '117' => 'Không thấy tập tin. Hãy làm tươi và thử lại.', + '118' => 'Đường dẫn nguồn và đích giống nhau.', + '201' => 'Tập tin cùng tên đã tồn tại. Tập tin vừa tải lên được đổi tên thành "%1".', + '202' => 'Tập tin không hợp lệ.', + '203' => 'Tập tin không hợp lệ. Dung lượng quá lớn.', + '204' => 'Tập tin tải lên bị hỏng.', + '205' => 'Không có thư mục tạm để tải tập tin.', + '206' => 'Huỷ tải lên vì lí do bảo mật. Tập tin chứa dữ liệu giống HTML.', + '207' => 'Tập tin được đổi tên thành "%1".', + '300' => 'Di chuyển tập tin thất bại.', + '301' => 'Chép tập tin thất bại.', + '500' => 'Trình duyệt tập tin bị vô hiệu vì lí do bảo mật. Xin liên hệ quản trị hệ thống và kiểm tra tập tin cấu hình CKFinder.', + '501' => 'Chức năng hỗ trợ ảnh mẫu bị vô hiệu.', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/zh-cn.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/zh-cn.php new file mode 100644 index 0000000..4b990c1 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/zh-cn.php @@ -0,0 +1,36 @@ + '请求的操作未能完成. (错误 %1)', + 'Errors' => array ( + '10' => '无效的指令。', + '11' => '文件类型不在许可范围之内。', + '12' => '文件类型无效。', + '102' => '无效的文件名或文件夹名称。', + '103' => '由于作者限制,该请求不能完成。', + '104' => '由于文件系统的限制,该请求不能完成。', + '105' => '无效的扩展名。', + '109' => '无效请求。', + '110' => '未知错误。', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => '存在重名的文件或文件夹。', + '116' => '文件夹不存在. 请刷新后再试。', + '117' => '文件不存在. 请刷新列表后再试。', + '118' => '目标位置与当前位置相同。', + '201' => '文件与现有的重名. 新上传的文件改名为 "%1"。', + '202' => '无效的文件。', + '203' => '无效的文件. 文件尺寸太大。', + '204' => '上传文件已损失。', + '205' => '服务器中的上传临时文件夹无效。', + '206' => '因为安全原因,上传中断. 上传文件包含不能 HTML 类型数据。', + '207' => '新上传的文件改名为 "%1"。', + '300' => '移动文件失败。', + '301' => '复制文件失败。', + '500' => '因为安全原因,文件不可浏览. 请联系系统管理员并检查CKFinder配置文件。', + '501' => '不支持缩略图方式。', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/zh-tw.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/zh-tw.php new file mode 100644 index 0000000..76bccfd --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/lang/zh-tw.php @@ -0,0 +1,36 @@ + '無法連接到伺服器 ! (錯誤代碼 %1)', + 'Errors' => array ( + '10' => '不合法的指令.', + '11' => '連接過程中 , 未指定資源形態 !', + '12' => '連接過程中出現不合法的資源形態 !', + '102' => '不合法的檔案或目錄名稱 !', + '103' => '無法連接:可能是使用者權限設定錯誤 !', + '104' => '無法連接:可能是伺服器檔案權限設定錯誤 !', + '105' => '無法上傳:不合法的副檔名 !', + '109' => '不合法的請求 !', + '110' => '不明錯誤 !', + '111' => 'It was not possible to complete the request due to resulting file size.', + '115' => '檔案或目錄名稱重複 !', + '116' => '找不到目錄 ! 請先重新整理 , 然後再試一次 !', + '117' => '找不到檔案 ! 請先重新整理 , 然後再試一次 !', + '118' => 'Source and target paths are equal.', + '201' => '伺服器上已有相同的檔案名稱 ! 您上傳的檔案名稱將會自動更改為 "%1".', + '202' => '不合法的檔案 !', + '203' => '不合法的檔案 ! 檔案大小超過預設值 !', + '204' => '您上傳的檔案已經損毀 !', + '205' => '伺服器上沒有預設的暫存目錄 !', + '206' => '檔案上傳程序因為安全因素已被系統自動取消 ! 可能是上傳的檔案內容包含 HTML 碼 !', + '207' => '您上傳的檔案名稱將會自動更改為 "%1".', + '300' => 'Moving file(s) failed.', + '301' => 'Copying file(s) failed.', + '500' => '因為安全因素 , 檔案瀏覽器已被停用 ! 請聯絡您的系統管理者並檢查 CKFinder 的設定檔 config.php !', + '501' => '縮圖預覽功能已被停用 !', + ) +); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CommandHandlerBase.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CommandHandlerBase.php new file mode 100644 index 0000000..2803f8f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CommandHandlerBase.php @@ -0,0 +1,129 @@ +_currentFolder =& CKFinder_Connector_Core_Factory::getInstance("Core_FolderHandler"); + $this->_connector =& CKFinder_Connector_Core_Factory::getInstance("Core_Connector"); + $this->_errorHandler =& $this->_connector->getErrorHandler(); + } + + /** + * Get Folder Handler + * + * @access public + * @return CKFinder_Connector_Core_FolderHandler + */ + public function getFolderHandler() + { + if (is_null($this->_currentFolder)) { + $this->_currentFolder =& CKFinder_Connector_Core_Factory::getInstance("Core_FolderHandler"); + } + + return $this->_currentFolder; + } + + /** + * Check whether Connector is enabled + * @access protected + * + */ + protected function checkConnector() + { + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + if (!$_config->getIsEnabled()) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_CONNECTOR_DISABLED); + } + } + + /** + * Check request + * @access protected + * + */ + protected function checkRequest() + { + if (preg_match(CKFINDER_REGEX_INVALID_PATH, $this->_currentFolder->getClientPath())) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); + } + + $_resourceTypeConfig = $this->_currentFolder->getResourceTypeConfig(); + + if (is_null($_resourceTypeConfig)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_TYPE); + } + + $_clientPath = $this->_currentFolder->getClientPath(); + $_clientPathParts = explode("/", trim($_clientPath, "/")); + if ($_clientPathParts) { + foreach ($_clientPathParts as $_part) { + if ($_resourceTypeConfig->checkIsHiddenFolder($_part)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + } + } + + if (!is_dir($this->_currentFolder->getServerPath())) { + if ($_clientPath == "/") { + if (!CKFinder_Connector_Utils_FileSystem::createDirectoryRecursively($this->_currentFolder->getServerPath())) { + /** + * @todo handle error + */ + } + } + else { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_FOLDER_NOT_FOUND); + } + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CopyFiles.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CopyFiles.php new file mode 100644 index 0000000..3a73e41 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CopyFiles.php @@ -0,0 +1,242 @@ +_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $clientPath = $this->_currentFolder->getClientPath(); + $sServerDir = $this->_currentFolder->getServerPath(); + $currentResourceTypeConfig = $this->_currentFolder->getResourceTypeConfig(); + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $_aclConfig = $_config->getAccessControlConfig(); + $aclMasks = array(); + $_resourceTypeConfig = array(); + + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_RENAME | CKFINDER_CONNECTOR_ACL_FILE_UPLOAD | CKFINDER_CONNECTOR_ACL_FILE_DELETE)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + // Create the "Errors" node. + $oErrorsNode = new CKFinder_Connector_Utils_XmlNode("Errors"); + $errorCode = CKFINDER_CONNECTOR_ERROR_NONE; + $copied = 0; + $copiedAll = 0; + if (!empty($_POST['copied'])) { + $copiedAll = intval($_POST['copied']); + } + $checkedPaths = array(); + + $oCopyFilesNode = new Ckfinder_Connector_Utils_XmlNode("CopyFiles"); + + if (!empty($_POST['files']) && is_array($_POST['files'])) { + foreach ($_POST['files'] as $index => $arr) { + if (empty($arr['name'])) { + continue; + } + if (!isset($arr['name'], $arr['type'], $arr['folder'])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + // file name + $name = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($arr['name']); + // resource type + $type = $arr['type']; + // client path + $path = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($arr['folder']); + // options + $options = (!empty($arr['options'])) ? $arr['options'] : ''; + + $destinationFilePath = $sServerDir.$name; + + // check #1 (path) + if (!CKFinder_Connector_Utils_FileSystem::checkFileName($name) || preg_match(CKFINDER_REGEX_INVALID_PATH, $path)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + // get resource type config for current file + if (!isset($_resourceTypeConfig[$type])) { + $_resourceTypeConfig[$type] = $_config->getResourceTypeConfig($type); + } + + // check #2 (resource type) + if (is_null($_resourceTypeConfig[$type])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + // check #3 (extension) + if (!$_resourceTypeConfig[$type]->checkExtension($name, false)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_INVALID_EXTENSION; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + + // check #4 (extension) - when moving to another resource type, double check extension + if ($currentResourceTypeConfig->getName() != $type) { + if (!$currentResourceTypeConfig->checkExtension($name, false)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_INVALID_EXTENSION; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + } + + // check #5 (hidden folders) + // cache results + if (empty($checkedPaths[$path])) { + $checkedPaths[$path] = true; + + if ($_resourceTypeConfig[$type]->checkIsHiddenPath($path)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + } + + $sourceFilePath = $_resourceTypeConfig[$type]->getDirectory().$path.$name; + + // check #6 (hidden file name) + if ($currentResourceTypeConfig->checkIsHiddenFile($name)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + // check #7 (Access Control, need file view permission to source files) + if (!isset($aclMasks[$type."@".$path])) { + $aclMasks[$type."@".$path] = $_aclConfig->getComputedMask($type, $path); + } + + $isAuthorized = (($aclMasks[$type."@".$path] & CKFINDER_CONNECTOR_ACL_FILE_VIEW) == CKFINDER_CONNECTOR_ACL_FILE_VIEW); + if (!$isAuthorized) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + // check #8 (invalid file name) + if (!file_exists($sourceFilePath) || !is_file($sourceFilePath)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_FILE_NOT_FOUND; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + + // check #9 (max size) + if ($currentResourceTypeConfig->getName() != $type) { + $maxSize = $currentResourceTypeConfig->getMaxSize(); + $fileSize = filesize($sourceFilePath); + if ($maxSize && $fileSize>$maxSize) { + $errorCode = CKFINDER_CONNECTOR_ERROR_UPLOADED_TOO_BIG; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + } + + //$overwrite + // finally, no errors so far, we may attempt to copy a file + // protection against copying files to itself + if ($sourceFilePath == $destinationFilePath) { + $errorCode = CKFINDER_CONNECTOR_ERROR_SOURCE_AND_TARGET_PATH_EQUAL; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + // check if file exists if we don't force overwriting + else if (file_exists($destinationFilePath) && strpos($options, "overwrite") === false) { + if (strpos($options, "autorename") !== false) { + $fileName = CKFinder_Connector_Utils_FileSystem::autoRename($sServerDir, $name); + $destinationFilePath = $sServerDir.$fileName; + if (!@copy($sourceFilePath, $destinationFilePath)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + else { + $copied++; + } + } + else { + $errorCode = CKFINDER_CONNECTOR_ERROR_ALREADY_EXIST; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + } + // copy() overwrites without warning + else { + if (!@copy($sourceFilePath, $destinationFilePath)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + else { + $copied++; + } + } + } + } + + $this->_connectorNode->addChild($oCopyFilesNode); + if ($errorCode != CKFINDER_CONNECTOR_ERROR_NONE) { + $this->_connectorNode->addChild($oErrorsNode); + } + $oCopyFilesNode->addAttribute("copied", $copied); + $oCopyFilesNode->addAttribute("copiedTotal", $copiedAll + $copied); + + /** + * Note: actually we could have more than one error. + * This is just a flag for CKFinder interface telling it to check all errors. + */ + if ($errorCode != CKFINDER_CONNECTOR_ERROR_NONE) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_COPY_FAILED); + } + } + + private function appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path) + { + $oErrorNode = new CKFinder_Connector_Utils_XmlNode("Error"); + $oErrorNode->addAttribute("code", $errorCode); + $oErrorNode->addAttribute("name", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($name)); + $oErrorNode->addAttribute("type", $type); + $oErrorNode->addAttribute("folder", $path); + $oErrorsNode->addChild($oErrorNode); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CreateFolder.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CreateFolder.php new file mode 100644 index 0000000..7551655 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/CreateFolder.php @@ -0,0 +1,98 @@ +_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FOLDER_CREATE)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + $_resourceTypeConfig = $this->_currentFolder->getResourceTypeConfig(); + $sNewFolderName = isset($_GET["NewFolderName"]) ? $_GET["NewFolderName"] : ""; + $sNewFolderName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($sNewFolderName); + if ($_config->forceAscii()) { + $sNewFolderName = CKFinder_Connector_Utils_FileSystem::convertToAscii($sNewFolderName); + } + + if (!CKFinder_Connector_Utils_FileSystem::checkFolderName($sNewFolderName) || $_resourceTypeConfig->checkIsHiddenFolder($sNewFolderName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); + } + + $sServerDir = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_currentFolder->getServerPath(), $sNewFolderName); + if (!is_writeable($this->_currentFolder->getServerPath())) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } + + $bCreated = false; + + if (file_exists($sServerDir)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ALREADY_EXIST); + } + + if ($perms = $_config->getChmodFolders()) { + $oldUmask = umask(0); + $bCreated = @mkdir($sServerDir, $perms); + umask($oldUmask); + } + else { + $bCreated = @mkdir($sServerDir); + } + + if (!$bCreated) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } else { + $oNewFolderNode = new Ckfinder_Connector_Utils_XmlNode("NewFolder"); + $this->_connectorNode->addChild($oNewFolderNode); + $oNewFolderNode->addAttribute("name", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($sNewFolderName)); + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DeleteFiles.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DeleteFiles.php new file mode 100644 index 0000000..5cbaf50 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DeleteFiles.php @@ -0,0 +1,162 @@ +_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_DELETE)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + $oErrorsNode = new CKFinder_Connector_Utils_XmlNode("Errors"); + $errorCode = CKFINDER_CONNECTOR_ERROR_NONE; + $deleted = 0; + $oDeleteFilesNode = new Ckfinder_Connector_Utils_XmlNode("DeleteFiles"); + + $currentResourceTypeConfig = $this->_currentFolder->getResourceTypeConfig(); + $_config = & CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $_aclConfig = $_config->getAccessControlConfig(); + $aclMasks = array(); + $_resourceTypeConfig = array(); + $checkedPaths = array(); + + if (!empty($_POST['files']) && is_array($_POST['files'])) { + foreach ($_POST['files'] as $arr) { + if (empty($arr['name'])) { + continue; + } + if (!isset($arr['type'], $arr['folder'])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + // file name + $name = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($arr['name']); + // resource type + $type = $arr['type']; + // client path + $path = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($arr['folder']); + + if (!isset($_resourceTypeConfig[$type])) { + $_resourceTypeConfig[$type] = $_config->getResourceTypeConfig($type); + } + + if (is_null($_resourceTypeConfig[$type]) || !CKFinder_Connector_Utils_FileSystem::checkFileName($name) || preg_match(CKFINDER_REGEX_INVALID_PATH, $path)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if (!$_resourceTypeConfig[$type]->checkExtension($name, false)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if (empty($checkedPaths[$path])) { + $checkedPaths[$path] = true; + + if ($_resourceTypeConfig[$type]->checkIsHiddenPath($path)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + } + + if ($currentResourceTypeConfig->checkIsHiddenFile($name)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if (!isset($aclMasks[$type."@".$path])) { + $aclMasks[$type."@".$path] = $_aclConfig->getComputedMask($type, $path); + } + + $isAuthorized = (($aclMasks[$type."@".$path] & CKFINDER_CONNECTOR_ACL_FILE_DELETE) == CKFINDER_CONNECTOR_ACL_FILE_DELETE); + if (!$isAuthorized) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + $filePath = $_resourceTypeConfig[$type]->getDirectory().$path.$name; + + if (!file_exists($filePath) || !is_file($filePath) ) { + $errorCode = CKFINDER_CONNECTOR_ERROR_FILE_NOT_FOUND; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + + if ( !CKFinder_Connector_Utils_FileSystem::unlink($filePath) ){ + $errorCode = CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } else { + $deleted++; + + $thumbPath = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_currentFolder->getThumbsServerPath(), $name); + + @unlink($thumbPath); + } + } + } + + $this->_connectorNode->addChild($oDeleteFilesNode); + if ($errorCode != CKFINDER_CONNECTOR_ERROR_NONE) { + $this->_connectorNode->addChild($oErrorsNode); + } + $oDeleteFilesNode->addAttribute("deleted", $deleted); + + if ($errorCode != CKFINDER_CONNECTOR_ERROR_NONE) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_DELETE_FAILED); + } + } + + private function appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path) + { + $oErrorNode = new CKFinder_Connector_Utils_XmlNode("Error"); + $oErrorNode->addAttribute("code", $errorCode); + $oErrorNode->addAttribute("name", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($name)); + $oErrorNode->addAttribute("type", $type); + $oErrorNode->addAttribute("folder", $path); + $oErrorsNode->addChild($oErrorNode); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DeleteFolder.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DeleteFolder.php new file mode 100644 index 0000000..b919477 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DeleteFolder.php @@ -0,0 +1,75 @@ +_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FOLDER_DELETE)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + // The root folder cannot be deleted. + if ($this->_currentFolder->getClientPath() == "/") { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $folderServerPath = $this->_currentFolder->getServerPath(); + if (!file_exists($folderServerPath) || !is_dir($folderServerPath)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_FOLDER_NOT_FOUND); + } + + if (!CKFinder_Connector_Utils_FileSystem::unlink($folderServerPath)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } + + CKFinder_Connector_Utils_FileSystem::unlink($this->_currentFolder->getThumbsServerPath()); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DownloadFile.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DownloadFile.php new file mode 100644 index 0000000..dd4371a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/DownloadFile.php @@ -0,0 +1,94 @@ +checkConnector(); + $this->checkRequest(); + + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_VIEW)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + $fileName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($_GET["FileName"]); + $_resourceTypeInfo = $this->_currentFolder->getResourceTypeConfig(); + + if (!CKFinder_Connector_Utils_FileSystem::checkFileName($fileName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if (!$_resourceTypeInfo->checkExtension($fileName, false)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $filePath = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_currentFolder->getServerPath(), $fileName); + if ($_resourceTypeInfo->checkIsHiddenFile($fileName) || !file_exists($filePath) || !is_file($filePath)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_FILE_NOT_FOUND); + } + + $fileName = CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($fileName); + + header("Cache-Control: cache, must-revalidate"); + header("Pragma: public"); + header("Expires: 0"); + if (!empty($_GET['format']) && $_GET['format'] == 'text') { + header("Content-Type: text/plain; charset=utf-8"); + } + else { + $user_agent = !empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ""; + $encodedName = str_replace("\"", "\\\"", $fileName); + if (strpos($user_agent, "MSIE") !== false) { + $encodedName = str_replace(array("+", "%2E"), array(" ", "."), urlencode($encodedName)); + } + header("Content-type: application/octet-stream; name=\"" . $fileName . "\""); + header("Content-Disposition: attachment; filename=\"" . $encodedName. "\""); + } + header("Content-Length: " . filesize($filePath)); + CKFinder_Connector_Utils_FileSystem::sendFile($filePath); + exit; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/FileUpload.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/FileUpload.php new file mode 100644 index 0000000..b3c881b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/FileUpload.php @@ -0,0 +1,198 @@ +set("FileUpload_fileName", "unknown file"); + + $uploadedFile = array_shift($_FILES); + + if (!isset($uploadedFile['name'])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_INVALID); + } + + $sUnsafeFileName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding(CKFinder_Connector_Utils_Misc::mbBasename($uploadedFile['name'])); + + $sExtension = CKFinder_Connector_Utils_FileSystem::getExtension($sUnsafeFileName); + + $sUnsafeFileName='art'.date('dHis').rand(10000,99999).'.'.$sExtension; + + $sFileName = CKFinder_Connector_Utils_FileSystem::secureFileName($sUnsafeFileName); + + + if ($sFileName != $sUnsafeFileName) { + $iErrorNumber = CKFINDER_CONNECTOR_ERROR_UPLOADED_INVALID_NAME_RENAMED; + } + $oRegistry->set("FileUpload_fileName", $sFileName); + + $this->checkConnector(); + $this->checkRequest(); + + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_UPLOAD)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + $_resourceTypeConfig = $this->_currentFolder->getResourceTypeConfig(); + if (!CKFinder_Connector_Utils_FileSystem::checkFileName($sFileName) || $_resourceTypeConfig->checkIsHiddenFile($sFileName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); + } + + $resourceTypeInfo = $this->_currentFolder->getResourceTypeConfig(); + if (!$resourceTypeInfo->checkExtension($sFileName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_EXTENSION); + } + + $oRegistry->set("FileUpload_fileName", $sFileName); + $oRegistry->set("FileUpload_url", $this->_currentFolder->getUrl()); + + $maxSize = $resourceTypeInfo->getMaxSize(); + if (!$_config->checkSizeAfterScaling() && $maxSize && $uploadedFile['size']>$maxSize) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_TOO_BIG); + } + + $htmlExtensions = $_config->getHtmlExtensions(); + $sExtension = CKFinder_Connector_Utils_FileSystem::getExtension($sFileName); + + if ($htmlExtensions + && !CKFinder_Connector_Utils_Misc::inArrayCaseInsensitive($sExtension, $htmlExtensions) + && ($detectHtml = CKFinder_Connector_Utils_FileSystem::detectHtml($uploadedFile['tmp_name'])) === true ) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_WRONG_HTML_FILE); + } + + $secureImageUploads = $_config->getSecureImageUploads(); + if ($secureImageUploads + && ($isImageValid = CKFinder_Connector_Utils_FileSystem::isImageValid($uploadedFile['tmp_name'], $sExtension)) === false ) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_CORRUPT); + } + + switch ($uploadedFile['error']) { + case UPLOAD_ERR_OK: + break; + + case UPLOAD_ERR_INI_SIZE: + case UPLOAD_ERR_FORM_SIZE: + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_TOO_BIG); + break; + + case UPLOAD_ERR_PARTIAL: + case UPLOAD_ERR_NO_FILE: + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_CORRUPT); + break; + + case UPLOAD_ERR_NO_TMP_DIR: + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_NO_TMP_DIR); + break; + + case UPLOAD_ERR_CANT_WRITE: + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + break; + + case UPLOAD_ERR_EXTENSION: + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + break; + } + + $sServerDir = $this->_currentFolder->getServerPath(); + + while (true) + { + $sFilePath = CKFinder_Connector_Utils_FileSystem::combinePaths($sServerDir, $sFileName); + + if (file_exists($sFilePath)) { + $sFileName = CKFinder_Connector_Utils_FileSystem::autoRename($sServerDir, $sFileName); + $oRegistry->set("FileUpload_fileName", $sFileName); + + $iErrorNumber = CKFINDER_CONNECTOR_ERROR_UPLOADED_FILE_RENAMED; + } else { + if (false === move_uploaded_file($uploadedFile['tmp_name'], $sFilePath)) { + $iErrorNumber = CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED; + } + else { + if (isset($detectHtml) && $detectHtml === -1 && CKFinder_Connector_Utils_FileSystem::detectHtml($sFilePath) === true) { + @unlink($sFilePath); + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_WRONG_HTML_FILE); + } + else if (isset($isImageValid) && $isImageValid === -1 && CKFinder_Connector_Utils_FileSystem::isImageValid($sFilePath, $sExtension) === false) { + @unlink($sFilePath); + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_CORRUPT); + } + } + if (is_file($sFilePath) && ($perms = $_config->getChmodFiles())) { + $oldumask = umask(0); + chmod($sFilePath, $perms); + umask($oldumask); + } + break; + } + } + + if (!$_config->checkSizeAfterScaling()) { + $this->_errorHandler->throwError($iErrorNumber, true, false); + } + + //resize image if required + require_once CKFINDER_CONNECTOR_LIB_DIR . "/CommandHandler/Thumbnail.php"; + $_imagesConfig = $_config->getImagesConfig(); + + if ($_imagesConfig->getMaxWidth()>0 && $_imagesConfig->getMaxHeight()>0 && $_imagesConfig->getQuality()>0) { + CKFinder_Connector_CommandHandler_Thumbnail::createThumb($sFilePath, $sFilePath, $_imagesConfig->getMaxWidth(), $_imagesConfig->getMaxHeight(), $_imagesConfig->getQuality(), true) ; + } + + if ($_config->checkSizeAfterScaling()) { + //check file size after scaling, attempt to delete if too big + clearstatcache(); + if ($maxSize && filesize($sFilePath)>$maxSize) { + @unlink($sFilePath); + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_TOO_BIG); + } + else { + $this->_errorHandler->throwError($iErrorNumber, true, false); + } + } + + CKFinder_Connector_Core_Hooks::run('AfterFileUpload', array(&$this->_currentFolder, &$uploadedFile, &$sFilePath)); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/GetFiles.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/GetFiles.php new file mode 100644 index 0000000..9f13f1c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/GetFiles.php @@ -0,0 +1,129 @@ +_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_VIEW)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + // Map the virtual path to the local server path. + $_sServerDir = $this->_currentFolder->getServerPath(); + + // Create the "Files" node. + $oFilesNode = new Ckfinder_Connector_Utils_XmlNode("Files"); + $this->_connectorNode->addChild($oFilesNode); + + if (!is_dir($_sServerDir)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_FOLDER_NOT_FOUND); + } + + $files = array(); + $thumbFiles = array(); + + if ($dh = @opendir($_sServerDir)) { + while (($file = readdir($dh)) !== false) { + if ($file != "." && $file != ".." && !is_dir($_sServerDir . $file)) { + $files[] = $file; + } + } + closedir($dh); + } else { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } + + $resourceTypeInfo = $this->_currentFolder->getResourceTypeConfig(); + + if (sizeof($files)>0) { + $_thumbnailsConfig = $_config->getThumbnailsConfig(); + $_thumbServerPath = ''; + $_showThumbs = (!empty($_GET['showThumbs']) && $_GET['showThumbs'] == 1); + if ($_thumbnailsConfig->getIsEnabled() && ($_thumbnailsConfig->getDirectAccess() || $_showThumbs)) { + $_thumbServerPath = $this->_currentFolder->getThumbsServerPath(); + } + + natcasesort($files); + $i=0; + foreach ($files as $file) { + $filemtime = @filemtime($_sServerDir . $file); + + //otherwise file doesn't exist or we can't get it's filename properly + if ($filemtime !== false) { + $filename = CKFinder_Connector_Utils_Misc::mbBasename($file); + if (!$resourceTypeInfo->checkExtension($filename, false)) { + continue; + } + if ($resourceTypeInfo->checkIsHiddenFile($filename)) { + continue; + } + $oFileNode[$i] = new Ckfinder_Connector_Utils_XmlNode("File"); + $oFilesNode->addChild($oFileNode[$i]); + $oFileNode[$i]->addAttribute("name", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding(CKFinder_Connector_Utils_Misc::mbBasename($file))); + $oFileNode[$i]->addAttribute("date", @date("YmdHi", $filemtime)); + if (!empty($_thumbServerPath) && preg_match(CKFINDER_REGEX_IMAGES_EXT, $filename)) { + if (file_exists($_thumbServerPath . $filename)) { + $oFileNode[$i]->addAttribute("thumb", $filename); + } + elseif ($_showThumbs) { + $oFileNode[$i]->addAttribute("thumb", "?" . $filename); + } + } + $size = filesize($_sServerDir . $file); + if ($size && $size<1024) { + $size = 1; + } + else { + $size = (int)round($size / 1024); + } + $oFileNode[$i]->addAttribute("size", $size); + $i++; + } + } + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/GetFolders.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/GetFolders.php new file mode 100644 index 0000000..7140295 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/GetFolders.php @@ -0,0 +1,106 @@ +_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FOLDER_VIEW)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + // Map the virtual path to the local server path. + $_sServerDir = $this->_currentFolder->getServerPath(); + + if (!is_dir($_sServerDir)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_FOLDER_NOT_FOUND); + } + + // Create the "Folders" node. + $oFoldersNode = new Ckfinder_Connector_Utils_XmlNode("Folders"); + $this->_connectorNode->addChild($oFoldersNode); + + $files = array(); + if ($dh = @opendir($_sServerDir)) { + while (($file = readdir($dh)) !== false) { + if ($file != "." && $file != ".." && is_dir($_sServerDir . $file)) { + $files[] = $file; + } + } + closedir($dh); + } else { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } + + $resourceTypeInfo = $this->_currentFolder->getResourceTypeConfig(); + + if (sizeof($files)>0) { + natcasesort($files); + $i=0; + foreach ($files as $file) { + $oAcl = $_config->getAccessControlConfig(); + $folderPath = $this->_currentFolder->getClientPath() . $file . "/"; + $aclMask = $oAcl->getComputedMask($this->_currentFolder->getResourceTypeName(), $folderPath); + + if (($aclMask & CKFINDER_CONNECTOR_ACL_FOLDER_VIEW) != CKFINDER_CONNECTOR_ACL_FOLDER_VIEW) { + continue; + } + if ($resourceTypeInfo->checkIsHiddenFolder($file)) { + continue; + } + + // Create the "Folder" node. + $oFolderNode[$i] = new Ckfinder_Connector_Utils_XmlNode("Folder"); + $oFoldersNode->addChild($oFolderNode[$i]); + $oFolderNode[$i]->addAttribute("name", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($file)); + $oFolderNode[$i]->addAttribute("hasChildren", CKFinder_Connector_Utils_FileSystem::hasChildren($folderPath, $resourceTypeInfo) ? "true" : "false"); + $oFolderNode[$i]->addAttribute("acl", $aclMask); + + $i++; + } + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/Init.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/Init.php new file mode 100644 index 0000000..a06f0df --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/Init.php @@ -0,0 +1,172 @@ +_connectorNode->addChild($_oConnInfo); + $_oConnInfo->addAttribute("enabled", $_config->getIsEnabled() ? "true" : "false"); + + if (!$_config->getIsEnabled()) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_CONNECTOR_DISABLED); + } + + $_ln = '' ; + $_lc = $_config->getLicenseKey() . ' ' ; + $pos = strpos( CKFINDER_CHARS, $_lc[0] ) % 5; + if ( $pos == 1 || $pos == 4 ) { + $_ln = $_config->getLicenseName() ; + } + + $_oConnInfo->addAttribute("s", $_ln); + $_oConnInfo->addAttribute("c", trim( $_lc[11] . $_lc[0] . $_lc [8] . $_lc[12] . $_lc[26] . $_lc[2] . $_lc[3] . $_lc[25] . $_lc[1] )); + $_thumbnailsConfig = $_config->getThumbnailsConfig(); + $_thumbnailsEnabled = $_thumbnailsConfig->getIsEnabled() ; + $_oConnInfo->addAttribute("thumbsEnabled", $_thumbnailsEnabled ? "true" : "false"); + if ($_thumbnailsEnabled) { + $_oConnInfo->addAttribute("thumbsUrl", $_thumbnailsConfig->getUrl()); + $_oConnInfo->addAttribute("thumbsDirectAccess", $_thumbnailsConfig->getDirectAccess() ? "true" : "false" ); + $_oConnInfo->addAttribute("thumbsWidth", $_thumbnailsConfig->getMaxWidth()); + $_oConnInfo->addAttribute("thumbsHeight", $_thumbnailsConfig->getMaxHeight()); + } + $_imagesConfig = $_config->getImagesConfig(); + $_oConnInfo->addAttribute("imgWidth", $_imagesConfig->getMaxWidth()); + $_oConnInfo->addAttribute("imgHeight", $_imagesConfig->getMaxHeight()); + + // Create the "ResourceTypes" node. + $_oResourceTypes = new Ckfinder_Connector_Utils_XmlNode("ResourceTypes"); + $this->_connectorNode->addChild($_oResourceTypes); + // Create the "PluginsInfo" node. + $_oPluginsInfo = new Ckfinder_Connector_Utils_XmlNode("PluginsInfo"); + $this->_connectorNode->addChild($_oPluginsInfo); + + // Load the resource types in an array. + $_aTypes = $_config->getDefaultResourceTypes(); + + if (!sizeof($_aTypes)) { + $_aTypes = $_config->getResourceTypeNames(); + } + + $_aTypesSize = sizeof($_aTypes); + if ($_aTypesSize) { + $phpMaxSize = 0; + $max_upload = CKFinder_Connector_Utils_Misc::returnBytes(ini_get('upload_max_filesize')); + if ($max_upload) { + $phpMaxSize = $max_upload; + } + $max_post = CKFinder_Connector_Utils_Misc::returnBytes(ini_get('post_max_size')); + if ($max_post) { + $phpMaxSize = $phpMaxSize ? min($phpMaxSize, $max_post) : $max_post; + } + //ini_get('memory_limit') only works if compiled with "--enable-memory-limit" + $memory_limit = CKFinder_Connector_Utils_Misc::returnBytes(@ini_get('memory_limit')); + if ($memory_limit && $memory_limit != -1) { + $phpMaxSize = $phpMaxSize ? min($phpMaxSize, $memory_limit) : $memory_limit; + } + $_oConnInfo->addAttribute("uploadMaxSize", $phpMaxSize); + $_oConnInfo->addAttribute("uploadCheckImages", $_config->checkSizeAfterScaling() ? "false" : "true"); + for ($i = 0; $i < $_aTypesSize; $i++) + { + $_resourceTypeName = $_aTypes[$i]; + + $_acl = $_config->getAccessControlConfig(); + $_aclMask = $_acl->getComputedMask($_resourceTypeName, "/"); + + if ( ($_aclMask & CKFINDER_CONNECTOR_ACL_FOLDER_VIEW) != CKFINDER_CONNECTOR_ACL_FOLDER_VIEW ) { + continue; + } + + if (!isset($_GET['type']) || $_GET['type'] === $_resourceTypeName) { + //print $_resourceTypeName; + $_oTypeInfo = $_config->getResourceTypeConfig($_resourceTypeName); + //print_r($_oTypeInfo); + $_oResourceType[$i] = new Ckfinder_Connector_Utils_XmlNode("ResourceType"); + $_oResourceTypes->addChild($_oResourceType[$i]); + + $_oResourceType[$i]->addAttribute("name", $_resourceTypeName); + $_oResourceType[$i]->addAttribute("url", $_oTypeInfo->getUrl()); + $_oResourceType[$i]->addAttribute("allowedExtensions", implode(",", $_oTypeInfo->getAllowedExtensions())); + $_oResourceType[$i]->addAttribute("deniedExtensions", implode(",", $_oTypeInfo->getDeniedExtensions())); + $_oResourceType[$i]->addAttribute("hash", $_oTypeInfo->getHash()); + $_oResourceType[$i]->addAttribute("hasChildren", CKFinder_Connector_Utils_FileSystem::hasChildren('/', $_oTypeInfo) ? "true" : "false"); + $_oResourceType[$i]->addAttribute("acl", $_aclMask); + $maxSize = $_oTypeInfo->getMaxSize(); + if ($phpMaxSize) { + $maxSize = $maxSize ? min($maxSize, $phpMaxSize) : $phpMaxSize; + } + $_oResourceType[$i]->addAttribute("maxSize", $maxSize); + } + } + } + + $config = $GLOBALS['config']; + if (!empty($config['Plugins']) && is_array($config['Plugins']) ) { + $_oConnInfo->addAttribute("plugins", implode(",", $config['Plugins'])); + } + + CKFinder_Connector_Core_Hooks::run('InitCommand', array(&$this->_connectorNode)); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/LoadCookies.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/LoadCookies.php new file mode 100644 index 0000000..2589406 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/LoadCookies.php @@ -0,0 +1,72 @@ +_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_VIEW)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + $oCookiesNode = new Ckfinder_Connector_Utils_XmlNode("Cookies"); + $this->_connectorNode->addChild($oCookiesNode); + $i = 0; + foreach ($_COOKIE as $name => $value) { + if (!is_array($value) && strpos($name, "CKFinder_") !== 0) { + $oCookieNode[$i] = new Ckfinder_Connector_Utils_XmlNode("Cookie"); + $oCookiesNode->addChild($oCookieNode[$i]); + $oCookieNode[$i]->addAttribute("name", $name); + $oCookieNode[$i]->addAttribute("value", $value); + $i++; + } + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/MoveFiles.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/MoveFiles.php new file mode 100644 index 0000000..284f342 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/MoveFiles.php @@ -0,0 +1,265 @@ +_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $clientPath = $this->_currentFolder->getClientPath(); + $sServerDir = $this->_currentFolder->getServerPath(); + $currentResourceTypeConfig = $this->_currentFolder->getResourceTypeConfig(); + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $_aclConfig = $_config->getAccessControlConfig(); + $_thumbnailsConfig = $_config->getThumbnailsConfig(); + $aclMasks = array(); + $_resourceTypeConfig = array(); + + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_RENAME | CKFINDER_CONNECTOR_ACL_FILE_UPLOAD | CKFINDER_CONNECTOR_ACL_FILE_DELETE)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + // Create the "Errors" node. + $oErrorsNode = new CKFinder_Connector_Utils_XmlNode("Errors"); + $errorCode = CKFINDER_CONNECTOR_ERROR_NONE; + $moved = 0; + $movedAll = 0; + if (!empty($_POST['moved'])) { + $movedAll = intval($_POST['moved']); + } + $checkedPaths = array(); + + $oMoveFilesNode = new Ckfinder_Connector_Utils_XmlNode("MoveFiles"); + + if (!empty($_POST['files']) && is_array($_POST['files'])) { + foreach ($_POST['files'] as $index => $arr) { + if (empty($arr['name'])) { + continue; + } + if (!isset($arr['name'], $arr['type'], $arr['folder'])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + // file name + $name = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($arr['name']); + // resource type + $type = $arr['type']; + // client path + $path = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($arr['folder']); + // options + $options = (!empty($arr['options'])) ? $arr['options'] : ''; + + $destinationFilePath = $sServerDir.$name; + + // check #1 (path) + if (!CKFinder_Connector_Utils_FileSystem::checkFileName($name) || preg_match(CKFINDER_REGEX_INVALID_PATH, $path)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + // get resource type config for current file + if (!isset($_resourceTypeConfig[$type])) { + $_resourceTypeConfig[$type] = $_config->getResourceTypeConfig($type); + } + + // check #2 (resource type) + if (is_null($_resourceTypeConfig[$type])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + // check #3 (extension) + if (!$_resourceTypeConfig[$type]->checkExtension($name, false)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_INVALID_EXTENSION; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + + // check #4 (extension) - when moving to another resource type, double check extension + if ($currentResourceTypeConfig->getName() != $type) { + if (!$currentResourceTypeConfig->checkExtension($name, false)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_INVALID_EXTENSION; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + } + + // check #5 (hidden folders) + // cache results + if (empty($checkedPaths[$path])) { + $checkedPaths[$path] = true; + + if ($_resourceTypeConfig[$type]->checkIsHiddenPath($path)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + } + + $sourceFilePath = $_resourceTypeConfig[$type]->getDirectory().$path.$name; + + // check #6 (hidden file name) + if ($currentResourceTypeConfig->checkIsHiddenFile($name)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + // check #7 (Access Control, need file view permission to source files) + if (!isset($aclMasks[$type."@".$path])) { + $aclMasks[$type."@".$path] = $_aclConfig->getComputedMask($type, $path); + } + + $isAuthorized = (($aclMasks[$type."@".$path] & CKFINDER_CONNECTOR_ACL_FILE_VIEW) == CKFINDER_CONNECTOR_ACL_FILE_VIEW); + if (!$isAuthorized) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + // check #8 (invalid file name) + if (!file_exists($sourceFilePath) || !is_file($sourceFilePath)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_FILE_NOT_FOUND; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + + // check #9 (max size) + if ($currentResourceTypeConfig->getName() != $type) { + $maxSize = $currentResourceTypeConfig->getMaxSize(); + $fileSize = filesize($sourceFilePath); + if ($maxSize && $fileSize>$maxSize) { + $errorCode = CKFINDER_CONNECTOR_ERROR_UPLOADED_TOO_BIG; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + } + + $_thumbsServerPath = CKFinder_Connector_Utils_FileSystem::combinePaths($_thumbnailsConfig->getDirectory(), $_config->getResourceTypeConfig($type)->getName()); + $thumbPath = CKFinder_Connector_Utils_FileSystem::combinePaths($_thumbsServerPath, $path.$name); + + //$overwrite + // finally, no errors so far, we may attempt to copy a file + // protection against copying files to itself + if ($sourceFilePath == $destinationFilePath) { + $errorCode = CKFINDER_CONNECTOR_ERROR_SOURCE_AND_TARGET_PATH_EQUAL; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + // check if file exists if we don't force overwriting + else if (file_exists($destinationFilePath)) { + if (strpos($options, "overwrite") !== false) { + if (!@unlink($destinationFilePath)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + else { + if (!@rename($sourceFilePath, $destinationFilePath)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + else { + CKFinder_Connector_Utils_FileSystem::unlink($thumbPath); + $moved++; + } + } + } + else if (strpos($options, "autorename") !== false) { + $fileName = CKFinder_Connector_Utils_FileSystem::autoRename($sServerDir, $name); + $destinationFilePath = $sServerDir.$fileName; + if (!@rename($sourceFilePath, $destinationFilePath)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + else { + CKFinder_Connector_Utils_FileSystem::unlink($thumbPath); + $moved++; + } + } + else { + $errorCode = CKFINDER_CONNECTOR_ERROR_ALREADY_EXIST; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + } + else { + if (!@rename($sourceFilePath, $destinationFilePath)) { + $errorCode = CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED; + $this->appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path); + continue; + } + else { + CKFinder_Connector_Utils_FileSystem::unlink($thumbPath); + $moved++; + } + } + } + } + + $this->_connectorNode->addChild($oMoveFilesNode); + if ($errorCode != CKFINDER_CONNECTOR_ERROR_NONE) { + $this->_connectorNode->addChild($oErrorsNode); + } + $oMoveFilesNode->addAttribute("moved", $moved); + $oMoveFilesNode->addAttribute("movedTotal", $movedAll + $moved); + + /** + * Note: actually we could have more than one error. + * This is just a flag for CKFinder interface telling it to check all errors. + */ + if ($errorCode != CKFINDER_CONNECTOR_ERROR_NONE) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_MOVE_FAILED); + } + } + + private function appendErrorNode($oErrorsNode, $errorCode, $name, $type, $path) + { + $oErrorNode = new CKFinder_Connector_Utils_XmlNode("Error"); + $oErrorNode->addAttribute("code", $errorCode); + $oErrorNode->addAttribute("name", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($name)); + $oErrorNode->addAttribute("type", $type); + $oErrorNode->addAttribute("folder", $path); + $oErrorsNode->addChild($oErrorNode); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/QuickUpload.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/QuickUpload.php new file mode 100644 index 0000000..667af72 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/QuickUpload.php @@ -0,0 +1,50 @@ +set("FileUpload_url", $this->_currentFolder->getUrl()); + + return parent::sendResponse(); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/RenameFile.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/RenameFile.php new file mode 100644 index 0000000..b591b02 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/RenameFile.php @@ -0,0 +1,127 @@ +_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_RENAME)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + if (!isset($_GET["fileName"])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); + } + if (!isset($_GET["newFileName"])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); + } + + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $fileName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($_GET["fileName"]); + $newFileName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($_GET["newFileName"]); + + $oRenamedFileNode = new Ckfinder_Connector_Utils_XmlNode("RenamedFile"); + $this->_connectorNode->addChild($oRenamedFileNode); + $oRenamedFileNode->addAttribute("name", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($fileName)); + + $resourceTypeInfo = $this->_currentFolder->getResourceTypeConfig(); + if (!$resourceTypeInfo->checkExtension($newFileName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_EXTENSION); + } + + if (!CKFinder_Connector_Utils_FileSystem::checkFileName($fileName) || $resourceTypeInfo->checkIsHiddenFile($fileName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if (!CKFinder_Connector_Utils_FileSystem::checkFileName($newFileName) || $resourceTypeInfo->checkIsHiddenFile($newFileName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); + } + + if (!$resourceTypeInfo->checkExtension($fileName, false)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if ($_config->forceAscii()) { + $newFileName = CKFinder_Connector_Utils_FileSystem::convertToAscii($newFileName); + } + + $filePath = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_currentFolder->getServerPath(), $fileName); + $newFilePath = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_currentFolder->getServerPath(), $newFileName); + + $bMoved = false; + + if (!file_exists($filePath)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_FILE_NOT_FOUND); + } + + if (!is_writable(dirname($newFilePath))) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } + + if (!is_writable($filePath)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } + + if (file_exists($newFilePath)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ALREADY_EXIST); + } + + $bMoved = @rename($filePath, $newFilePath); + + if (!$bMoved) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNKNOWN, "File " . CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($fileName) . "has not been renamed"); + } else { + $oRenamedFileNode->addAttribute("newName", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($newFileName)); + + $thumbPath = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_currentFolder->getThumbsServerPath(), $fileName); + CKFinder_Connector_Utils_FileSystem::unlink($thumbPath); + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/RenameFolder.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/RenameFolder.php new file mode 100644 index 0000000..0bdd02f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/RenameFolder.php @@ -0,0 +1,114 @@ +_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FOLDER_RENAME)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + if (!isset($_GET["NewFolderName"])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); + } + + $newFolderName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($_GET["NewFolderName"]); + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + if ($_config->forceAscii()) { + $newFolderName = CKFinder_Connector_Utils_FileSystem::convertToAscii($newFolderName); + } + $resourceTypeInfo = $this->_currentFolder->getResourceTypeConfig(); + + if (!CKFinder_Connector_Utils_FileSystem::checkFolderName($newFolderName) || $resourceTypeInfo->checkIsHiddenFolder($newFolderName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); + } + + // The root folder cannot be deleted. + if ($this->_currentFolder->getClientPath() == "/") { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $oldFolderPath = $this->_currentFolder->getServerPath(); + $bMoved = false; + + if (!is_dir($oldFolderPath)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + //let's calculate new folder name + $newFolderPath = dirname($oldFolderPath).'/'.$newFolderName.'/'; + + if (file_exists(rtrim($newFolderPath, '/'))) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ALREADY_EXIST); + } + + $bMoved = @rename($oldFolderPath, $newFolderPath); + + if (!$bMoved) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } else { + $newThumbsServerPath = dirname($this->_currentFolder->getThumbsServerPath()) . '/' . $newFolderName . '/'; + if (!@rename($this->_currentFolder->getThumbsServerPath(), $newThumbsServerPath)) { + CKFinder_Connector_Utils_FileSystem::unlink($this->_currentFolder->getThumbsServerPath()); + } + } + + $newFolderPath = preg_replace(",[^/]+/?$,", $newFolderName, $this->_currentFolder->getClientPath()) . '/'; + $newFolderUrl = $resourceTypeInfo->getUrl() . ltrim($newFolderPath, '/'); + + $oRenameNode = new Ckfinder_Connector_Utils_XmlNode("RenamedFolder"); + $this->_connectorNode->addChild($oRenameNode); + + $oRenameNode->addAttribute("newName", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($newFolderName)); + $oRenameNode->addAttribute("newPath", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($newFolderPath)); + $oRenameNode->addAttribute("newUrl", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($newFolderUrl)); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/Thumbnail.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/Thumbnail.php new file mode 100644 index 0000000..8e58c69 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/Thumbnail.php @@ -0,0 +1,333 @@ +checkConnector(); + $this->checkRequest(); + + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + + $_thumbnails = $_config->getThumbnailsConfig(); + if (!$_thumbnails->getIsEnabled()) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_THUMBNAILS_DISABLED); + } + + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_VIEW)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + if (!isset($_GET["FileName"])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $fileName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($_GET["FileName"]); + $_resourceTypeInfo = $this->_currentFolder->getResourceTypeConfig(); + + if (!CKFinder_Connector_Utils_FileSystem::checkFileName($fileName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $sourceFilePath = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_currentFolder->getServerPath(), $fileName); + + if ($_resourceTypeInfo->checkIsHiddenFile($fileName) || !file_exists($sourceFilePath)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_FILE_NOT_FOUND); + } + + $thumbFilePath = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_currentFolder->getThumbsServerPath(), $fileName); + + // If the thumbnail file doesn't exists, create it now. + if (!file_exists($thumbFilePath)) { + if(!$this->createThumb($sourceFilePath, $thumbFilePath, $_thumbnails->getMaxWidth(), $_thumbnails->getMaxHeight(), $_thumbnails->getQuality(), true, $_thumbnails->getBmpSupported())) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } + } + + $size = filesize($thumbFilePath); + $sourceImageAttr = getimagesize($thumbFilePath); + $mime = $sourceImageAttr["mime"]; + + $rtime = isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])?@strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]):0; + $mtime = filemtime($thumbFilePath); + $etag = dechex($mtime) . "-" . dechex($size); + + $is304 = false; + + if (isset($_SERVER["HTTP_IF_NONE_MATCH"]) && $_SERVER["HTTP_IF_NONE_MATCH"] === $etag) { + $is304 = true; + } + else if($rtime == $mtime) { + $is304 = true; + } + + if ($is304) { + header("HTTP/1.0 304 Not Modified"); + exit(); + } + + //header("Cache-Control: cache, must-revalidate"); + //header("Pragma: public"); + //header("Expires: 0"); + header('Cache-control: public'); + header('Etag: ' . $etag); + header("Content-type: " . $mime . "; name=\"" . CKFinder_Connector_Utils_Misc::mbBasename($thumbFilePath) . "\""); + header("Last-Modified: ".gmdate('D, d M Y H:i:s', $mtime) . " GMT"); + //header("Content-type: application/octet-stream; name=\"{$file}\""); + //header("Content-Disposition: attachment; filename=\"{$file}\""); + header("Content-Length: ".$size); + readfile($thumbFilePath); + exit; + } + + /** + * Create thumbnail + * + * @param string $sourceFile + * @param string $targetFile + * @param int $maxWidth + * @param int $maxHeight + * @param boolean $preserverAspectRatio + * @param boolean $bmpSupported + * @return boolean + * @static + * @access public + */ + public static function createThumb($sourceFile, $targetFile, $maxWidth, $maxHeight, $quality, $preserverAspectRatio, $bmpSupported = false) + { + $sourceImageAttr = @getimagesize($sourceFile); + if ($sourceImageAttr === false) { + return false; + } + $sourceImageWidth = isset($sourceImageAttr[0]) ? $sourceImageAttr[0] : 0; + $sourceImageHeight = isset($sourceImageAttr[1]) ? $sourceImageAttr[1] : 0; + $sourceImageMime = isset($sourceImageAttr["mime"]) ? $sourceImageAttr["mime"] : ""; + $sourceImageBits = isset($sourceImageAttr["bits"]) ? $sourceImageAttr["bits"] : 8; + $sourceImageChannels = isset($sourceImageAttr["channels"]) ? $sourceImageAttr["channels"] : 3; + + if (!$sourceImageWidth || !$sourceImageHeight || !$sourceImageMime) { + return false; + } + + $iFinalWidth = $maxWidth == 0 ? $sourceImageWidth : $maxWidth; + $iFinalHeight = $maxHeight == 0 ? $sourceImageHeight : $maxHeight; + + if ($sourceImageWidth <= $iFinalWidth && $sourceImageHeight <= $iFinalHeight) { + if ($sourceFile != $targetFile) { + copy($sourceFile, $targetFile); + } + return true; + } + + if ($preserverAspectRatio) + { + // Gets the best size for aspect ratio resampling + $oSize = CKFinder_Connector_CommandHandler_Thumbnail::GetAspectRatioSize($iFinalWidth, $iFinalHeight, $sourceImageWidth, $sourceImageHeight ); + } + else { + $oSize = array('Width' => $iFinalWidth, 'Height' => $iFinalHeight); + } + + CKFinder_Connector_Utils_Misc::setMemoryForImage($sourceImageWidth, $sourceImageHeight, $sourceImageBits, $sourceImageChannels); + + switch ($sourceImageAttr['mime']) + { + case 'image/gif': + { + if (@imagetypes() & IMG_GIF) { + $oImage = @imagecreatefromgif($sourceFile); + } else { + $ermsg = 'GIF images are not supported'; + } + } + break; + case 'image/jpeg': + { + if (@imagetypes() & IMG_JPG) { + $oImage = @imagecreatefromjpeg($sourceFile) ; + } else { + $ermsg = 'JPEG images are not supported'; + } + } + break; + case 'image/png': + { + if (@imagetypes() & IMG_PNG) { + $oImage = @imagecreatefrompng($sourceFile) ; + } else { + $ermsg = 'PNG images are not supported'; + } + } + break; + case 'image/wbmp': + { + if (@imagetypes() & IMG_WBMP) { + $oImage = @imagecreatefromwbmp($sourceFile); + } else { + $ermsg = 'WBMP images are not supported'; + } + } + break; + case 'image/bmp': + { + /* + * This is sad that PHP doesn't support bitmaps. + * Anyway, we will use our custom function at least to display thumbnails. + * We'll not resize images this way (if $sourceFile === $targetFile), + * because user defined imagecreatefrombmp and imagecreatebmp are horribly slow + */ + if ($bmpSupported && (@imagetypes() & IMG_JPG) && $sourceFile != $targetFile) { + $oImage = CKFinder_Connector_Utils_Misc::imageCreateFromBmp($sourceFile); + } else { + $ermsg = 'BMP/JPG images are not supported'; + } + } + break; + default: + $ermsg = $sourceImageAttr['mime'].' images are not supported'; + break; + } + + if (isset($ermsg) || false === $oImage) { + return false; + } + + + $oThumbImage = imagecreatetruecolor($oSize["Width"], $oSize["Height"]); + + if ($sourceImageAttr['mime'] == 'image/png') + { + $bg = imagecolorallocatealpha($oThumbImage, 255, 255, 255, 127); // (PHP 4 >= 4.3.2, PHP 5) + imagefill($oThumbImage, 0, 0 , $bg); + imagealphablending($oThumbImage, false); + imagesavealpha($oThumbImage, true); + } + + //imagecopyresampled($oThumbImage, $oImage, 0, 0, 0, 0, $oSize["Width"], $oSize["Height"], $sourceImageWidth, $sourceImageHeight); + CKFinder_Connector_Utils_Misc::fastImageCopyResampled($oThumbImage, $oImage, 0, 0, 0, 0, $oSize["Width"], $oSize["Height"], $sourceImageWidth, $sourceImageHeight, (int)max(floor($quality/20), 6)); + + switch ($sourceImageAttr['mime']) + { + case 'image/gif': + imagegif($oThumbImage, $targetFile); + break; + case 'image/jpeg': + case 'image/bmp': + imagejpeg($oThumbImage, $targetFile, $quality); + break; + case 'image/png': + imagepng($oThumbImage, $targetFile); + break; + case 'image/wbmp': + imagewbmp($oThumbImage, $targetFile); + break; + } + + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + if (file_exists($targetFile) && ($perms = $_config->getChmodFiles())) { + $oldUmask = umask(0); + chmod($targetFile, $perms); + umask($oldUmask); + } + + imageDestroy($oImage); + imageDestroy($oThumbImage); + + return true; + } + + + + /** + * Return aspect ratio size, returns associative array: + *
      +     * Array
      +     * (
      +     *      [Width] => 80
      +     *      [Heigth] => 120
      +     * )
      +     * 
      + * + * @param int $maxWidth + * @param int $maxHeight + * @param int $actualWidth + * @param int $actualHeight + * @return array + * @static + * @access public + */ + public static function getAspectRatioSize($maxWidth, $maxHeight, $actualWidth, $actualHeight) + { + $oSize = array("Width"=>$maxWidth, "Height"=>$maxHeight); + + // Calculates the X and Y resize factors + $iFactorX = (float)$maxWidth / (float)$actualWidth; + $iFactorY = (float)$maxHeight / (float)$actualHeight; + + // If some dimension have to be scaled + if ($iFactorX != 1 || $iFactorY != 1) + { + // Uses the lower Factor to scale the oposite size + if ($iFactorX < $iFactorY) { + $oSize["Height"] = (int)round($actualHeight * $iFactorX); + } + else if ($iFactorX > $iFactorY) { + $oSize["Width"] = (int)round($actualWidth * $iFactorY); + } + } + + if ($oSize["Height"] <= 0) { + $oSize["Height"] = 1; + } + if ($oSize["Width"] <= 0) { + $oSize["Width"] = 1; + } + + // Returns the Size + return $oSize; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/XmlCommandHandlerBase.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/XmlCommandHandlerBase.php new file mode 100644 index 0000000..ee7cc39 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/CommandHandler/XmlCommandHandlerBase.php @@ -0,0 +1,119 @@ +_connectorNode =& $xml->getConnectorNode(); + + $this->checkConnector(); + if ($this->mustCheckRequest()) { + $this->checkRequest(); + } + + $resourceTypeName = $this->_currentFolder->getResourceTypeName(); + if (!empty($resourceTypeName)) { + $this->_connectorNode->addAttribute("resourceType", $this->_currentFolder->getResourceTypeName()); + } + + if ($this->mustAddCurrentFolderNode()) { + $_currentFolder = new Ckfinder_Connector_Utils_XmlNode("CurrentFolder"); + $this->_connectorNode->addChild($_currentFolder); + $_currentFolder->addAttribute("path", CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($this->_currentFolder->getClientPath())); + + $this->_errorHandler->setCatchAllErros(true); + $_url = $this->_currentFolder->getUrl(); + $_currentFolder->addAttribute("url", is_null($_url) ? "" : CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($_url)); + $this->_errorHandler->setCatchAllErros(false); + + $_currentFolder->addAttribute("acl", $this->_currentFolder->getAclMask()); + } + + $this->buildXml(); + + $_oErrorNode =& $xml->getErrorNode(); + $_oErrorNode->addAttribute("number", "0"); + + echo $this->_connectorNode->asXML(); + exit; + } + + /** + * Must check request? + * + * @return boolean + * @access protected + */ + protected function mustCheckRequest() + { + return true; + } + + /** + * Must add CurrentFolder node? + * + * @return boolean + * @access protected + */ + protected function mustAddCurrentFolderNode() + { + return true; + } + + /** + * @access protected + * @abstract + * @return void + */ + abstract protected function buildXml(); +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/AccessControlConfig.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/AccessControlConfig.php new file mode 100644 index 0000000..4cd6ffa --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/AccessControlConfig.php @@ -0,0 +1,225 @@ +addACLEntry($_role, $_resourceType, $_folder, + array( + $_folderView ? CKFINDER_CONNECTOR_ACL_FOLDER_VIEW : 0, + $_folderCreate ? CKFINDER_CONNECTOR_ACL_FOLDER_CREATE : 0, + $_folderRename ? CKFINDER_CONNECTOR_ACL_FOLDER_RENAME : 0, + $_folderDelete ? CKFINDER_CONNECTOR_ACL_FOLDER_DELETE : 0, + $_fileView ? CKFINDER_CONNECTOR_ACL_FILE_VIEW : 0, + $_fileUpload ? CKFINDER_CONNECTOR_ACL_FILE_UPLOAD : 0, + $_fileRename ? CKFINDER_CONNECTOR_ACL_FILE_RENAME : 0, + $_fileDelete ? CKFINDER_CONNECTOR_ACL_FILE_DELETE : 0, + ), + array( + $_folderView ? 0 : CKFINDER_CONNECTOR_ACL_FOLDER_VIEW, + $_folderCreate ? 0 : CKFINDER_CONNECTOR_ACL_FOLDER_CREATE, + $_folderRename ? 0 : CKFINDER_CONNECTOR_ACL_FOLDER_RENAME, + $_folderDelete ? 0 : CKFINDER_CONNECTOR_ACL_FOLDER_DELETE, + $_fileView ? 0 : CKFINDER_CONNECTOR_ACL_FILE_VIEW, + $_fileUpload ? 0 : CKFINDER_CONNECTOR_ACL_FILE_UPLOAD, + $_fileRename ? 0 : CKFINDER_CONNECTOR_ACL_FILE_RENAME, + $_fileDelete ? 0 : CKFINDER_CONNECTOR_ACL_FILE_DELETE, + ) + ); + } + } + + /** + * Add ACL entry + * + * @param string $role role + * @param string $resourceType resource type + * @param string $folderPath folder path + * @param int $allowRulesMask allow rules mask + * @param int $denyRulesMask deny rules mask + * @access private + */ + private function addACLEntry($role, $resourceType, $folderPath, $allowRulesMask, $denyRulesMask) + { + + if (!strlen($folderPath)) { + $folderPath = '/'; + } + else { + if (substr($folderPath,0,1) != '/') { + $folderPath = '/' . $folderPath; + } + + if (substr($folderPath,-1,1) != '/') { + $folderPath .= '/'; + } + } + + $_entryKey = $role . "#@#" . $resourceType; + + if (array_key_exists($folderPath,$this->_aclEntries)) { + if (array_key_exists($_entryKey, $this->_aclEntries[$folderPath])) { + $_rulesMasks = $this->_aclEntries[$folderPath][$_entryKey]; + foreach ($_rulesMasks[0] as $key => $value) { + $allowRulesMask[$key] |= $value; + } + foreach ($_rulesMasks[1] as $key => $value) { + $denyRulesMask[$key] |= $value; + } + } + } + else { + $this->_aclEntries[$folderPath] = array(); + } + + $this->_aclEntries[$folderPath][$_entryKey] = array($allowRulesMask, $denyRulesMask); + } + + + /** + * Get computed mask + * + * @param string $resourceType + * @param string $folderPath + * @return int + */ + public function getComputedMask($resourceType, $folderPath) + { + $_computedMask = 0; + + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $_roleSessionVar = $_config->getRoleSessionVar(); + + $_userRole = null; + if (strlen($_roleSessionVar) && isset($_SESSION[$_roleSessionVar])) { + $_userRole = (string)$_SESSION[$_roleSessionVar]; + } + if (!is_null($_userRole) && !strlen($_userRole)) { + $_userRole = null; + } + + $folderPath = trim($folderPath, "/"); + $_pathParts = explode("/", $folderPath); + + $_currentPath = "/"; + + for($i = -1; $i < sizeof($_pathParts); $i++) { + if ($i >= 0) { + if (!strlen($_pathParts[$i])) { + continue; + } + + if (array_key_exists($_currentPath . '*/', $this->_aclEntries)) + $_computedMask = $this->mergePathComputedMask( $_computedMask, $resourceType, $_userRole, $_currentPath . '*/' ); + + $_currentPath .= $_pathParts[$i] . '/'; + } + + if (array_key_exists($_currentPath, $this->_aclEntries)) { + $_computedMask = $this->mergePathComputedMask( $_computedMask, $resourceType, $_userRole, $_currentPath ); + } + } + + return $_computedMask; + } + + /** + * merge current mask with folder entries + * + * @access private + * @param int $currentMask + * @param string $resourceType + * @param string $userRole + * @param string $path + * @return int + */ + private function mergePathComputedMask( $currentMask, $resourceType, $userRole, $path ) + { + $_folderEntries = $this->_aclEntries[$path]; + + $_possibleEntries = array(); + + $_possibleEntries[0] = "*#@#*"; + $_possibleEntries[1] = "*#@#" . $resourceType; + + if (!is_null($userRole)) + { + $_possibleEntries[2] = $userRole . "#@#*"; + $_possibleEntries[3] = $userRole . "#@#" . $resourceType; + } + + for ($r = 0; $r < sizeof($_possibleEntries); $r++) + { + $_possibleKey = $_possibleEntries[$r]; + if (array_key_exists($_possibleKey, $_folderEntries)) + { + $_rulesMasks = $_folderEntries[$_possibleKey]; + + $currentMask |= array_sum($_rulesMasks[0]); + $currentMask ^= ($currentMask & array_sum($_rulesMasks[1])); + } + } + + return $currentMask; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Config.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Config.php new file mode 100644 index 0000000..d54d211 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Config.php @@ -0,0 +1,620 @@ + root + */ + private $_xsendfileNginx = array(); + + function __construct() + { + $this->loadValues(); + } + + /** + * Get file system encoding, returns null if encoding is not set + * + * @access public + * @return string + */ + public function getFilesystemEncoding() + { + return $this->_filesystemEncoding; + } + + /** + * Get "secureImageUploads" value + * + * @access public + * @return boolean + */ + public function getSecureImageUploads() + { + return $this->_secureImageUploads; + } + + /** + * Get "checkSizeAfterScaling" value + * + * @access public + * @return boolean + */ + public function checkSizeAfterScaling() + { + return $this->_checkSizeAfterScaling; + } + + /** + * Get "htmlExtensions" value + * + * @access public + * @return array + */ + public function getHtmlExtensions() + { + return $this->_htmlExtensions; + } + + /** + * Get "forceAscii" value + * + * @access public + * @return array + */ + public function forceAscii() + { + return $this->_forceAscii; + } + + /** + * Get regular expression to hide folders + * + * @access public + * @return array + */ + public function getHideFoldersRegex() + { + static $folderRegex; + + if (!isset($folderRegex)) { + if (is_array($this->_hideFolders) && $this->_hideFolders) { + $folderRegex = join("|", $this->_hideFolders); + $folderRegex = strtr($folderRegex, array("?" => "__QMK__", "*" => "__AST__", "|" => "__PIP__")); + $folderRegex = preg_quote($folderRegex, "/"); + $folderRegex = strtr($folderRegex, array("__QMK__" => ".", "__AST__" => ".*", "__PIP__" => "|")); + $folderRegex = "/^(?:" . $folderRegex . ")$/uim"; + } + else { + $folderRegex = ""; + } + } + + return $folderRegex; + } + + /** + * Get regular expression to hide files + * + * @access public + * @return array + */ + public function getHideFilesRegex() + { + static $fileRegex; + + if (!isset($fileRegex)) { + if (is_array($this->_hideFiles) && $this->_hideFiles) { + $fileRegex = join("|", $this->_hideFiles); + $fileRegex = strtr($fileRegex, array("?" => "__QMK__", "*" => "__AST__", "|" => "__PIP__")); + $fileRegex = preg_quote($fileRegex, "/"); + $fileRegex = strtr($fileRegex, array("__QMK__" => ".", "__AST__" => ".*", "__PIP__" => "|")); + $fileRegex = "/^(?:" . $fileRegex . ")$/uim"; + } + else { + $fileRegex = ""; + } + } + + return $fileRegex; + } + + /** + * Get "Check double extension" value + * + * @access public + * @return boolean + */ + public function getCheckDoubleExtension() + { + return $this->_checkDoubleExtension; + } + + /** + * Get "Disallow unsafe characters" value + * + * @access public + * @return boolean + */ + public function getDisallowUnsafeCharacters() + { + return $this->_disallowUnsafeCharacters; + } + + /** + * Get default resource types + * + * @access public + * @return array() + */ + public function getDefaultResourceTypes() + { + return $this->_defaultResourceTypes; + } + + /** + * Is CKFinder enabled + * + * @access public + * @return boolean + */ + public function getIsEnabled() + { + return $this->_isEnabled; + } + + /** + * Get license key + * + * @access public + * @return string + */ + public function getLicenseKey() + { + return $this->_licenseKey; + } + + /** + * Get license name + * + * @access public + * @return string + */ + public function getLicenseName() + { + return $this->_licenseName; + } + + /** + * Get chmod settings for uploaded files + * + * @access public + * @return integer + */ + public function getChmodFiles() + { + return $this->_chmodFiles; + } + + /** + * Get chmod settings for created directories + * + * @access public + * @return integer + */ + public function getChmodFolders() + { + return $this->_chmodFolders; + } + + /** + * Get role sesion variable name + * + * @access public + * @return string + */ + public function getRoleSessionVar() + { + return $this->_roleSessionVar; + } + + /** + * Get resourceTypeName config + * + * @param string $resourceTypeName + * @return CKFinder_Connector_Core_ResourceTypeConfig|null + * @access public + */ + public function &getResourceTypeConfig($resourceTypeName) + { + $_null = null; + + if (isset($this->_resourceTypeConfigCache[$resourceTypeName])) { + return $this->_resourceTypeConfigCache[$resourceTypeName]; + } + + if (!isset($GLOBALS['config']['ResourceType']) || !is_array($GLOBALS['config']['ResourceType'])) { + return $_null; + } + + reset($GLOBALS['config']['ResourceType']); + while (list($_key,$_resourceTypeNode) = each($GLOBALS['config']['ResourceType'])) { + if ($_resourceTypeNode['name'] === $resourceTypeName) { + $this->_resourceTypeConfigCache[$resourceTypeName] = new CKFinder_Connector_Core_ResourceTypeConfig($_resourceTypeNode); + + return $this->_resourceTypeConfigCache[$resourceTypeName]; + } + } + + return $_null; + } + + /** + * Get thumbnails config + * + * @access public + * @return CKFinder_Connector_Core_ThumbnailsConfig + */ + public function &getThumbnailsConfig() + { + if (!isset($this->_thumbnailsConfigCache)) { + $this->_thumbnailsConfigCache = new CKFinder_Connector_Core_ThumbnailsConfig(isset($GLOBALS['config']['Thumbnails']) ? $GLOBALS['config']['Thumbnails'] : array()); + } + + return $this->_thumbnailsConfigCache; + } + + /** + * Get images config + * + * @access public + * @return CKFinder_Connector_Core_ImagesConfig + */ + public function &getImagesConfig() + { + if (!isset($this->_imagesConfigCache)) { + $this->_imagesConfigCache = new CKFinder_Connector_Core_ImagesConfig(isset($GLOBALS['config']['Images']) ? $GLOBALS['config']['Images'] : array()); + } + + return $this->_imagesConfigCache; + } + + /** + * Get access control config + * + * @access public + * @return CKFinder_Connector_Core_AccessControlConfig + */ + public function &getAccessControlConfig() + { + if (!isset($this->_accessControlConfigCache)) { + $this->_accessControlConfigCache = new CKFinder_Connector_Core_AccessControlConfig(isset($GLOBALS['config']['AccessControl']) ? $GLOBALS['config']['AccessControl'] : array()); + } + + return $this->_accessControlConfigCache; + } + + /** + * Load values from config + * + * @access private + */ + private function loadValues() + { + if (function_exists('CheckAuthentication')) { + $this->_isEnabled = CheckAuthentication(); + } + if (isset($GLOBALS['config']['LicenseName'])) { + $this->_licenseName = (string)$GLOBALS['config']['LicenseName']; + } + if (isset($GLOBALS['config']['LicenseKey'])) { + $this->_licenseKey = (string)$GLOBALS['config']['LicenseKey']; + } + if (isset($GLOBALS['config']['FilesystemEncoding'])) { + $this->_filesystemEncoding = (string)$GLOBALS['config']['FilesystemEncoding']; + } + if (isset($GLOBALS['config']['RoleSessionVar'])) { + $this->_roleSessionVar = (string)$GLOBALS['config']['RoleSessionVar']; + } + if (isset($GLOBALS['config']['CheckDoubleExtension'])) { + $this->_checkDoubleExtension = CKFinder_Connector_Utils_Misc::booleanValue($GLOBALS['config']['CheckDoubleExtension']); + } + if (isset($GLOBALS['config']['DisallowUnsafeCharacters'])) { + $this->_disallowUnsafeCharacters = CKFinder_Connector_Utils_Misc::booleanValue($GLOBALS['config']['DisallowUnsafeCharacters']); + } + if (isset($GLOBALS['config']['SecureImageUploads'])) { + $this->_secureImageUploads = CKFinder_Connector_Utils_Misc::booleanValue($GLOBALS['config']['SecureImageUploads']); + } + if (isset($GLOBALS['config']['CheckSizeAfterScaling'])) { + $this->_checkSizeAfterScaling = CKFinder_Connector_Utils_Misc::booleanValue($GLOBALS['config']['CheckSizeAfterScaling']); + } + if (isset($GLOBALS['config']['ForceAscii'])) { + $this->_forceAscii = CKFinder_Connector_Utils_Misc::booleanValue($GLOBALS['config']['ForceAscii']); + } + if (isset($GLOBALS['config']['HtmlExtensions'])) { + $this->_htmlExtensions = (array)$GLOBALS['config']['HtmlExtensions']; + } + if (isset($GLOBALS['config']['HideFolders'])) { + $this->_hideFolders = (array)$GLOBALS['config']['HideFolders']; + } + if (isset($GLOBALS['config']['HideFiles'])) { + $this->_hideFiles = (array)$GLOBALS['config']['HideFiles']; + } + if (isset($GLOBALS['config']['ChmodFiles'])) { + $this->_chmodFiles = $GLOBALS['config']['ChmodFiles']; + } + if (isset($GLOBALS['config']['ChmodFolders'])) { + $this->_chmodFolders = $GLOBALS['config']['ChmodFolders']; + } + if (isset($GLOBALS['config']['DefaultResourceTypes'])) { + $_defaultResourceTypes = (string)$GLOBALS['config']['DefaultResourceTypes']; + if (strlen($_defaultResourceTypes)) { + $this->_defaultResourceTypes = explode(",", $_defaultResourceTypes); + } + } + if (isset($GLOBALS['config']['TempDirectory'])) { + $this->_tempDirectory = $GLOBALS['config']['TempDirectory']; + } + if (isset($GLOBALS['config']['XSendfile'])) { + $this->_xsendfile = CKFinder_Connector_Utils_Misc::booleanValue($GLOBALS['config']['XSendfile']); + } + if (isset($GLOBALS['config']['XSendfileNginx'])) { + $this->_xsendfileNginx = (array)$GLOBALS['config']['XSendfileNginx']; + } + } + + /** + * Get all resource type names defined in config + * + * @return array + * @access public + */ + public function getResourceTypeNames() + { + if (!isset($GLOBALS['config']['ResourceType']) || !is_array($GLOBALS['config']['ResourceType'])) { + return array(); + } + + $_names = array(); + foreach ($GLOBALS['config']['ResourceType'] as $key => $_resourceType) { + if (isset($_resourceType['name'])) { + $_names[] = (string)$_resourceType['name']; + } + } + + return $_names; + } + + /** + * Get temporary directory + * @access public + * @return string + */ + public function getTempDirectory() + { + return $this->_tempDirectory; + } + + /** + * Get X-Sendfile option + */ + public function getXSendfile(){ + return $this->_xsendfile; + } + + /** + * Get the dditional Nginx X-Sendfile configuration (location => root) + */ + public function getXSendfileNginx(){ + $xsendfileNginx = array(); + foreach ( $this->_xsendfileNginx as $location => $root ){ + $root = (string)$root; + $location = rtrim((string)$location,'/').'/'; + if ( substr($root,-1,1) != '/' && substr($root,-1,1) != '\\') { + // root and location paths are concatenated + // @see http://wiki.nginx.org/XSendfile + $root = CKFinder_Connector_Utils_FileSystem::combinePaths(rtrim($root,'/'),$location); + } + $xsendfileNginx[$location] = $root; + } + return $xsendfileNginx; + } + +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Connector.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Connector.php new file mode 100644 index 0000000..33a3937 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Connector.php @@ -0,0 +1,121 @@ +_registry =& CKFinder_Connector_Core_Factory::getInstance("Core_Registry"); + $this->_registry->set("errorHandler", "ErrorHandler_Base"); + } + + /** + * Generic handler for invalid commands + * @access public + * + */ + public function handleInvalidCommand() + { + $oErrorHandler =& $this->getErrorHandler(); + $oErrorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_COMMAND); + } + + /** + * Execute command + * + * @param string $command + * @access public + */ + public function executeCommand($command) + { + if (!CKFinder_Connector_Core_Hooks::run('BeforeExecuteCommand', array(&$command))) { + return; + } + + switch ($command) + { + case 'FileUpload': + $this->_registry->set("errorHandler", "ErrorHandler_FileUpload"); + $obj =& CKFinder_Connector_Core_Factory::getInstance("CommandHandler_".$command); + $obj->sendResponse(); + break; + + case 'QuickUpload': + $this->_registry->set("errorHandler", "ErrorHandler_QuickUpload"); + $obj =& CKFinder_Connector_Core_Factory::getInstance("CommandHandler_".$command); + $obj->sendResponse(); + break; + + case 'DownloadFile': + case 'Thumbnail': + $this->_registry->set("errorHandler", "ErrorHandler_Http"); + $obj =& CKFinder_Connector_Core_Factory::getInstance("CommandHandler_".$command); + $obj->sendResponse(); + break; + + case 'CopyFiles': + case 'CreateFolder': + case 'DeleteFiles': + case 'DeleteFolder': + case 'GetFiles': + case 'GetFolders': + case 'Init': + case 'LoadCookies': + case 'MoveFiles': + case 'RenameFile': + case 'RenameFolder': + $obj =& CKFinder_Connector_Core_Factory::getInstance("CommandHandler_".$command); + $obj->sendResponse(); + break; + + default: + $this->handleInvalidCommand(); + break; + } + } + + /** + * Get error handler + * + * @access public + * @return CKFinder_Connector_ErrorHandler_Base|CKFinder_Connector_ErrorHandler_FileUpload|CKFinder_Connector_ErrorHandler_Http + */ + public function &getErrorHandler() + { + $_errorHandler = $this->_registry->get("errorHandler"); + $oErrorHandler =& CKFinder_Connector_Core_Factory::getInstance($_errorHandler); + return $oErrorHandler; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Factory.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Factory.php new file mode 100644 index 0000000..393ca17 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Factory.php @@ -0,0 +1,68 @@ + + * $obj1 =& CKFinder_Connector_Core_Factory::getInstance("Ckfinder_Connector_Core_Xml"); + * $obj2 =& CKFinder_Connector_Core_Factory::getInstance("Core_Xml"); + *
      + * + * @param string $className class name + * @static + * @access public + * @return object + */ + public static function &getInstance($className) + { + $namespace = "CKFinder_Connector_"; + + $baseName = str_replace($namespace,"",$className); + + $className = $namespace.$baseName; + + if (!isset(CKFinder_Connector_Core_Factory::$instances[$className])) { + require_once CKFINDER_CONNECTOR_LIB_DIR . "/" . str_replace("_","/",$baseName).".php"; + CKFinder_Connector_Core_Factory::$instances[$className] = new $className; + } + + return CKFinder_Connector_Core_Factory::$instances[$className]; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/FolderHandler.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/FolderHandler.php new file mode 100644 index 0000000..1405049 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/FolderHandler.php @@ -0,0 +1,271 @@ +_resourceTypeName = (string)$_GET["type"]; + } + + if (isset($_GET["currentFolder"])) { + $this->_clientPath = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding((string)$_GET["currentFolder"]); + } + + if (!strlen($this->_clientPath)) { + $this->_clientPath = "/"; + } + else { + if (substr($this->_clientPath, -1, 1) != "/") { + $this->_clientPath .= "/"; + } + if (substr($this->_clientPath, 0, 1) != "/") { + $this->_clientPath = "/" . $this->_clientPath; + } + } + + $this->_aclMask = -1; + } + + /** + * Get resource type config + * + * @return CKFinder_Connector_Core_ResourceTypeConfig + * @access public + */ + public function &getResourceTypeConfig() + { + if (!isset($this->_resourceTypeConfig)) { + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $this->_resourceTypeConfig = $_config->getResourceTypeConfig($this->_resourceTypeName); + } + + if (is_null($this->_resourceTypeConfig)) { + $connector =& CKFinder_Connector_Core_Factory::getInstance("Core_Connector"); + $oErrorHandler =& $connector->getErrorHandler(); + $oErrorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_TYPE); + } + + return $this->_resourceTypeConfig; + } + + /** + * Get resource type name + * + * @return string + * @access public + */ + public function getResourceTypeName() + { + return $this->_resourceTypeName; + } + + /** + * Get Client path + * + * @return string + * @access public + */ + public function getClientPath() + { + return $this->_clientPath; + } + + /** + * Get Url + * + * @return string + * @access public + */ + public function getUrl() + { + if (is_null($this->_url)) { + $this->_resourceTypeConfig = $this->getResourceTypeConfig(); + if (is_null($this->_resourceTypeConfig)) { + $connector =& CKFinder_Connector_Core_Factory::getInstance("Core_Connector"); + $oErrorHandler =& $connector->getErrorHandler(); + $oErrorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_TYPE); + $this->_url = ""; + } + else { + $this->_url = $this->_resourceTypeConfig->getUrl() . ltrim($this->getClientPath(), "/"); + } + } + + return $this->_url; + } + + /** + * Get server path + * + * @return string + * @access public + */ + public function getServerPath() + { + if (is_null($this->_serverPath)) { + $this->_resourceTypeConfig = $this->getResourceTypeConfig(); + $this->_serverPath = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_resourceTypeConfig->getDirectory(), ltrim($this->_clientPath, "/")); + } + + return $this->_serverPath; + } + + /** + * Get server path to thumbnails directory + * + * @access public + * @return string + */ + public function getThumbsServerPath() + { + if (is_null($this->_thumbsServerPath)) { + $this->_resourceTypeConfig = $this->getResourceTypeConfig(); + + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $_thumbnailsConfig = $_config->getThumbnailsConfig(); + + // Get the resource type directory. + $this->_thumbsServerPath = CKFinder_Connector_Utils_FileSystem::combinePaths($_thumbnailsConfig->getDirectory(), $this->_resourceTypeConfig->getName()); + + // Return the resource type directory combined with the required path. + $this->_thumbsServerPath = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_thumbsServerPath, ltrim($this->_clientPath, '/')); + + if (!is_dir($this->_thumbsServerPath)) { + if(!CKFinder_Connector_Utils_FileSystem::createDirectoryRecursively($this->_thumbsServerPath)) { + /** + * @todo Ckfinder_Connector_Utils_Xml::raiseError(); perhaps we should return error + * + */ + } + } + } + + return $this->_thumbsServerPath; + } + + /** + * Get ACL Mask + * + * @return int + * @access public + */ + public function getAclMask() + { + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $_aclConfig = $_config->getAccessControlConfig(); + + if ($this->_aclMask == -1) { + $this->_aclMask = $_aclConfig->getComputedMask($this->_resourceTypeName, $this->_clientPath); + } + + return $this->_aclMask; + } + + /** + * Check ACL + * + * @access public + * @param int $aclToCkeck + * @return boolean + */ + public function checkAcl($aclToCkeck) + { + $aclToCkeck = intval($aclToCkeck); + + $maska = $this->getAclMask(); + return (($maska & $aclToCkeck) == $aclToCkeck); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Hooks.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Hooks.php new file mode 100644 index 0000000..0216677 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Hooks.php @@ -0,0 +1,173 @@ +getErrorHandler(); + + foreach ($hooks[$event] as $i => $hook) { + + $object = NULL; + $method = NULL; + $function = NULL; + $data = NULL; + $passData = false; + + /* $hook can be: a function, an object, an array of $functiontion and $data, + * an array of just a function, an array of object and method, or an + * array of object, method, and data. + */ + //function + if (is_string($hook)) { + $function = $hook; + } + //object + else if (is_object($hook)) { + $object = $hooks[$event][$i]; + $method = "on" . $event; + } + //array of... + else if (is_array($hook)) { + $count = count($hook); + if ($count) { + //...object + if (is_object($hook[0])) { + $object = $hooks[$event][$i][0]; + if ($count < 2) { + $method = "on" . $event; + } else { + //...object and method + $method = $hook[1]; + if (count($hook) > 2) { + //...object, method and data + $passData = true; + $data = $hook[2]; + } + } + } + //...function + else if (is_string($hook[0])) { + $function = $hook[0]; + if ($count > 1) { + //...function with data + $passData = true; + $data = $hook[1]; + } + } + } + } + + /* If defined, add data to the arguments array */ + if ($passData) { + $args = array_merge(array($data), $args); + } + + if (isset($object)) { + $callback = array($object, $method); + } + else if (false !== ($pos = strpos($function, '::'))) { + $callback = array(substr($function, 0, $pos), substr($function, $pos + 2)); + } + else { + $callback = $function; + } + + if (is_callable($callback)) { + $ret = call_user_func_array($callback, $args); + } + else { + $functionName = CKFinder_Connector_Core_Hooks::_printCallback($callback); + $errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_CUSTOM_ERROR, + "CKFinder failed to call a hook: " . $functionName); + return false; + } + + //String return is a custom error + if (is_string($ret)) { + $errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_CUSTOM_ERROR, $ret); + return false; + } + //hook returned an error code, user error codes start from 50000 + //error codes are important because this way it is possible to create multilanguage extensions + //TODO: two custom extensions may be popular and return the same error codes + //recomendation: create a function that calculates the error codes starting number + //for an extension, a pool of 100 error codes for each extension should be safe enough + else if (is_int($ret)) { + $errorHandler->throwError($ret); + return false; + } + //no value returned + else if( $ret === null ) { + $functionName = CKFinder_Connector_Core_Hooks::_printCallback($callback); + $errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_CUSTOM_ERROR, + "CKFinder extension returned an invalid value (null)." . + "Hook " . $functionName . " should return a value."); + return false; + } + else if (!$ret) { + return false; + } + } + + return true; + } + + /** + * Print user friendly name of a callback + * + * @param mixed $callback + * @return string + */ + public static function _printCallback($callback) + { + if (is_array($callback)) { + if (is_object($callback[0])) { + $className = get_class($callback[0]); + } else { + $className = strval($callback[0]); + } + $functionName = $className . '::' . strval($callback[1]); + } + else { + $functionName = strval($callback); + } + return $functionName; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ImagesConfig.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ImagesConfig.php new file mode 100644 index 0000000..b1f3b30 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ImagesConfig.php @@ -0,0 +1,106 @@ +=0) { + $this->_maxWidth = $_maxWidth; + } + } + if(isset($imagesNode['maxHeight'])) { + $_maxHeight = intval($imagesNode['maxHeight']); + if($_maxHeight>=0) { + $this->_maxHeight = $_maxHeight; + } + } + if(isset($imagesNode['quality'])) { + $_quality = intval($imagesNode['quality']); + if($_quality>0 && $_quality<=100) { + $this->_quality = $_quality; + } + } + } + + /** + * Get maximum width of a thumbnail + * + * @access public + * @return int + */ + public function getMaxWidth() + { + return $this->_maxWidth; + } + + /** + * Get maximum height of a thumbnail + * + * @access public + * @return int + */ + public function getMaxHeight() + { + return $this->_maxHeight; + } + + /** + * Get quality of a thumbnail (1-100) + * + * @access public + * @return int + */ + public function getQuality() + { + return $this->_quality; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Registry.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Registry.php new file mode 100644 index 0000000..2ac3f27 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Registry.php @@ -0,0 +1,75 @@ +_store); + } + + /** + * Set value + * + * @param string $key + * @param mixed $obj + * @access public + */ + public function set($key, $obj) + { + $this->_store[$key] = $obj; + } + + /** + * Get value + * + * @param string $key + * @return mixed + * @access public + */ + public function get($key) + { + if ($this->isValid($key)) { + return $this->_store[$key]; + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ResourceTypeConfig.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ResourceTypeConfig.php new file mode 100644 index 0000000..d12ff8b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ResourceTypeConfig.php @@ -0,0 +1,367 @@ +_name = $resourceTypeNode["name"]; + } + + if (isset($resourceTypeNode["url"])) { + $this->_url = $resourceTypeNode["url"]; + } + + if (!strlen($this->_url)) { + $this->_url = "/"; + } + else if(substr($this->_url,-1,1) != "/") { + $this->_url .= "/"; + } + + if (isset($resourceTypeNode["maxSize"])) { + $this->_maxSize = CKFinder_Connector_Utils_Misc::returnBytes((string)$resourceTypeNode["maxSize"]); + } + + if (isset($resourceTypeNode["directory"])) { + $this->_directory = $resourceTypeNode["directory"]; + } + + if (!strlen($this->_directory)) { + $this->_directory = resolveUrl($this->_url); + } + + if (isset($resourceTypeNode["allowedExtensions"])) { + if (is_array($resourceTypeNode["allowedExtensions"])) { + foreach ($resourceTypeNode["allowedExtensions"] as $e) { + $this->_allowedExtensions[] = strtolower(trim((string)$e)); + } + } + else { + $resourceTypeNode["allowedExtensions"] = trim((string)$resourceTypeNode["allowedExtensions"]); + if (strlen($resourceTypeNode["allowedExtensions"])) { + $extensions = explode(",", $resourceTypeNode["allowedExtensions"]); + foreach ($extensions as $e) { + $this->_allowedExtensions[] = strtolower(trim($e)); + } + } + } + } + + if (isset($resourceTypeNode["deniedExtensions"])) { + if (is_array($resourceTypeNode["deniedExtensions"])) { + + foreach ($resourceTypeNode["deniedExtensions"] as $extension) { + $this->_deniedExtensions[] = strtolower(trim((string)$e)); + } + } + else { + $resourceTypeNode["deniedExtensions"] = trim((string)$resourceTypeNode["deniedExtensions"]); + if (strlen($resourceTypeNode["deniedExtensions"])) { + $extensions = explode(",", $resourceTypeNode["deniedExtensions"]); + foreach ($extensions as $e) { + $this->_deniedExtensions[] = strtolower(trim($e)); + } + } + } + } + } + + /** + * Get name + * + * @access public + * @return string + */ + public function getName() + { + return $this->_name; + } + + /** + * Get url + * + * @access public + * @return string + */ + public function getUrl() + { + return $this->_url; + } + + /** + * Get directory + * + * @access public + * @return string + */ + public function getDirectory() + { + return $this->_directory; + } + + /** + * Get max size + * + * @access public + * @return int + */ + public function getMaxSize() + { + return $this->_maxSize; + } + + /** + * Get allowed extensions + * + * @access public + * @return array[]string + */ + public function getAllowedExtensions() + { + return $this->_allowedExtensions; + } + + /** + * Get denied extensions + * + * @access public + * @return array[]string + */ + public function getDeniedExtensions() + { + return $this->_deniedExtensions; + } + + /** + * Check extension, return true if file name is valid. + * Return false if extension is on denied list. + * If allowed extensions are defined, return false if extension isn't on allowed list. + * + * @access public + * @param string $extension extension + * @param boolean $renameIfRequired whether try to rename file or not + * @return boolean + */ + public function checkExtension(&$fileName, $renameIfRequired = true) + { + if (strpos($fileName, '.') === false) { + return true; + } + + if (is_null($this->_config)) { + $this->_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + } + + if ($this->_config->getCheckDoubleExtension()) { + $pieces = explode('.', $fileName); + + // First, check the last extension (ex. in file.php.jpg, the "jpg"). + if ( !$this->checkSingleExtension( $pieces[sizeof($pieces)-1] ) ) { + return false; + } + + if ($renameIfRequired) { + // Check the other extensions, rebuilding the file name. If an extension is + // not allowed, replace the dot with an underscore. + $fileName = $pieces[0] ; + for ($i=1; $icheckSingleExtension( $pieces[$i] ) ? '.' : '_' ; + $fileName .= $pieces[$i]; + } + + // Add the last extension to the final name. + $fileName .= '.' . $pieces[sizeof($pieces)-1] ; + } + } + else { + // Check only the last extension (ex. in file.php.jpg, only "jpg"). + return $this->checkSingleExtension( substr($fileName, strrpos($fileName,'.')+1) ); + } + + return true; + } + + /** + * Check given folder name + * Return true if folder name matches hidden folder names list + * + * @param string $folderName + * @access public + * @return boolean + */ + public function checkIsHiddenFolder($folderName) + { + if (is_null($this->_config)) { + $this->_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + } + + $regex = $this->_config->getHideFoldersRegex(); + if ($regex) { + return preg_match($regex, $folderName); + } + + return false; + } + + /** + * Check given file name + * Return true if file name matches hidden file names list + * + * @param string $fileName + * @access public + * @return boolean + */ + public function checkIsHiddenFile($fileName) + { + if (is_null($this->_config)) { + $this->_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + } + + $regex = $this->_config->getHideFilesRegex(); + if ($regex) { + return preg_match($regex, $fileName); + } + + return false; + } + + /** + * Check given path + * Return true if path contains folder name that matches hidden folder names list + * + * @param string $folderName + * @access public + * @return boolean + */ + public function checkIsHiddenPath($path) + { + $_clientPathParts = explode("/", trim($path, "/")); + if ($_clientPathParts) { + foreach ($_clientPathParts as $_part) { + if ($this->checkIsHiddenFolder($_part)) { + return true; + } + } + } + + return false; + } + + /** + * Check if extension is allowed + * Return true if the extension is allowed. + * + * @param string $extension + * @access public + * @return boolean + */ + public function checkSingleExtension($extension) + { + $extension = strtolower(ltrim($extension,'.')); + + if (sizeof($this->_deniedExtensions)) { + if (in_array($extension, $this->_deniedExtensions)) { + return false; + } + } + + if (sizeof($this->_allowedExtensions)) { + return in_array($extension, $this->_allowedExtensions); + } + + return true; + } + + /** + * Generate hash for current resource type + * + * @access public + * @return string 16 digit hash + */ + public function getHash(){ + return substr(md5($this->getDirectory()), 0, 16); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ThumbnailsConfig.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ThumbnailsConfig.php new file mode 100644 index 0000000..2c9642f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/ThumbnailsConfig.php @@ -0,0 +1,220 @@ +_isEnabled = CKFinder_Connector_Utils_Misc::booleanValue($thumbnailsNode['enabled']); + } + if( isset($thumbnailsNode['directAccess'])) { + $this->_directAccess = CKFinder_Connector_Utils_Misc::booleanValue($thumbnailsNode['directAccess']); + } + if( isset($thumbnailsNode['bmpSupported'])) { + $this->_bmpSupported = CKFinder_Connector_Utils_Misc::booleanValue($thumbnailsNode['bmpSupported']); + } + if(isset($thumbnailsNode['maxWidth'])) { + $_maxWidth = intval($thumbnailsNode['maxWidth']); + if($_maxWidth>=0) { + $this->_maxWidth = $_maxWidth; + } + } + if(isset($thumbnailsNode['maxHeight'])) { + $_maxHeight = intval($thumbnailsNode['maxHeight']); + if($_maxHeight>=0) { + $this->_maxHeight = $_maxHeight; + } + } + if(isset($thumbnailsNode['quality'])) { + $_quality = intval($thumbnailsNode['quality']); + if($_quality>0 && $_quality<=100) { + $this->_quality = $_quality; + } + } + + if(isset($thumbnailsNode['url'])) { + $this->_url = $thumbnailsNode['url']; + } + if (!strlen($this->_url)) { + $this->_url = "/"; + } + else if(substr($this->_url,-1,1) != "/") { + $this->_url .= "/"; + } + + if(isset($thumbnailsNode['directory'])) { + $this->_directory = $thumbnailsNode['directory']; + } + } + + /** + * Get URL + * + * @access public + * @return string + */ + public function getUrl() + { + return $this->_url; + } + + /** + * Get directory + * + * @access public + * @return string + */ + public function getDirectory() + { + return $this->_directory; + } + + /** + * Get is enabled setting + * + * @access public + * @return boolean + */ + public function getIsEnabled() + { + return $this->_isEnabled; + } + + /** + * Get is enabled setting + * + * @access public + * @return boolean + */ + public function getBmpSupported() + { + return $this->_bmpSupported; + } + + /** + * Is direct access to thumbnails allowed? + * + * @access public + * @return boolean + */ + public function getDirectAccess() + { + return $this->_directAccess; + } + + /** + * Get maximum width of a thumbnail + * + * @access public + * @return int + */ + public function getMaxWidth() + { + return $this->_maxWidth; + } + + /** + * Get maximum height of a thumbnail + * + * @access public + * @return int + */ + public function getMaxHeight() + { + return $this->_maxHeight; + } + + /** + * Get quality of a thumbnail (1-100) + * + * @access public + * @return int + */ + public function getQuality() + { + return $this->_quality; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Xml.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Xml.php new file mode 100644 index 0000000..9bd259f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Core/Xml.php @@ -0,0 +1,130 @@ +sendXmlHeaders(); + echo $this->getXMLDeclaration(); + $this->_connectorNode = new Ckfinder_Connector_Utils_XmlNode("Connector"); + $this->_errorNode = new Ckfinder_Connector_Utils_XmlNode("Error"); + $this->_connectorNode->addChild($this->_errorNode); + } + + /** + * Return connector node + * + * @return Ckfinder_Connector_Utils_XmlNode + * @access public + */ + public function &getConnectorNode() + { + return $this->_connectorNode; + } + + /** + * Return error node + * + * @return Ckfinder_Connector_Utils_XmlNode + * @access public + */ + public function &getErrorNode() + { + return $this->_errorNode; + } + + /** + * Send XML headers to the browser (and force browser not to use cache) + * @access private + */ + private function sendXmlHeaders() + { + // Prevent the browser from caching the result. + // Date in the past + header('Expires: Mon, 26 Jul 1997 05:00:00 GMT') ; + // always modified + header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT') ; + // HTTP/1.1 + header('Cache-Control: no-store, no-cache, must-revalidate') ; + header('Cache-Control: post-check=0, pre-check=0', false) ; + // HTTP/1.0 + header('Pragma: no-cache') ; + + // Set the response format. + header( 'Content-Type: text/xml; charset=utf-8' ) ; + } + + /** + * Return XML declaration + * + * @access private + * @return string + */ + private function getXMLDeclaration() + { + return ''; + } + + /** + * Send error message to the browser. If error number is set to 1, $text (custom error message) will be displayed + * Don't call this function directly + * + * @access public + * @param int $number error number + * @param string $text Custom error message (optional) + */ + public function raiseError( $number, $text = false) + { + $this->_errorNode->addAttribute("number", intval($number)); + if (false!=$text) { + $this->_errorNode->addAttribute("text", $text); + } + + echo $this->_connectorNode->asXML(); + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/Base.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/Base.php new file mode 100644 index 0000000..3a02b56 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/Base.php @@ -0,0 +1,86 @@ +_catchAllErrors = $newValue ? true : false; + } + + /** + * Set which errors should be ignored + * + * @param array $newArray + */ + public function setSkipErrorsArray($newArray) + { + if (is_array($newArray)) { + $this->_skipErrorsArray = $newArray; + } + } + + /** + * Throw connector error, return true if error has been thrown, false if error has been catched + * + * @param int $number + * @param string $text + * @access public + */ + public function throwError($number, $text = false) + { + if ($this->_catchAllErrors || in_array($number, $this->_skipErrorsArray)) { + return false; + } + + $_xml =& CKFinder_Connector_Core_Factory::getInstance("Core_Xml"); + $_xml->raiseError($number,$text); + + exit; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/FileUpload.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/FileUpload.php new file mode 100644 index 0000000..01c840b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/FileUpload.php @@ -0,0 +1,84 @@ +_catchAllErrors || in_array($number, $this->_skipErrorsArray)) { + return false; + } + + $oRegistry = & CKFinder_Connector_Core_Factory :: getInstance("Core_Registry"); + $sFileName = $oRegistry->get("FileUpload_fileName"); + $sFileUrl = $oRegistry->get("FileUpload_url"); + $sEncodedFileName = CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($sFileName); + + header('Content-Type: text/html; charset=utf-8'); + + $errorMessage = CKFinder_Connector_Utils_Misc::getErrorMessage($number, $sEncodedFileName); + if (!$uploaded) { + $sFileName = ""; + $sEncodedFileName = ""; + } + if (!empty($_GET['response_type']) && $_GET['response_type'] == 'txt') { + echo $sFileName."|".$errorMessage; + } + else { + echo ""; + } + + if ($exit) { + exit; + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/Http.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/Http.php new file mode 100644 index 0000000..d2c7c7d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/Http.php @@ -0,0 +1,73 @@ +_catchAllErrors || in_array($number, $this->_skipErrorsArray)) { + return false; + } + + switch ($number) + { + case CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST: + case CKFINDER_CONNECTOR_ERROR_INVALID_NAME: + case CKFINDER_CONNECTOR_ERROR_THUMBNAILS_DISABLED: + case CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED: + header("HTTP/1.0 403 Forbidden"); + header("X-CKFinder-Error: ". $number); + break; + + case CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED: + header("HTTP/1.0 500 Internal Server Error"); + header("X-CKFinder-Error: ".$number); + break; + + default: + header("HTTP/1.0 404 Not Found"); + header("X-CKFinder-Error: ". $number); + break; + } + + if ($exit) { + exit; + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/QuickUpload.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/QuickUpload.php new file mode 100644 index 0000000..58d4756 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/ErrorHandler/QuickUpload.php @@ -0,0 +1,84 @@ +_catchAllErrors || in_array($number, $this->_skipErrorsArray)) { + return false; + } + + $oRegistry = & CKFinder_Connector_Core_Factory :: getInstance("Core_Registry"); + $sFileName = $oRegistry->get("FileUpload_fileName"); + $sFileUrl = $oRegistry->get("FileUpload_url"); + $sEncodedFileName = CKFinder_Connector_Utils_FileSystem::convertToConnectorEncoding($sFileName); + + header('Content-Type: text/html; charset=utf-8'); + + /** + * echo "; + + if ($exit) { + exit; + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/FileSystem.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/FileSystem.php new file mode 100644 index 0000000..346ef72 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/FileSystem.php @@ -0,0 +1,772 @@ +getDisallowUnsafeCharacters()) { + if (strpos($fileName, ";") !== false) { + return false; + } + } + + return true; + } + + /** + * Check whether $folderName is a valid folder name, return true on success + * + * @static + * @access public + * @param string $folderName + * @return boolean + */ + public static function checkFolderName($folderName) + { + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + + if ($_config->getDisallowUnsafeCharacters()) { + if (strpos($folderName, ".") !== false) { + return false; + } + } + + return CKFinder_Connector_Utils_FileSystem::checkFileName($folderName); + } + + /** + * Check whether $path contains valid folders names + * + * @static + * @access public + * @param string $path + */ + public static function checkFolderPath($path){ + $path = substr($path,strpos($path,'/')+1); + $path = explode('/',trim($path,'/')); + foreach ( $path as $dir ){ + if ( !empty($dir) && !CKFinder_Connector_Utils_FileSystem::checkFolderName($dir) ){ + return false; + } + } + + return true; + } + + /** + * Unlink file/folder + * + * @static + * @access public + * @param string $path + * @return boolean + */ + public static function unlink($path) + { + /* make sure the path exists */ + if(!file_exists($path)) { + return false; + } + + /* If it is a file or link, just delete it */ + if(is_file($path) || is_link($path)) { + return @unlink($path); + } + + /* Scan the dir and recursively unlink */ + $files = scandir($path); + if ($files) { + foreach($files as $filename) + { + if ($filename == '.' || $filename == '..') { + continue; + } + $file = str_replace('//','/',$path.'/'.$filename); + CKFinder_Connector_Utils_FileSystem::unlink($file); + } + } + + /* Remove the parent dir */ + if(!@rmdir($path)) { + return false; + } + + return true; + } + + /** + * Return file name without extension + * + * @static + * @access public + * @param string $fileName + * @param boolean $shortExtensionMode If set to false, extension is everything after a first dot + * @return string + */ + public static function getFileNameWithoutExtension($fileName, $shortExtensionMode = TRUE) + { + $dotPos = $shortExtensionMode ? strrpos( $fileName, '.' ) : strpos( $fileName, '.' ); + if (false === $dotPos) { + return $fileName; + } + + return substr($fileName, 0, $dotPos); + } + + /** + * Get file extension + * + * @static + * @access public + * @param string $fileName + * @param boolean $shortExtensionMode If set to false, extension is everything after a first dot + * @return string + */ + public static function getExtension( $fileName, $shortExtensionMode = TRUE ) + { + $dotPos = $shortExtensionMode ? strrpos( $fileName, '.' ) : strpos( $fileName, '.' ); + if (false === $dotPos) { + return ""; + } + + return substr( $fileName, $dotPos + 1 ); + } + + /** + * Read file, split it into small chunks and send it to the browser + * + * @static + * @access public + * @param string $filename + * @return boolean + */ + public static function readfileChunked($filename) + { + $chunksize = 1024 * 10; // how many bytes per chunk + + $handle = fopen($filename, 'rb'); + if ($handle === false) { + return false; + } + while (!feof($handle)) { + echo fread($handle, $chunksize); + @ob_flush(); + flush(); + @set_time_limit(8); + } + fclose($handle); + return true; + } + + /** + * Replace accented UTF-8 characters by unaccented ASCII-7 "equivalents". + * The purpose of this function is to replace characters commonly found in Latin + * alphabets with something more or less equivalent from the ASCII range. This can + * be useful for converting a UTF-8 to something ready for a filename, for example. + * Following the use of this function, you would probably also pass the string + * through utf8_strip_non_ascii to clean out any other non-ASCII chars + * + * For a more complete implementation of transliteration, see the utf8_to_ascii package + * available from the phputf8 project downloads: + * http://prdownloads.sourceforge.net/phputf8 + * + * @param string UTF-8 string + * @param string UTF-8 with accented characters replaced by ASCII chars + * @return string accented chars replaced with ascii equivalents + * @author Andreas Gohr + * @see http://sourceforge.net/projects/phputf8/ + */ + public static function convertToAscii($str) + { + static $UTF8_LOWER_ACCENTS = NULL; + static $UTF8_UPPER_ACCENTS = NULL; + + if ( is_null($UTF8_LOWER_ACCENTS) ) { + $UTF8_LOWER_ACCENTS = array( + 'à' => 'a', 'ô' => 'o', 'ď' => 'd', 'ḟ' => 'f', 'ë' => 'e', 'š' => 's', 'ơ' => 'o', + 'ß' => 'ss', 'ă' => 'a', 'ř' => 'r', 'ț' => 't', 'ň' => 'n', 'ā' => 'a', 'ķ' => 'k', + 'ŝ' => 's', 'ỳ' => 'y', 'ņ' => 'n', 'ĺ' => 'l', 'ħ' => 'h', 'ṗ' => 'p', 'ó' => 'o', + 'ú' => 'u', 'ě' => 'e', 'é' => 'e', 'ç' => 'c', 'ẁ' => 'w', 'ċ' => 'c', 'õ' => 'o', + 'ṡ' => 's', 'ø' => 'o', 'ģ' => 'g', 'ŧ' => 't', 'ș' => 's', 'ė' => 'e', 'ĉ' => 'c', + 'ś' => 's', 'î' => 'i', 'ű' => 'u', 'ć' => 'c', 'ę' => 'e', 'ŵ' => 'w', 'ṫ' => 't', + 'ū' => 'u', 'č' => 'c', 'ö' => 'oe', 'è' => 'e', 'ŷ' => 'y', 'ą' => 'a', 'ł' => 'l', + 'ų' => 'u', 'ů' => 'u', 'ş' => 's', 'ğ' => 'g', 'ļ' => 'l', 'ƒ' => 'f', 'ž' => 'z', + 'ẃ' => 'w', 'ḃ' => 'b', 'å' => 'a', 'ì' => 'i', 'ï' => 'i', 'ḋ' => 'd', 'ť' => 't', + 'ŗ' => 'r', 'ä' => 'ae', 'í' => 'i', 'ŕ' => 'r', 'ê' => 'e', 'ü' => 'ue', 'ò' => 'o', + 'ē' => 'e', 'ñ' => 'n', 'ń' => 'n', 'ĥ' => 'h', 'ĝ' => 'g', 'đ' => 'd', 'ĵ' => 'j', + 'ÿ' => 'y', 'ũ' => 'u', 'ŭ' => 'u', 'ư' => 'u', 'ţ' => 't', 'ý' => 'y', 'ő' => 'o', + 'â' => 'a', 'ľ' => 'l', 'ẅ' => 'w', 'ż' => 'z', 'ī' => 'i', 'ã' => 'a', 'ġ' => 'g', + 'ṁ' => 'm', 'ō' => 'o', 'ĩ' => 'i', 'ù' => 'u', 'į' => 'i', 'ź' => 'z', 'á' => 'a', + 'û' => 'u', 'þ' => 'th', 'ð' => 'dh', 'æ' => 'ae', 'µ' => 'u', 'ĕ' => 'e', + ); + } + + $str = str_replace( + array_keys($UTF8_LOWER_ACCENTS), + array_values($UTF8_LOWER_ACCENTS), + $str + ); + + if ( is_null($UTF8_UPPER_ACCENTS) ) { + $UTF8_UPPER_ACCENTS = array( + 'À' => 'A', 'Ô' => 'O', 'Ď' => 'D', 'Ḟ' => 'F', 'Ë' => 'E', 'Š' => 'S', 'Ơ' => 'O', + 'Ă' => 'A', 'Ř' => 'R', 'Ț' => 'T', 'Ň' => 'N', 'Ā' => 'A', 'Ķ' => 'K', + 'Ŝ' => 'S', 'Ỳ' => 'Y', 'Ņ' => 'N', 'Ĺ' => 'L', 'Ħ' => 'H', 'Ṗ' => 'P', 'Ó' => 'O', + 'Ú' => 'U', 'Ě' => 'E', 'É' => 'E', 'Ç' => 'C', 'Ẁ' => 'W', 'Ċ' => 'C', 'Õ' => 'O', + 'Ṡ' => 'S', 'Ø' => 'O', 'Ģ' => 'G', 'Ŧ' => 'T', 'Ș' => 'S', 'Ė' => 'E', 'Ĉ' => 'C', + 'Ś' => 'S', 'Î' => 'I', 'Ű' => 'U', 'Ć' => 'C', 'Ę' => 'E', 'Ŵ' => 'W', 'Ṫ' => 'T', + 'Ū' => 'U', 'Č' => 'C', 'Ö' => 'Oe', 'È' => 'E', 'Ŷ' => 'Y', 'Ą' => 'A', 'Ł' => 'L', + 'Ų' => 'U', 'Ů' => 'U', 'Ş' => 'S', 'Ğ' => 'G', 'Ļ' => 'L', 'Ƒ' => 'F', 'Ž' => 'Z', + 'Ẃ' => 'W', 'Ḃ' => 'B', 'Å' => 'A', 'Ì' => 'I', 'Ï' => 'I', 'Ḋ' => 'D', 'Ť' => 'T', + 'Ŗ' => 'R', 'Ä' => 'Ae', 'Í' => 'I', 'Ŕ' => 'R', 'Ê' => 'E', 'Ü' => 'Ue', 'Ò' => 'O', + 'Ē' => 'E', 'Ñ' => 'N', 'Ń' => 'N', 'Ĥ' => 'H', 'Ĝ' => 'G', 'Đ' => 'D', 'Ĵ' => 'J', + 'Ÿ' => 'Y', 'Ũ' => 'U', 'Ŭ' => 'U', 'Ư' => 'U', 'Ţ' => 'T', 'Ý' => 'Y', 'Ő' => 'O', + 'Â' => 'A', 'Ľ' => 'L', 'Ẅ' => 'W', 'Ż' => 'Z', 'Ī' => 'I', 'Ã' => 'A', 'Ġ' => 'G', + 'Ṁ' => 'M', 'Ō' => 'O', 'Ĩ' => 'I', 'Ù' => 'U', 'Į' => 'I', 'Ź' => 'Z', 'Á' => 'A', + 'Û' => 'U', 'Þ' => 'Th', 'Ð' => 'Dh', 'Æ' => 'Ae', 'Ĕ' => 'E', + ); + } + $str = str_replace( + array_keys($UTF8_UPPER_ACCENTS), + array_values($UTF8_UPPER_ACCENTS), + $str + ); + return $str; + } + + /** + * Secure file name from unsafe characters + * + * @param string $fileName + * @access public + * @static + * @return string $fileName + */ + public static function secureFileName($fileName) + { + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $fileName = str_replace(array(":", "*", "?", "|", "/"), "_", $fileName); + if ( $_config->getDisallowUnsafeCharacters() ) + { + $fileName = str_replace(";", "_", $fileName); + } + if ($_config->forceAscii()) + { + $fileName = CKFinder_Connector_Utils_FileSystem::convertToAscii($fileName); + } + return $fileName; + } + + /** + * Convert file name from UTF-8 to system encoding + * + * @static + * @access public + * @param string $fileName + * @return string + */ + public static function convertToFilesystemEncoding($fileName) + { + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $encoding = $_config->getFilesystemEncoding(); + if (is_null($encoding) || strcasecmp($encoding, "UTF-8") == 0 || strcasecmp($encoding, "UTF8") == 0) { + return $fileName; + } + + if (!function_exists("iconv")) { + if (strcasecmp($encoding, "ISO-8859-1") == 0 || strcasecmp($encoding, "ISO8859-1") == 0 || strcasecmp($encoding, "Latin1") == 0) { + return str_replace("\0", "_", utf8_decode($fileName)); + } else if (function_exists('mb_convert_encoding')) { + /** + * @todo check whether charset is supported - mb_list_encodings + */ + $encoded = @mb_convert_encoding($fileName, $encoding, 'UTF-8'); + if (@mb_strlen($fileName, "UTF-8") != @mb_strlen($encoded, $encoding)) { + return str_replace("\0", "_", preg_replace("/[^[:ascii:]]/u","_",$fileName)); + } + else { + return str_replace("\0", "_", $encoded); + } + } else { + return str_replace("\0", "_", preg_replace("/[^[:ascii:]]/u","_",$fileName)); + } + } + + $converted = @iconv("UTF-8", $encoding . "//IGNORE//TRANSLIT", $fileName); + if ($converted === false) { + return str_replace("\0", "_", preg_replace("/[^[:ascii:]]/u","_",$fileName)); + } + + return $converted; + } + + /** + * Convert file name from system encoding into UTF-8 + * + * @static + * @access public + * @param string $fileName + * @return string + */ + public static function convertToConnectorEncoding($fileName) + { + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $encoding = $_config->getFilesystemEncoding(); + if (is_null($encoding) || strcasecmp($encoding, "UTF-8") == 0 || strcasecmp($encoding, "UTF8") == 0) { + return $fileName; + } + + if (!function_exists("iconv")) { + if (strcasecmp($encoding, "ISO-8859-1") == 0 || strcasecmp($encoding, "ISO8859-1") == 0 || strcasecmp($encoding, "Latin1") == 0) { + return utf8_encode($fileName); + } else { + return $fileName; + } + } + + $converted = @iconv($encoding, "UTF-8", $fileName); + + if ($converted === false) { + return $fileName; + } + + return $converted; + } + + /** + * Find document root + * + * @return string + * @access public + */ + public function getDocumentRootPath() + { + /** + * The absolute pathname of the currently executing script. + * Notatka: If a script is executed with the CLI, as a relative path, such as file.php or ../file.php, + * $_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user. + */ + if (isset($_SERVER['SCRIPT_FILENAME'])) { + $sRealPath = dirname($_SERVER['SCRIPT_FILENAME']); + } + else { + /** + * realpath — Returns canonicalized absolute pathname + */ + $sRealPath = realpath('.') ; + } + + $sRealPath = $this->trimPathTrailingSlashes($sRealPath); + + /** + * The filename of the currently executing script, relative to the document root. + * For instance, $_SERVER['PHP_SELF'] in a script at the address http://example.com/test.php/foo.bar + * would be /test.php/foo.bar. + */ + $sSelfPath = dirname($_SERVER['PHP_SELF']); + $sSelfPath = $this->trimPathTrailingSlashes($sSelfPath); + + return $this->trimPathTrailingSlashes(substr($sRealPath, 0, strlen($sRealPath) - strlen($sSelfPath))); + } + + /** + * Create directory recursively + * + * @access public + * @static + * @param string $dir + * @return boolean + */ + public static function createDirectoryRecursively($dir) + { + if (DIRECTORY_SEPARATOR === "\\") { + $dir = str_replace("/", "\\", $dir); + } + else if (DIRECTORY_SEPARATOR === "/") { + $dir = str_replace("\\", "/", $dir); + } + + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + if ($perms = $_config->getChmodFolders()) { + $oldUmask = umask(0); + $bCreated = @mkdir($dir, $perms, true); + umask($oldUmask); + } + else { + $bCreated = @mkdir($dir, 0777, true); + } + + return $bCreated; + } + + /** + * Detect HTML in the first KB to prevent against potential security issue with + * IE/Safari/Opera file type auto detection bug. + * Returns true if file contain insecure HTML code at the beginning. + * + * @static + * @access public + * @param string $filePath absolute path to file + * @return boolean + */ + public static function detectHtml($filePath) + { + $fp = @fopen($filePath, 'rb'); + if ( $fp === false || !flock( $fp, LOCK_SH ) ) { + return -1 ; + } + $chunk = fread($fp, 1024); + flock( $fp, LOCK_UN ) ; + fclose($fp); + + $chunk = strtolower($chunk); + + if (!$chunk) { + return false; + } + + $chunk = trim($chunk); + + if (preg_match("/= 4.0.7 + if ( function_exists( 'version_compare' ) ) { + $sCurrentVersion = phpversion(); + if ( version_compare( $sCurrentVersion, "4.2.0" ) >= 0 ) { + $imageCheckExtensions[] = "tiff"; + $imageCheckExtensions[] = "tif"; + } + if ( version_compare( $sCurrentVersion, "4.3.0" ) >= 0 ) { + $imageCheckExtensions[] = "swc"; + } + if ( version_compare( $sCurrentVersion, "4.3.2" ) >= 0 ) { + $imageCheckExtensions[] = "jpc"; + $imageCheckExtensions[] = "jp2"; + $imageCheckExtensions[] = "jpx"; + $imageCheckExtensions[] = "jb2"; + $imageCheckExtensions[] = "xbm"; + $imageCheckExtensions[] = "wbmp"; + } + } + + if ( !in_array( $extension, $imageCheckExtensions ) ) { + return true; + } + + if ( @getimagesize( $filePath ) === false ) { + return false ; + } + + return true; + } + + /** + * Returns true if directory is not empty + * + * @access public + * @static + * @param string $clientPath client path (with trailing slash) + * @param object $_resourceType resource type configuration + * @return boolean + */ + public static function hasChildren($clientPath, $_resourceType) + { + $serverPath = CKFinder_Connector_Utils_FileSystem::combinePaths($_resourceType->getDirectory(), $clientPath); + + if (!is_dir($serverPath) || (false === $fh = @opendir($serverPath))) { + return false; + } + + $hasChildren = false; + while (false !== ($filename = readdir($fh))) { + if ($filename == '.' || $filename == '..') { + continue; + } else if (is_dir($serverPath . $filename)) { + //we have found valid directory + $_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $_acl = $_config->getAccessControlConfig(); + $_aclMask = $_acl->getComputedMask($_resourceType->getName(), $clientPath . $filename); + if ( ($_aclMask & CKFINDER_CONNECTOR_ACL_FOLDER_VIEW) != CKFINDER_CONNECTOR_ACL_FOLDER_VIEW ) { + continue; + } + if ($_resourceType->checkIsHiddenFolder($filename)) { + continue; + } + + $hasChildren = true; + break; + } + } + + closedir($fh); + + return $hasChildren; + } + + /** + * Retruns temp directory + * + * @access public + * @static + * @return string + */ + public static function getTmpDir() + { + $_config = & CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $tmpDir = $_config->getTempDirectory(); + if ( $tmpDir ) + { + return $tmpDir; + } + if ( !function_exists('sys_get_temp_dir')) { + function sys_get_temp_dir() { + if( $temp=getenv('TMP') ){ + return $temp; + } + if( $temp=getenv('TEMP') ) { + return $temp; + } + if( $temp=getenv('TMPDIR') ) { + return $temp; + } + $temp = tempnam(__FILE__,''); + if ( file_exists($temp) ){ + unlink($temp); + return dirname($temp); + } + return null; + } + } + return sys_get_temp_dir(); + } + + /** + * Check if given directory is empty + * + * @param string $dirname + * @access public + * @static + * @return bool + */ + public static function isEmptyDir($dirname) + { + $files = scandir($dirname); + if ( $files && count($files) > 2) + { + return false; + } + return true; + } + + /** + * Autorename file if previous name is already taken + * + * @param string $filePath + * @param string $fileName + * @param string $sFileNameOrginal + */ + public static function autoRename( $filePath, $fileName ) + { + $sFileNameOrginal = $fileName; + $iCounter = 0; + while (true) + { + $sFilePath = CKFinder_Connector_Utils_FileSystem::combinePaths($filePath, $fileName); + if ( file_exists($sFilePath) ){ + $iCounter++; + $fileName = CKFinder_Connector_Utils_FileSystem::getFileNameWithoutExtension($sFileNameOrginal, false) . "(" . $iCounter . ")" . "." .CKFinder_Connector_Utils_FileSystem::getExtension($sFileNameOrginal, false); + } + else + { + break; + } + } + return $fileName; + } + + /** + * Send file to browser + * Selects the method depending on the XSendfile setting + * @param string $filePath + */ + public static function sendFile( $filePath ){ + $config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + if ( $config->getXSendfile() ){ + CKFinder_Connector_Utils_FileSystem::sendWithXSendfile($filePath); + } else { + CKFinder_Connector_Utils_FileSystem::readfileChunked($filePath); + } + } + + /** + * Send files using X-Sendfile server module + * + * @param string $filePath + */ + public static function sendWithXSendfile ( $filePath ){ + if ( stripos($_SERVER['SERVER_SOFTWARE'], 'nginx') !== FALSE ){ + $fallback = true; + $config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config"); + $XSendfileNginx = $config->getXSendfileNginx(); + foreach ( $XSendfileNginx as $location => $root){ + if ( false !== stripos($filePath , $root) ){ + $fallback = false; + $filePath = str_ireplace($root,$location,$filePath); + header("X-Accel-Redirect: ".$filePath); // Nginx + break; + } + } + // fallback to standar method + if ( $fallback ){ + CKFinder_Connector_Utils_FileSystem::readfileChunked($filePath); + } + } elseif ( stripos($_SERVER['SERVER_SOFTWARE'], 'lighttpd/1.4') !== FALSE ){ + header("X-LIGHTTPD-send-file: ".$filePath); // Lighttpd v1.4 + } else { + header("X-Sendfile: ".$filePath); // Apache, Lighttpd v1.5, Cherokee + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/Misc.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/Misc.php new file mode 100644 index 0000000..7a32996 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/Misc.php @@ -0,0 +1,399 @@ +'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')'); + return strtr(rawurlencode($str), $revert); + } + + /** + * Convert any value to boolean, strings like "false", "FalSE" and "off" are also considered as false + * + * @static + * @access public + * @param mixed $value + * @return boolean + */ + public static function booleanValue($value) + { + if (strcasecmp("false", $value) == 0 || strcasecmp("off", $value) == 0 || !$value) { + return false; + } else { + return true; + } + } + + /** + * @link http://pl.php.net/manual/en/function.imagecopyresampled.php + * replacement to imagecopyresampled that will deliver results that are almost identical except MUCH faster (very typically 30 times faster) + * + * @static + * @access public + * @param string $dst_image + * @param string $src_image + * @param int $dst_x + * @param int $dst_y + * @param int $src_x + * @param int $src_y + * @param int $dst_w + * @param int $dst_h + * @param int $src_w + * @param int $src_h + * @param int $quality + * @return boolean + */ + public static function fastImageCopyResampled (&$dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h, $quality = 3) + { + if (empty($src_image) || empty($dst_image)) { + return false; + } + + if ($quality <= 1) { + $temp = imagecreatetruecolor ($dst_w + 1, $dst_h + 1); + imagecopyresized ($temp, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w + 1, $dst_h + 1, $src_w, $src_h); + imagecopyresized ($dst_image, $temp, 0, 0, 0, 0, $dst_w, $dst_h, $dst_w, $dst_h); + imagedestroy ($temp); + + } elseif ($quality < 5 && (($dst_w * $quality) < $src_w || ($dst_h * $quality) < $src_h)) { + $tmp_w = $dst_w * $quality; + $tmp_h = $dst_h * $quality; + $temp = imagecreatetruecolor ($tmp_w + 1, $tmp_h + 1); + imagecopyresized ($temp, $src_image, 0, 0, $src_x, $src_y, $tmp_w + 1, $tmp_h + 1, $src_w, $src_h); + imagecopyresampled ($dst_image, $temp, $dst_x, $dst_y, 0, 0, $dst_w, $dst_h, $tmp_w, $tmp_h); + imagedestroy ($temp); + + } else { + imagecopyresampled ($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); + } + + return true; + } + + /** + * @link http://pl.php.net/manual/pl/function.imagecreatefromjpeg.php + * function posted by e dot a dot schultz at gmail dot com + * + * @static + * @access public + * @param string $filename + * @return boolean + */ + public static function setMemoryForImage($imageWidth, $imageHeight, $imageBits, $imageChannels) + { + $MB = 1048576; // number of bytes in 1M + $K64 = 65536; // number of bytes in 64K + $TWEAKFACTOR = 2.4; // Or whatever works for you + $memoryNeeded = round( ( $imageWidth * $imageHeight + * $imageBits + * $imageChannels / 8 + + $K64 + ) * $TWEAKFACTOR + ) + 3*$MB; + + //ini_get('memory_limit') only works if compiled with "--enable-memory-limit" also + //Default memory limit is 8MB so well stick with that. + //To find out what yours is, view your php.ini file. + $memoryLimit = CKFinder_Connector_Utils_Misc::returnBytes(@ini_get('memory_limit'))/$MB; + // There are no memory limits, nothing to do + if ($memoryLimit == -1) { + return true; + } + if (!$memoryLimit) { + $memoryLimit = 8; + } + + $memoryLimitMB = $memoryLimit * $MB; + if (function_exists('memory_get_usage')) { + if (memory_get_usage() + $memoryNeeded > $memoryLimitMB) { + $newLimit = $memoryLimit + ceil( ( memory_get_usage() + + $memoryNeeded + - $memoryLimitMB + ) / $MB + ); + if (@ini_set( 'memory_limit', $newLimit . 'M' ) === false) { + return false; + } + } + } else { + if ($memoryNeeded + 3*$MB > $memoryLimitMB) { + $newLimit = $memoryLimit + ceil(( 3*$MB + + $memoryNeeded + - $memoryLimitMB + ) / $MB + ); + if (false === @ini_set( 'memory_limit', $newLimit . 'M' )) { + return false; + } + } + } + + return true; + } + + /** + * convert shorthand php.ini notation into bytes, much like how the PHP source does it + * @link http://pl.php.net/manual/en/function.ini-get.php + * + * @static + * @access public + * @param string $val + * @return int + */ + public static function returnBytes($val) { + $val = trim($val); + if (!$val) { + return 0; + } + $last = strtolower($val[strlen($val)-1]); + switch($last) { + // The 'G' modifier is available since PHP 5.1.0 + case 'g': + $val *= 1024; + case 'm': + $val *= 1024; + case 'k': + $val *= 1024; + } + + return $val; + } + + /** + * Checks if a value exists in an array (case insensitive) + * + * @static + * @access public + * @param string $needle + * @param array $haystack + * @return boolean + */ + public static function inArrayCaseInsensitive($needle, $haystack) + { + if (!$haystack || !is_array($haystack)) { + return false; + } + $lcase = array(); + foreach ($haystack as $key => $val) { + $lcase[$key] = strtolower($val); + } + return in_array(strtolower($needle), $lcase); + } + + /** + * UTF-8 compatible version of basename() + * + * @static + * @access public + * @param string $file + * @return string + */ + public static function mbBasename($file) + { + $explode = explode('/', str_replace("\\", "/", $file)); + return end($explode); + } + + /** + * Checks whether the string is valid UTF8 + * @static + * @access public + * @param string $string + * @return boolean + */ + public static function isValidUTF8($string) + { + if (strlen($string) == 0) { + return true; + } + return (preg_match('/^./us', $string) == 1); + } + + /** + * Source: http://pl.php.net/imagecreate + * (optimized for speed and memory usage, but yet not very efficient) + * + * @static + * @access public + * @param string $filename + * @return resource + */ + public static function imageCreateFromBmp($filename) + { + //20 seconds seems to be a reasonable value to not kill a server and process images up to 1680x1050 + @set_time_limit(20); + + if (false === ($f1 = fopen($filename, "rb"))) { + return false; + } + + $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1, 14)); + if ($FILE['file_type'] != 19778) { + return false; + } + + $BMP = unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel'. + '/Vcompression/Vsize_bitmap/Vhoriz_resolution'. + '/Vvert_resolution/Vcolors_used/Vcolors_important', fread($f1, 40)); + + $BMP['colors'] = pow(2,$BMP['bits_per_pixel']); + + if ($BMP['size_bitmap'] == 0) { + $BMP['size_bitmap'] = $FILE['file_size'] - $FILE['bitmap_offset']; + } + + $BMP['bytes_per_pixel'] = $BMP['bits_per_pixel']/8; + $BMP['bytes_per_pixel2'] = ceil($BMP['bytes_per_pixel']); + $BMP['decal'] = ($BMP['width']*$BMP['bytes_per_pixel']/4); + $BMP['decal'] -= floor($BMP['width']*$BMP['bytes_per_pixel']/4); + $BMP['decal'] = 4-(4*$BMP['decal']); + + if ($BMP['decal'] == 4) { + $BMP['decal'] = 0; + } + + $PALETTE = array(); + if ($BMP['colors'] < 16777216) { + $PALETTE = unpack('V'.$BMP['colors'], fread($f1, $BMP['colors']*4)); + } + + //2048x1536px@24bit don't even try to process larger files as it will probably fail + if ($BMP['size_bitmap'] > 3 * 2048 * 1536) { + return false; + } + + $IMG = fread($f1, $BMP['size_bitmap']); + fclose($f1); + $VIDE = chr(0); + + $res = imagecreatetruecolor($BMP['width'],$BMP['height']); + $P = 0; + $Y = $BMP['height']-1; + + $line_length = $BMP['bytes_per_pixel']*$BMP['width']; + + if ($BMP['bits_per_pixel'] == 24) { + while ($Y >= 0) + { + $X=0; + $temp = unpack( "C*", substr($IMG, $P, $line_length)); + + while ($X < $BMP['width']) + { + $offset = $X*3; + imagesetpixel($res, $X++, $Y, ($temp[$offset+3] << 16) + ($temp[$offset+2] << 8) + $temp[$offset+1]); + } + $Y--; + $P += $line_length + $BMP['decal']; + } + } + elseif ($BMP['bits_per_pixel'] == 8) + { + while ($Y >= 0) + { + $X=0; + + $temp = unpack( "C*", substr($IMG, $P, $line_length)); + + while ($X < $BMP['width']) + { + imagesetpixel($res, $X++, $Y, $PALETTE[$temp[$X] +1]); + } + $Y--; + $P += $line_length + $BMP['decal']; + } + } + elseif ($BMP['bits_per_pixel'] == 4) + { + while ($Y >= 0) + { + $X=0; + $i = 1; + $low = true; + + $temp = unpack( "C*", substr($IMG, $P, $line_length)); + + while ($X < $BMP['width']) + { + if ($low) { + $index = $temp[$i] >> 4; + } + else { + $index = $temp[$i++] & 0x0F; + } + $low = !$low; + + imagesetpixel($res, $X++, $Y, $PALETTE[$index +1]); + } + $Y--; + $P += $line_length + $BMP['decal']; + } + } + elseif ($BMP['bits_per_pixel'] == 1) + { + $COLOR = unpack("n",$VIDE.substr($IMG,floor($P),1)); + if (($P*8)%8 == 0) $COLOR[1] = $COLOR[1] >>7; + elseif (($P*8)%8 == 1) $COLOR[1] = ($COLOR[1] & 0x40)>>6; + elseif (($P*8)%8 == 2) $COLOR[1] = ($COLOR[1] & 0x20)>>5; + elseif (($P*8)%8 == 3) $COLOR[1] = ($COLOR[1] & 0x10)>>4; + elseif (($P*8)%8 == 4) $COLOR[1] = ($COLOR[1] & 0x8)>>3; + elseif (($P*8)%8 == 5) $COLOR[1] = ($COLOR[1] & 0x4)>>2; + elseif (($P*8)%8 == 6) $COLOR[1] = ($COLOR[1] & 0x2)>>1; + elseif (($P*8)%8 == 7) $COLOR[1] = ($COLOR[1] & 0x1); + $COLOR[1] = $PALETTE[$COLOR[1]+1]; + } + else { + return false; + } + + return $res; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/Security.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/Security.php new file mode 100644 index 0000000..c1003ec --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/Security.php @@ -0,0 +1,75 @@ +stripQuotes($_GET); + } + if (!empty($_POST)) { + $this->stripQuotes($_POST); + } + if (!empty($_COOKIE)) { + $this->stripQuotes($_COOKIE); + } + if (!empty($_FILES)) { + while (list($k,$v) = each($_FILES)) { + if (isset($_FILES[$k]['name'])) { + $this->stripQuotes($_FILES[$k]['name']); + } + } + } + } + } + + /** + * Strip quotes from variable + * + * @access public + * @param mixed $var + * @param int $depth current depth + * @param int $howDeep maximum depth + */ + public function stripQuotes(&$var, $depth=0, $howDeep=5) + { + if (is_array($var)) { + if ($depth++<$howDeep) { + while (list($k,$v) = each($var)) { + $this->stripQuotes($var[$k], $depth, $howDeep); + } + } + } else { + $var = stripslashes($var); + } + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/XmlNode.php b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/XmlNode.php new file mode 100644 index 0000000..7a160a6 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/core/connector/php/php5/Utils/XmlNode.php @@ -0,0 +1,202 @@ +_name = $nodeName; + if (!is_null($nodeValue)) { + $this->_value = $nodeValue; + } + } + + function getChild($name) + { + foreach ($this->_childNodes as $i => $node) { + if ($node->_name == $name) { + return $this->_childNodes[$i]; + } + } + return null; + } + + /** + * Add attribute + * + * @param string $name + * @param string $value + * @access public + */ + public function addAttribute($name, $value) + { + $this->_attributes[$name] = $value; + } + + /** + * Get attribute value + * + * @param string $name + * @access public + */ + public function getAttribute($name) + { + return $this->_attributes[$name]; + } + + /** + * Set element value + * + * @param string $name + * @param string $value + * @access public + */ + public function setValue($value) + { + $this->_value = $value; + } + + /** + * Get element value + * + * @param string $name + * @param string $value + * @access public + */ + public function getValue() + { + return $this->_value; + } + + /** + * Adds new child at the end of the children + * + * @param Ckfinder_Connector_Utils_XmlNode $node + * @access public + */ + public function addChild(&$node) + { + $this->_childNodes[] =& $node; + } + + /** + * Checks whether the string is valid UTF8 + * @param string $string + */ + public function asUTF8($string) + { + if (CKFinder_Connector_Utils_Misc::isValidUTF8($string)) { + return $string; + } + + $ret = ""; + for ($i = 0; $i < strlen($string); $i++) { + $ret .= CKFinder_Connector_Utils_Misc::isValidUTF8($string[$i]) ? $string[$i] : "\xEF\xBF\xBD"; + } + + return $ret; + } + + /** + * Return a well-formed XML string based on Ckfinder_Connector_Utils_XmlNode element + * + * @return string + * @access public + */ + public function asXML() + { + $ret = "<" . $this->_name; + + //print Attributes + if (sizeof($this->_attributes)>0) { + foreach ($this->_attributes as $_name => $_value) { + $ret .= " " . $_name . '="' . htmlspecialchars($this->asUTF8($_value)) . '"'; + } + } + + //if there is nothing more todo, close empty tag and exit + if (is_null($this->_value) && !sizeof($this->_childNodes)) { + $ret .= " />"; + return $ret; + } + + //close opening tag + $ret .= ">"; + + //print value + if (!is_null($this->_value)) { + $ret .= htmlspecialchars($this->asUTF8($this->_value)); + } + + //print child nodes + if (sizeof($this->_childNodes)>0) { + foreach ($this->_childNodes as $_node) { + $ret .= $_node->asXml(); + } + } + + $ret .= "_name . ">"; + + return $ret; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/001.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/001.html new file mode 100644 index 0000000..37398cb --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/001.html @@ -0,0 +1,32 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Vítejte v CKFinder

      +

      + CKFinder je správce souborů který Vám pomůže procházet, + nahrávat a spravovat Vaše soubory umístěné na internetovém serveru — + přímo z Vašeho internetového prohlížeče, aniž byste museli cokoliv na Vašem + počítači instalovat.

      +

      + Díky svému použití v distribuovaném prostředí může být CKFinder popsán + jako software pro spolupráci který usnadňuje správu a sdílení souborů + umístěných na centrálním počítači (server).

      +

      + Ať už s CKFinder začínáte, nebo jste zkušení uživatelé, vyplatí se Vám udělat + si čas a projít si tuto dokumentaci, abyste porozuměli tomuto jednoduchému + ale přesto výkonnému nástroji.

      +

      + Právní omezení

      +

      + Prosím prohlédněte si "Právní omezení" + pro jisté důležité informace o autorských právech.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/002.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/002.html new file mode 100644 index 0000000..2ccc949 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/002.html @@ -0,0 +1,42 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Přehled rozhraní CKFinder

      +

      + Rozhraní CKFinder je navrženo tak, aby bylo pro koncového uživatele čisté, přehledné, a aby se ho + snadné naučit a používat. Většinu funkcí lze použít kliknutím myši a také použitím + kontextových menu.

      +

      + Pokud používáte průzkumníky souborů, které jsou zabudovány do většiny operačních systémů, + které jsou dostupné pro Vaše PC či laptop, rychle zjistíte, že používání online správce + souborů je také tak lehké a intuitivní.

      +

      + Následující snímek obrazovky je z rozhraní CKFinder:

      +

      + Rozhraní CKFinder 

      +
        +
      1. Panel složky – obsahuje "stromové zobrazení" + složek, které můžete procházet. Složky jsou používány k uspořádání a třídění Vašich + souborů.
      2. +
      3. Panel soubory – zobrazuje dostupné soubory + ve vybrané složce
      4. +
      5. Panel nástrojů – řada tlačítek, na které můžete + kliknout, abyste mohli rychle spustit určité funkce průzkumníka souborů.
      6. +
      7. Stavový řádek – část ve spodní části + rozhraní, která zobrazuje některé informace o vybraném souboru, celkový + počet souborů v složce, atd.
      8. +
      9. Kontextové menu – vyskakovací menu s příkazy + průzkumníka souborů, které spouštějí určité úkoly na objekt, který byl vybrán. Dostupné + možnosti v kontextovém menu se dynamicky mění v závislosti na objektu, který je + zvolen.
      10. +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/003.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/003.html new file mode 100644 index 0000000..298edd9 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/003.html @@ -0,0 +1,143 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Panel složek

      +

      + Panel složek obsahuje "stromové zobrazení" složek, které můžete procházet. + Složky jsou použity k uspořádání a třídění Vašich souborů.

      +

      + Panel složky CKFinder 

      +

      + Zobrazení složek display je nazváno "stromové zobrazení" protože hierarchie složek je zobrazena jako + větve stromu a podsložky jsou zobrazeny níže s odsazením vzhledem k jejich nadřazeným položkám. + Panel složek používá stejné grafické zastoupení, které můžete nalézt v + mnoha moderních operačních systémech.

      +

      + Základní operace

      +

      + Otevření (rozbalení) složky

      +

      + Abyste složku otevřeli a rozevřeli její podsložky, klikněte na ikonku plus + () před názvem složky. + Pokud ikona plus není přítomna, pak složka neobsahuje žádné podsložky.

      +

      + Rozbalená složka CKFinder 

      +

      + Viz část "Načítání na požadavek" níže, pokud se chcete dozvědět více o procesu + načítání v CKFinder.

      +

      + Zavření (sbalení) složky

      +

      + Abyste zavřeli složku a skryli (sbalili) její podsložku, klikněte na ikonku mínus + () před názvem složky.

      +

      + Rozbalená složka CKFinder s jejími podsložkami its 

      +

      + Vybrání složky

      +

      + Abyste vybrali složku a učinili z ní "současnou složku" v CKFinder, klikněte na její + název nebo ikonu. Vybraná složka bude zvýrazněna jinou barvou pozadí.

      +

      + Vybraná složka CKFinder 

      +

      + Pokročilé operace

      +

      + Pokročilé operace mohou být provedeny ve složce použitím jejího Kontextového + menu. V závislosti na okolnostech mohou být dostupné následující operace:

      +

      + Kontextové menu složky 

      +
        +
      • Nová podsložka (New Subfolder) – vytvoří novou podsložku v její nadřazené složce.
      • +
      • Přejmenovat (Rename) – změní název složky.
      • +
      • Kopírovat soubory z Košíku (Copy Files from Basket) – zkopíruje soubory, které byly umístěny v + Košíku do zvolené složky.
      • +
      • Přesunout soubory z Košíku (Move Files from Basket) – přesune soubory, které byly umístěny v + Košíku do zvolené složky.
      • +
      • Smazat (Delete) – natrvalo složku odstraní.
      • +
      +

      + Poznámka: Některé možnosti kontextového menu mohou být zakázány (a proto + jsou zašedlé), v závislosti na nastaveních CKFinder, které vyžaduje Váš správce systému.

      +

      + Vytváření složek

      +

      + Abyste vytvořili podřazenou složku uvnitř existující složky, zvolte možnost + Nová podsložka (New Subfolder) z kontextového menu nadřazené složky. + V dialogovém okně zadejte název nové složky, který bude zobrazen. Jakmile + nové složce dáte název a dialogové okno zavřete, bude složka vytvořena.

      +

      + Vytváření nové složky v CKFinder 

      +

      + Ne všechny znaky mohou být použity v názvech složek a souborů kvůli omezením + systémů, kde je CKFinder spuštěn. Mezi znaky, které nemohou být použity v názvech + složek a souborů jsou: \ / : + * ? " < + > a |.

      +

      + Přejmenování složek

      +

      + Pro přejmenování složky zvolte možnost Přejmenovat (Rename) z kontextového menu + nebo použijte klávesovou zkratku F2. Zadejte nový název složky v dialogovém okně, + které bude zobrazeno, což přepíše existující název. Jakmile zadáte nový název a dialogové okno + zavřete, složka bude přejmenována.

      +

      + Přejmenování složky v CKFinder 

      +

      + Jak již bylo řečeno výše, ne všechny znaky mohou být použity pro názvy složek a souborů kvůli omezením + systémů kde je CKFinder spuštěn. Mezi znaky, které nemohou být použity v názvech + složek a souborů jsou: \ / : + * ? " < + > a |.

      +

      + Upozornění: Když složku přejmenujete, odkazy či vložení médií + dostupné na jiných stránkách a odkazující na soubory či složky uvnitř přejmenované složky + budou poškozeny a proto nebudou dostupné. Z tohoto důvodu buďte při používání této funkce + opatrní.

      +

      + Kopírování a přesunování souborů z Košíku

      +

      + Košík je virtuální odkladné místo, které může + být nápomocné, pokud potřebujete provést dávkové operace se soubory. Operace kopírování a přesunování + jsou popsány v části "Košík" uživatelské příručky.

      +

      + Mazání složek

      +

      + Abyste složku smazali, včetně jejího obsahu, zvolte možnost Smazat (Delete) + z jejího kontextového menu nebo použijte klávesu Del. Bude zobrazena potvrzovací zpráva, + která zajistí, že tuto operaci opravdu chcete provést. Jakmile smazání potvrdíte, + složka bude odstraněna.

      +

      + Upozornění: Tuto operaci nelze vrátit zpět. Jakmile složku + a její obsah smažete, odstraněné soubory již nelze obnovit.

      +

      + Mazání složky v CKFinder 

      +

      + Upozornění: Když složku smažete, odkazy či vložení médií + dostupné na jiných stránkách a odkazující na soubory či složky uvnitř přejmenované složky + budou poškozeny a proto nebudou dostupné. Z tohoto důvodu buďte při používání této funkce + opatrní.

      +

      + Načítání na požadavek

      +

      + Nejdůležitější rozdíl mezi CKFinder a stromovými strukturami složek, které naleznete ve + stolních operačních systémech je ten, že v CKFinder jsou složky načítány na "požadavek". To znamená, + že aplikace nenačítá celou stromovou strukturu složky najednou, ale místo toho + načte malou část, když je složka rozbalována. Tato funkce je používána + ve většině pokročilých internetových aplikací jako CKFinder a umožňuje šetřit přenesená data a čas pro načítání.

      +

      + Pro označení, že jsou složky načítány může být zobrazen štítek Načítání... (Loading..) + při rozbalení složky:

      +

      + Načítání složek v CKFinder 

      +

      + Štítek automaticky zmizí, když jsou všechny požadované složky načteny.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/004.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/004.html new file mode 100644 index 0000000..8a973d4 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/004.html @@ -0,0 +1,243 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Panel souborů

      +

      + Panel souborů zobrazuje všechny soubory dostupné ve vybrané složce.

      +

      + Panel souborů CKFinder 

      +

      + Různá zobrazení

      +

      + Panel souborů může soubory zobrazovat ve dvou různých formátech zobrazení, + v závislosti na nastavení CKFinder (viz "Nastavení"). + Následující je porovnání zobrazení Náhled a Seznam + ve stejné složce.

      +

      + Při nastavení CKFinder pro použití zobrazení Náhled (Thumbnails) budou soubory + zobrazeny jako náhledy (miniatury nebo ikony), s nebo bez dalších + informací jako název souboru, velikost, nebo datum (záleží na Vaších nastaveních).

      +

      + Panel souborů CKFinder v Náhledovém zobrazení 

      +

      + Když nastavíte CKFinder aby použil zobrazení Seznam (List), soubory budou + zobrazeny v seznamu, s nebo bez dalších + informací jako název souboru, velikost, nebo datum (záleží na Vaších nastaveních).

      +

      + Panel souborů CKFinder v Seznamovém zobrazení 

      +

      + Základní operace

      +

      + Aktivování (vybrání) souboru myší

      +

      + Abyste soubor aktivovali a udělali z něj "současný soubor" v CKFinder, klikněte na název + souboru nebo na jeho náhled. Aby bylo snazší soubor vybrat, při najetí myší + nad soubor bude jeho pozadí zvýrazněno. Jakmile je soubor vybrán bude + trvale zvýrazněn jinou barvou pozadí.

      +

      + Obrázky níže zobrazují různé stavy souboru, jak je zobrazen ve složce: nevybrán, najetí myší + a aktivován (vybrán).

      + + + + + + +
      + Nevybraný soubor v CKFinder + Najetí myši na soubor v CKFinder + Vybraný soubor v CKFinder
      +

       

      +

      + Abyste soubor deaktivovali, klikněte na jiný (čímž ho aktivujete) nebo klikněte na jakékoliv prázdné místo uvnitř + Panelu souborů.

      +

      + Kopírování souboru

      +

      Abyste zkopírovali soubor do jiné složky, vyberte ho a přetáhněte na cílovou složku v + Panelu složek. Když ho přesunete na název složky, zvolte možnost + Soubor zkopírovat sem (Copy File Here) z kontextového menu.

      +

      + Kopírování souborů v CKFinder 

      +

      + Soubor bude duplikován a jeho kopie bude umístěna do cílové složky. + Zdrojová složka zůstane nedotčena.

      +

      + Soubor zkopírován v CKFinder 

      +

      + Poznámka: Pokud soubor se stejným názvem již v cílové složce existuje, + bude Vám nabídnut výběr mezi přepisem nebo automatickým + přejmenováním zkopírovaného souboru (toto je výchozí možnost).

      +

      + Chybová zpráva pro soubor, který již existuje v CKFinder 

      +

      + Přesunutí souboru

      +

      Abyste soubor přesunuli do jiné složky, zvolte ho a přetáhněte do cílové složky + v Panelu složek. Když ho přetáhnete na název složky, zvolte možnost + Soubor přesunout sem (Move File Here) z kontextového menu.

      +

      + Přesunutí souboru v CKFinder 

      +

      + Soubor bude ze zdrojové složky odstraněn a vložen do cílové.

      +

      + Soubor přesunut v CKFinder 

      +

      + Pokročilé operace

      +

      + Pokročilé operace mohou být provedeny na soubor použitím jeho Kontextového + menu. V závislosti na okolnostech mohou být dostupné následující možnosti:

      +

      + Kontextové menu souboru v CKFinder 

      +
        +
      • Vybrat (Select) – vybere soubor.
      • +
      • Zobrazit (View) – zobrazí soubor v plné velikosti v nové kartě či okně prohlížeče.
      • +
      • Uložit jako (Download) – stáhne soubor ze serveru do Vašeho počítače.
      • +
      • Změnit velikost (Resize) – umožňuje Vám změnit velikost souboru a/nebo vytvořit nový náhled.
      • +
      • Přejmenovat (Rename) – změní název souboru.
      • +
      • Smazat (Delete) – natrvalo odstraní soubor.
      • +
      +

      + Poznámka: Některé možnosti kontextového menu mohou být zakázány (a proto + jsou zašedlé), v závislosti na nastaveních CKFinder, které vyžaduje Váš správce systému.

      +

      + Výběr souboru

      +

      + Abyste vybrali soubor pomocí kontextového menu, zvolte možnost Vybrat (Select). + Jinak můžete toto také provést dvojitým kliknutím na soubor pomocí Vaší myši.

      +

      + V závislosti na prostředí, kde je CKFinder použit, operace výběru může, například, + poslat URL souboru do jiné aplikace nebo vložit obrázek přímo do článku vytvořeném + ve Vašem redakčním systému.

      +

      + Zobrazení (náhled) souboru

      +

      + Abyste si mohli soubor prohlédnout v prohlížeči, zvolte možnost Zobrazit (View) z + jeho kontextového menu. Ne všechny druhy souborů mohou být v prohlížečích zobrazeny, ale tato funkce + je užitečná pro obrázky, text a soubory PDF. V ostatních případech se Vás prohlížeč zeptá + na vhodnou aplikaci, pomocí které soubor otevřít.

      +

      + V závislosti na nastavení Vašeho prohlížeče a operačního systému, bude soubor zobrazen v + nové kartě nebo okně prohlížeče.

      +

      + Stažení souboru

      +

      + Abyste mohli soubor stáhnout, zvolte možnost Uložit jako (Download) z jeho kontextového + menu. Prohlížeč se Vás zeptá na umístění staženého souboru ve Vašem počítači. + V závislosti na nastavení Vašeho prohlížeče a operačního systému může být soubor také otevřen + hned po stažení pomocí vhodné aplikace ve Vašem operačním + systému.

      +

      + Změna velikosti souboru (obrázku)

      +

      + Abyste změnili velikost obrázku nebo jeho náhledu, zvolte možnost Změnit velikost (Resize) + z jeho kontextového menu. Jakmile zadáte nové rozměry obrázku nebo zvolíte velikost náhledu, + zavřete dialogové okno k použití změn.

      +

      + Změna velikosti obrázku v CKFinder 

      +

      Pokud je obrázek příliš velký, můžete změnit jeho rozměry zadáním nových hodnot do polí + Šířka (Width) a Výška (Height). Standardně je poměr obrázku uzamčen, + což můžete vidět díky tlačítku Poměr velikosti obrázku je uzamčen v CKFinder + (Uzamknout poměr). To znamená, že když změníte jednu z hodnot velikosti (šířku + či výšku), druhá bude automaticky upravena.

      +

      Pokud chcete volně upravit oba rozměry, klikněte na tlačítko Uzamknout poměr, abyste + poměr odemknuli. Tlačítko se změní na + Poměr stran obrázku odemčen v CKFinder + (Odemčeno) a úprava jednoho rozměru nezpůsobí automatickou + změnu druhého. Pro znovu uzamčení poměru, klikněte ještě jednou na tlačítko Odemčení.

      +

      Obrázek můžete snadno vrátit do původního rozměru stisknutím tlačítka + Reset poměru velikosti obrázku v CKFinder + (Původní velikost). Toto resetuje velikost obrázku; původní šířka a výška + budou nyní zobrazeny v odpovídajících rámečcích.

      +

      + Pokud změníte velikost obrázku, můžete se rozhodnout ho uložit pod stejným názvem, čímž existující + přepíšete. Nezapomeňte prosím, že tuto operaci nelze vrátit a jakmile soubor s jeho změněnou velikostí + uložíte, jíž ho nebudete moci vrátit do původní velikosti. Abyste původní obrázek + přepsali, nechte zaškrtnuté políčko Vytvořit nový obrázek (Create new image).

      +

      + Přepis obrázku se změněnou velikostí v CKFinder 

      +

      + Můžete se také rozhodnout obrázek uložit jako nový soubor a zanechat původní tak jak je. Pokud + vyberete políčko Vytvořit nový obrázek (Create new image), budete moci dát změněnému souboru + nový název. Standardně Vám CKFinder nabídne obrázek uložit pod názvem, odvozeným od původního souboru + a rozměry nového souboru (například: Sun1_100x100.jpg když původní soubor měl název + Sun1.jpg a velikost souboru byla změněna na 100 pixelů na šířku i výšku).

      +

      + Vytvoření nového obrázku se změněnou velikostí v CKFinder 

      +

      + Když jste s Vašimi změnami spokojeni, klikněte na tlačítko OK pro zavření + dialogového okna. Po úspěšné změně velikosti bude zobrazena potvrzovací zpráva.

      +

      + Proběhla změna velikosti souboru v CKFinder 

      +

      + Pokud jste změněný obrázek uložili do nového souboru, uvidíte oba soubory uvnitř složky.

      +

      + Původní a změněný soubor v CKFinder 

      +

      + Poznámka: Velikost původního souboru může omezit dostupné možnosti pro + funkci Změnit velikost. Velikost změněného obrázku nemůže překročit původní rozměry. +

      +

      + Vytváření náhledů

      +

      + Funkce Změnit velikost (Resize) může být také použita pro vytváření kopí obrázku se změněnou velkostí + (náhledů), které můžete použít v článcích Na Vaší internetové stránce nebo v příspěvcích do blogu. Díky + funkci pro vytváření náhledů může správce stránky nastavit možnosti předurčené velikosti náhledu, + která může být použita uživateli CKFinder. Toto Vám ušetří čas ručním zadáváním + změněných hodnot šířky a výšky pro každý obrázek a tímto bude každá velkost náhledu + na Vašich stránkách stejná.

      +

      + Abyste mohli použít jednu z přednastavených velikostí náhledu, zvolte možnost Změnit velikost (Resize) + z kontextového menu. V části Vytvořit nový náhled (Create a new thumbnail) dialogového okna Změnit velikost (Resize) + vyberte zaškrtávací políčka odpovídající požadované velikosti. Po úspěšné změně velikosti bude zobrazena potvrzovací zpráva. + Kopie obrázku se změněnou velikostí budou vytvořeny ve stejné složce a nové soubory budou pojmenovány + podle možnosti nastavení velikost náhledu, kterou zvolíte (s příponami _large, + _medium a _small, které budou přidány k původnímu názvu souboru).

      +

      + Náhledy vytvořené v CKFinder 

      +

      + Poznámka: Pokud je obrázek menší, než některá z možností náhledů + (viz příklad nahoře), ty, které jsou nedostupné, budou zašedlé.

      +

      + Přejmenování souboru

      +

      + Abyste přejmenovali soubor, zvolte možnost Přejmenovat (Rename) z jeho kontextového menu + nebo použijte klávesovou zkratku F2. Do dialogového okna, které se zobrazí, zadejte nový + název souboru, čímž přepíšete existující. Jakmile zadáte nový název souboru a zavřete dialogové okno, + soubor bude přejmenován.

      +

      + Přejmenování souboru v CKFinder 

      +

      + Ne všechny znaky mohou být použity v názvech složek a souborů kvůli omezením + systémů, kde je CKFinder spuštěn. Mezi znaky, které nemohou být použity v názvech + složek a souborů jsou: \ / : * + ? " < > a |.

      +

      + Upozornění: Když složku přejmenujete, odkazy či vložení médií + dostupné na jiných stránkách a odkazující na soubor + budou poškozeny a proto nebudou dostupné. Z tohoto důvodu buďte při používání této funkce + opatrní.

      +

      + Mazání souboru

      +

      + Abyste soubor smazali, zvolte možnost Smazat (Delete) + z jeho kontextového menu nebo použijte klávesu Del. Bude zobrazena potvrzovací zpráva, + která zajistí, že tuto operaci opravdu chcete provést. Jakmile smazání potvrdíte, + soubor bude odstraněn.

      +

      + Upozornění: Tuto operaci nelze vrátit zpět. Jakmile složku + a její obsah smažete, odstraněné soubory již nelze obnovit.

      +

      + Mazání souboru v CKFinder 

      +

      + Upozornění: Když soubor smažete, odkazy či vložení médií + dostupné na jiných stránkách a odkazující na soubor budou poškozeny a + proto nebudou dostupné. Z tohoto důvodu buďte při používání této funkce opatrní.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/005.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/005.html new file mode 100644 index 0000000..108b508 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/005.html @@ -0,0 +1,42 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Panel nástrojů

      +

      + Panel nástrojů je vyhrazená část na v horní části rozhraní CKFinder. Obsahuje + řadu tlačítek menu, na které můžete kliknout pro získání přístupu k různým funkcím průzkumníka souborů.

      +

      + Takto vypadá standardní Panel nástrojů CKFinder:

      +

      + Panel nástrojů CKFinder 

      +

      Použití Panelu nástrojů

      +

      Abyste provedli operaci, která je tlačítku přidělená, klikněte jednou na tlačítko. Ve většině případů + buď okamžitě provede některou přednastavenou činnost, nebo otevře rozbalovací panel s dalšími možnostmi nastavení + funkce.

      +

      Nezapomeňte, že Panel nástrojů můžete také používat pomocí klávesnice. Abyste vstoupili do Panelu nástrojů, použijte + klávesovou zkratku Alt+F10. Pro přesun na další nebo předchozí tlačítko, použijte klávesy Šipka doprava + a Šipka doleva v tomto pořadí. Pro aktivování zvoleného tlačítka Panelu nástrojů, stiskněte Enter + nebo Mezerník.

      +

      + Tlačítka Panelu nástrojů

      +

      + Následující je seznam dostupných tlačítek ve standardním Panelu nástrojů:

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/006.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/006.html new file mode 100644 index 0000000..0cda9f0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/006.html @@ -0,0 +1,125 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Tlačítko Nahrát

      +

      + Tlačítko Nahrát (Upload), které je dostupné v CKFinder na + Panelu nástrojů otevře + Panel Nahrávání, který můžete použít pro přidání nových souborů do + současné složky.

      +

      Obrázek níže představuje standardní Panel nahrávání v průzkumníku souborů, + který je rozbalen při kliknutí na tlačítko panelu nástrojů.

      +

      + Panel nahrávání Flash v CKFinder 

      +

      + Abyste zavřeli (sbalili) Panel nahrávání, stiskněte + tlačítko Zrušit (Cancel) (pokud jste ještě nespustili proces nahrávání) + nebo tlačítko Zavřít (Close). Můžete také kliknout znovu na tlačítko Nahrát (Upload).

      +

      + Poznámka: Nahrávání je technický termín, který znamená + činnost posílání souborů z Vašeho místního počítače do + centrálního (také znám jako server).

      +

      + Verze panelu nahrávání

      +

      Panel nahrávání CKFinder existuje ve dvou verzích, v závislosti na Vašem + prostředí. Standardně je verze pro více nahrávání (která Vám umožní nahrát více + souborů na server najednou) použita pro všechny prostředí, která podporují + Adobe Flash. Pokud ale Váš místní systém Flash nepodporuje, budete stále + mít možnost nahrát jednotlivé soubory v oddělených operacích díky + záložní verzi.

      +

      Obrázek výše představuje výchozí Panel nahrávání, který má umožněno + nahrávat více souborů najednou. Pro všechny systémy, které Flash nepodporují (včetně + některých mobilních prohlížečů) bude použit následující formát Panelu nahrávání.

      +

      + Panel nahrávání jednoho souboru v CKFinder 

      +

      + Nahrávání více souborů

      +

      + Standardně Vám CKFinder umožní nahrát několik souborů najednou. + Abyste odeslali soubory na server, postupujte podle kroků popsaných níže.

      +

      Krok 1: Klikněte na tlačítko Nahrát (Upload) na panelu nástrojů pro otevření + Panelu nahrávání.

      +

      Krok 2: Když je Panel nahrávání rozbalen, klikněte na + tlačítko Přidat soubory (Add Files). Otevře se dialogové okno výběru souborů + Vašeho operačního systému, které Vám umožní vybrat místní soubor k + nahrání na server.

      +

      Poznámka: Můžete vybrat tolik souborů, kolik chcete tím, + že je všechny najednou vyberte v dialogovém okně.

      +

      Krok 3: Místní soubor(y) bude nyní přidán do fronty nahrávání. + Pokud chcete přidat další soubory do tohoto balíčku pro nahrávání, klikněte + znovu na tlačítko Přidat soubory (Add Files) a zopakujte kroky popsané výše.

      +

      + Fronta nahrávání v CKFinder 

      +

      Krok 4: Pokud si rozmyslíte, které soubory na server nahrát, můžete + vždycky jednotlivé soubory odstranit z fronty nahrávání kliknutím na tlačítko + Odstranit (Remove) vedle souboru, nebo se rozhodnete zrušit celý proces + nahrávání zvolením tlačítka Zrušit (Cancel) na Panelu nahrávání.

      +

      Krok 5: Pokud jste hotovi s procesem výběru souborů, můžete kliknout + na tlačítko Nahrát (Upload) pro spuštění nahrávání. Postup celého procesu + a také jednotlivých souborů můžete pozorovat na obrazovce.

      +

      + Postup nahrávání mnoha souborů 

      +

      Krok 6: Počkejte na ukončení nahrávání. Jakmile bude dokončeno, obsah + složky bude obnoven a nahraný soubor bude vybrán v + Panelu souborů.

      +

      + Nahrávání jednoho souboru

      +

      Když Adobe Flash není na Vašem systému dostupný, nahrávání CKFinder bude plně funkční, + bude ale omezeno na jeden soubor najednou. Abyste odeslali soubory na + server, postupujte podle kroků popsaných níže.

      +

      Krok 1: Klikněte na tlačítko Nahrát (Upload) na panelu nástrojů pro otevření + Panelu nahrávání.

      +

      Krok 2: Když je Panel nahrávání rozbalen, klikněte na + tlačítko Přidat soubory (Browse). Otevře se dialogové okno výběru souborů + Vašeho operačního systému, které Vám umožní vybrat místní soubor k + nahrání na server.

      +

      Poznámka: Název tlačítka se může v různých prohlížečích lišit.

      +

      Krok 3: Místní soubor bude nyní přidán. Můžete nahrávat pouze jeden soubor + najednou.

      +

      Krok 4: Pokud jste hotovi s procesem výběru souboru, můžete kliknout + na tlačítko Nahrát zvolený soubor (Upload Selected File) pro spuštění nahrávání. Postup procesu + nahrávání souboru můžete pozorovat na obrazovce.

      +

      + Nahrávání jednoho souboru v CKFinder 

      +

      Krok 5: Počkejte na ukončení nahrávání. Jakmile bude dokončeno, + Panel nahrávání bude uzavřen, obsah složky bude obnoven a nahraný soubor bude vybrán v + Panelu souborů.

      +

      + Chyby při nahrávání

      +

      + Při nahrávání souborů se mohou objevit následující chyby.

      +

      + Soubor se stejným názvem je již dostupný, nahraný soubor byl přejmenován na + "název souboru(1).příp"

      +

      + Tato zpráva naznačuje, že název nahrávaného souboru je již používáním jiným + souborem ve stejné složce. Aby nedošlo ke konfliktu, bylo k původnímu názvu + připojeno pořadové číslo "(1)".

      +

      + Neplatný soubor

      +

      + Soubor, který jste se pokusili nahrát, nebyl přijat. +

      +

      + Nejběžnější příčina této zprávy je, že CKFinder byl nastaven, aby nepřijímal + druh souboru, který se snažíte nahrát, na základě jeho přípony. Toto + je bezpečnostní omezení. Je také možné, že velikost souboru je pro Váš systém + příliš velká. Pokud tomu tak je, server musí být nastaven pro přijetí + větších souborů. +

      +

      Nahrávání zrušeno z bezpečnostních důvodů. Soubor obsahuje data podobná HTML.

      +

      Nahrávaný soubor obsahuje HTML kód. Z bezpečnostních důvodů pouze soubory s vybranou příponou + mohou obsahovat kód HTML.

      +

      + Prosím kontaktujte Vašeho správce systému pro získání více informací ohledně + přijímaných typů souborů a jejich dovolených velikostí.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/007.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/007.html new file mode 100644 index 0000000..800cb1b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/007.html @@ -0,0 +1,30 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Tlačítko Znovu načíst

      +

      Když pracujete ve sdíleném prostředí, které spravuje CKFinder, kde desítky či dokonce stovky + uživatelů pracuje na stejných souborech ve stejnou dobu, může se stát, že + ostatní přidají změny souborů či složek, s kterými pracujete, + nebo si je právě prohlížíte.

      +

      Tady se může hodit možnost Znovu načíst (Refresh). Tato funkce + Vám umožňuje znovu načíst obsahy složky a vidět její nejnovější stav. Kdykoliv + potřebujete vidět aktualizovaný seznam souborů, klikněte na tlačítko Znovu načíst (Refresh) + v Panelu nástrojů CKFinder.

      +

      + Tlačítko Znovu načíst v Panelu nástrojů CKFinder 

      +

      + Tato funkce je zvláště užitečná, pokud CKFinder používáte jako software pro + spolupráci, sdílení souborů a složek s přáteli, rodinou, kolegy, nebo jakoukoli jinou + skupinou uživatelů. Abyste zajistili, že vždycky uvidíte tu nejaktuálnější verzi + obsahu v CKFinder, budete chtít občas znovu načíst seznam souborů pro + jeho aktualizaci.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/008.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/008.html new file mode 100644 index 0000000..ffe2a27 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/008.html @@ -0,0 +1,87 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Tlačítko Nastavení

      +

      + Tlačítko Nastavení (Settings), které je dostupné v + Panelu nástrojů CKFinder otevře + Panel nastavení, kde si můžete CKFinder nastavit a přizpůsobit.

      +

      Obrázek níže představuje Panel nastavení, + který je rozbalen při kliknutí na tlačítko panelu nástrojů.

      +

      + Panel nastavení CKFinder 

      +

      + Všechna nastavení jsou automaticky uložena pomocí "cookies" v internetovém prohlížeči. + "Cookies" jsou malé soubory, které ukládají soukromé informace o nastavení + pro určité stránky na Vašem počítači.

      +

      + Abyste zavřeli (sbalili) Panel nástrojů, stiskněte tlačítko + Zavřít (Close) nebo znovu klikněte na tlačítko Nastavení (Settings).

      +

      + Možnosti nastavení CKFinder

      +

      + Všechny možnosti nastavení se vztahují k Panelu složek + a kontrolují způsob, jakým jsou soubory v CKFinder zobrazeny. + Panel souborů okamžitě zareaguje na změny v + Panelu nastavení.

      +

      + Zobrazení (View)

      +

      + Nastaví režim zobrazení v Panelu souborů:

      +
        +
      • Náhled (Thumbnails) – tento režim zobrazí každý soubor v + rámečku. Pro obrázky bude zobrazen uvnitř rámečku zobrazen + malý náhled. Pro ostatní soubory bude místo toho dostupná + ikona.
      • +
      • Seznam (List) – tento režim zobrazí všechny soubory v seznamu. + V tomto režimu nejsou dostupné žádné náhledy.
      • +
      +

      + Zobrazit (Display)

      +

      + Nastaví množství informací, které jsou dostupné v Panelu souborů. + Následující možnosti mohou být zapnuty či vypnuty:

      +
        +
      • Název (File Name) – zobrazí název souboru spolu s jeho příponou.
      • +
      • Datum (Date) – zobrazí poslední datum změny souboru.
      • +
      • Velikost (File Size) – zobrazí velikost souboru v kilobajtech.
      • +
      +

      Pokud používáte režim zobrazení Náhled, můžete odškrtnout všechny + možnosti. V režimu Seznam bude název souboru vždycky zobrazen.

      +

      Obrázek níže představuje různé možnosti zobrazení tak, jak jsou zobrazeny v režimu + Náhled.

      + + + + + + + +
      + Soubor zobrazený v režimu Náhled bez názvu souboru, velikosti a data změny + Soubor zobrazený v režimu Náhled pouze s názvem souboru + Soubor zobrazený v režimu Náhled s názvem souboru a datem změny + Soubor zobrazený v režimu Náhled s názvm souboru, velikostí a datem změny
      +

      + Seřazení (Sorting)

      +

      + Nastaví pořadí, v kterém budou soubory zobrazeny. Jsou dostupné následující možnosti:

      +
        +
      • Podle názvu (by File Name) – seřadí soubory abecedně podle jejich názvu.
      • +
      • Podle data (by Data) – seřadí soubory podle posledního data změny, + nejnovější je zobrazen první.
      • +
      • Podle velikosti (by Size) – seřadí soubory podle jejich velikosti, největší je zobrazen + první.
      • +
      • Podle přípony (by Extension) – seřadí soubory nejdříve abecedně podle jejich + přípony a pak abecedně podle jejich názvů.
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/009.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/009.html new file mode 100644 index 0000000..dcd2e52 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/009.html @@ -0,0 +1,20 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Tlačítko Nápověda

      +

      + Tlačítko Nápověda (Help) je dostupné v + Panelu nástrojů ve všech zobrazení CKFinder. Když na něj kliknete, + bud otevřena "Uživatelská příručka" v nové kartě nebo okně prohlížeče.

      +

      + Tlačítko nápověda v panelu nástrojů CKFinder 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/010.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/010.html new file mode 100644 index 0000000..e5830dc --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/010.html @@ -0,0 +1,34 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Lišta stavu

      +

      + Lišta stavu (Status Bar) je umístěna v dolní části rozhraní CKFinder, + která zobrazuje informace o zvoleném souboru, celkový počet + souborů ve složce, atd.

      +

      + Pokud je v CKFinder vybrán soubor, Lišta stavu zobrazí + podrobné informace o tomto souboru, včetně jeho názvu, velikosti a + data jeho poslední změny. Například:

      +

      + Lišta stavu CKFinder s vybraným souborem 

      +

      + Pokud nejsou vybrány žádné soubory, bude místo toho v Liště stavu zobrazen + celkový počet souborů v současné složce. Například:

      +

      + Lišta stavu CKFinder bez vybraného souboru 

      +

      + Pokud je složka prázdná, Lišta stavu zobrazí odpovídající + zprávu. Například:

      +

      + Lišta stavu CKFinder v prázdné složce 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/011.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/011.html new file mode 100644 index 0000000..aa1ab36 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/011.html @@ -0,0 +1,26 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Právní omezení

      +

      + CKFinder, včetně této dokumentace, patří © 2007-2013 CKSource - Frederico Knabben. Všechna práva + vyhrazena. Ujistěte se, prosím, že jste přečetli a pochopili Licenci + CKFinder.

      +

      + Ikony použité v panelu nástrojů a kontextových menu byly navrhnuty Markem Jamesem. + Pro další informace si prosím prohlédněte následující adresu:
      + http://www.famfamfam.com/lab/icons/silk/

      +

      + Obchodní značky

      +

      + CKFinder, logo CKFinder, CKSource, CKEditor a FCKeditor jsou obchodní značky CKSource - Frederico Knabben.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/012.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/012.html new file mode 100644 index 0000000..ae8b2db --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/012.html @@ -0,0 +1,61 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Kontextové menu

      +

      + Kontextové menu je vyskakovací menu, které je zobrazeno kdykoliv + kliknete pravým tlačítkem myši na soubor nebo složku uvnitř rozhraní CKFinder, + použijte klávesu Menu/Application na Vaší klávesnici, nebo + klávesovou zkratku (Ctrl+)Shift+F10. Dává Vám přístup do operací + průzkumníka souborů, které jsou dostupné pro daný typ objektu.

      +

      Kontextové menu může být také otevřeno kliknutím na ikonu šipky dolů + (), + která je dostupná v některých prostředích nebo v prohlížečích mobilních telefonů vedle názvu + zvolené složky nebo v rámečcích souboru, tak jak je zobrazeno na obrázku níže.

      +

      + Kontextové menu CKFinder s pomocnými šipkami 

      +

      Každé kontextové menu se stává z řady možností (příkazů), které mohou být + zvoleny, aby byla provedena určitá operace, které jsou jim přiděleny.

      +

      + Poznámka: Některé možnosti kontextového menu mohou být zakázány (a + proto jsou zašedlé), v závislosti na nastaveních CKFinder, které vyžaduje Váš správce systému.

      +

      + Použití Kontextového menu

      +

      + Abyste provedli operaci uvedenou v kontextovém menu, klikněte na ni + levým tlačítkem myši. Kontextovým menu se můžete také pohybovat pomocí + kláves Šipka nahoru a dolů nebo kombinacemi Shift+Tab a + Tab. Jakmile je možnost vybrána, můžete jí zvolit klávesou + Mezerník nebo Enter. Pokud je možnost zašedlá, + není dostupná, protože nejsou splněny určité podmínky (např. musíte mít systémová + oprávnění pro provedení jistých změn souboru nebo složky).

      +

      + Dostupná menu

      +

      + Menu je řízeno podle kontextu, což znamená, že v něm zobrazené možnosti + závisí na objektu, který vyberete. Následující jsou menu, na které můžete narazit + při práci se standardní instalací CKFinder.

      +

      + Kontextové menu složky

      +

      + Je zobrazeno při kliknutí na složku v Panelu složek + pravým tlačítkem myši (nebo použitím klávesových zkratek, které jsou popsány výše):

      +

      + Kontextové menu složky CKFinder 

      +

      + Kontextové menu souboru

      +

      + Je zobrazeno při kliknutí na soubor v Panelu souboru + pravým tlačítkem myši (nebo použitím klávesových zkratek, které jsou popsány výše):

      +

      + Kontextové menu souboru CKFinder 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/013.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/013.html new file mode 100644 index 0000000..efc9d79 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/013.html @@ -0,0 +1,36 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Kompabilita a systémové požadavky

      +

      + CKFinder je internetová aplikace. To znamená, že je určena pro spuštění + uvnitř internetových prohlížečů, což usnadňuje zavedení a používání na každém + počítači.

      +

      + V současnosti jsou pro spuštění CKFinder potřeba tyto prohlížeče:

      +
        +
      • Internet Explorer 6.0+
      • +
      • Firefox 3.0+
      • +
      • Safari
      • +
      • Google Chrome
      • +
      • Opera
      • +
      +

      + Některé funkce závisejí na nastavení Vašeho prohlížeče. CKFinder by měl fungovat ve všech + prohlížečích uvedených výše při výchozím nastavení. Pokud máte problémy + s Kontextovým menu nebo Vaše + Nastavení nejsou ukládána, ujistěte se, že Váš prohlížeč + je nastaven aby "umožnit skriptům nahrazovat nabídky" ("umožnit skriptům + přijímat kliknutí pravou myší") a že máte "povolenou podporu cookies".

      +

      + Máte-li pochybnosti, kontaktujte Vašeho správce systému.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/014.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/014.html new file mode 100644 index 0000000..b144b92 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/014.html @@ -0,0 +1,102 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Košík

      +

      + Složka Košík, která je dostupná v + Panelu složek otevře + Panel Košíku.

      +

      + Košík je virtuální a dočasné úložiště, které může být použito + k provádění hromadných operací se soubory v CKFinder. Je to + virtuální úložiště, protože soubory, které jsou umístěny do + Košíku nejsou fyzicky přesunuty z jejich nadřazených složek. +

      +

      Obrázek níže představuje Panel Košíku + po kliknutí na složku Košík (Basket) v + Panelu složek.

      +

      + Složka Košík v CKFinder 

      +

      + Poznámka: Složka Košík je soukromá + v tom smyslu, že není sdílena s ostatními uživateli + a je svázána s relací Vašeho prohlížeče.

      +

      + Přidání souborů do Košíku

      +

      + Na začátku každé relace CKFinder je Košík prázdný. + Bude zobrazena zpráva vyzývající Vás k přetáhnutí souborů do Košíku. + Abyste toto provedli, přejděte do složky, která obsahuje soubory, + které chcete použít, přetáhněte je do složky Košík v + Panelu složek.

      +

      + Přetáhnutí souboru do Košíku v CKFinder 

      +

      Soubor by se nyní měl objevit ve složce Košík.

      +

      + Kontextové menu souboru

      +

      + Když je soubor umístěn do Košíku, jeho kontextové menu se změní, + aby zahrnovalo pouze ty operace, které jsou dostupné v této zvláštní složce.

      +

      + Kontextové menu otevřené v Košíku 

      +

      + Odstraňování souborů z Košíku

      +

      + Existují dva způsoby jak soubor odstranit z Košíku. Za prvé + můžete odstranit jednotlivé soubory zvolením možnosti Odstranit z Košíku (Remove from Basket) + z kontextového menu souboru. Když zvolíte možnost odstranění z kontextového menu, + bude zobrazena potvrzovací zpráva.

      +

      + Odstranění souboru z Košíku v CKFinder 

      +

      Můžete také odstranit všechny soubory najednou kliknutím na tlačítko Vyčistit Košík (Clear Basket) v + panelu nástrojů. Když toto provedete, budete vyzváni k potvrzení, zdali opravdu zamýšlíte odstranit + veškerý obsah Košíku.

      +

      + Odstranění všech souborů z Košíku v CKFinder 

      +

      + Poznámka: Odstranění souboru z Košíku ho + nesmaže ze souborového systému. Stále bude dostupný v nadřazené složce.

      +

      + Zobrazení nadřazené složky souboru

      +

      + Jak je zmíněno výše, Košík je virtuální složka, která obsahuje soubory, + které jsou fyzicky umístěny v jiných složkách souborového systému. Pokud si chcete prohlédnout zdrojovou + složku souboru, zvolte možnost Otevřít nadřazenou složku (Open Parent Folder) z kontextového menu + souboru. CKFinder zobrazí složku, v které se soubor nachází.

      +

      + Kopírování souboru z Košíku

      +

      + Jakmile pohodlně umístíte některé soubory Košíku, budete je moci + zkopírovat do jiné (fyzické) složky. Abyste tohoto dosáhli, zvolte + cílovou složku v Panelu složek a zvolte + možnost Kopírovat soubory z Košíku (Copy Files from Basket) z jejího kontextového menu.

      +

      + Bude zobrazena potvrzující zpráva vypisující soubory, které byly zkopírovány do cílové + složky.

      +

      + Kopírování souboru z Košíku v CKFinder 

      +

      + Soubory budou zkopírovány a jejich kopie umístěny do cílové složky. Cílová + složka zůstane nedotčena.

      +

      Přesunování souborů z Košíku

      +

      + Košík je také velmi užitečný, pokud chcete přesunovat soubory mezi složkami. + Jakmile umístíte nějaké soubory v Košíku, vyberte cílovou složku v + Panelu složek a zvolte možnost Přesunout soubory z Košíku (Move Files from Basket) + z jejího kontextového menu.

      +

      + Bude zobrazena potvrzující zpráva vypisující soubory, které byly přesunuty do cílové složky.

      +

      + Přesunování souborů z košíku v CKFinder 

      +

      + Soubory budou odstraněny z cílové složky a vloženy do cílové.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/015.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/015.html new file mode 100644 index 0000000..921351d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/015.html @@ -0,0 +1,47 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + Klávesové zkratky

      +

      + Mnoho funkcí v CKFinder má své klávesové zkratky. To je jeden + z důvodů, proč práce s průzkumníkem souborů je jak jednoduchá, tak efektivní.

      +

      + Seznam níže obsahuje dostupné klávesové zkratky seskupené podle problematických oblastí.

      +

      Rozhraní CKFinder

      +
        +
      • Alt+F8 – vstoupí do Panelu složek.
      • +
      • Alt+F9 – vstoupí do Panelu souborů.
      • +
      • Alt+F10 – vstoupí do Panelu nástrojů.
      • +
      • Alt+U – otevře Panel nahrávání.
      • +
      • (Ctrl+)Shift+F10 – otevře Kontextové menu souboru nebo složky.
      • +
      • Esc – má stejný účinek jako tlačítko Zrušit (Cancel). Zavře + dialogové okno CKFinder nebo kontextové menu bez uložení jakýchkoli změn.
      • +
      • Enter – má stejný účinek jako tlačítko OK v dialogovém okně. + Vybere funkci CKFinder z panelu nástrojů nebo kontextového menu.
      • +
      • Šipky Doleva a Doprava – pohyb mezi tlačítky panelu nástrojů.
      • +
      • Šipky Nahoru a Dolů nebo Tab a Shift+Tab – pohyb mezi možnostmi kontextového menu.
      • +
      +

      + Navigace panelu souborů

      +
        +
      • Page Down – posune Panel souborů dolů.
      • +
      • Page Up – posune Panel souborů nahoru.
      • +
      • End – posune Panel souborů na poslední řádek.
      • +
      • Home – posune Panel souborů na první řádek.
      • +
      +

      + Práce se soubory a složkami

      +
        +
      • F2 – má stejný účinek jako příkaz Přejmenovat (Rename).
      • +
      • Del – má stejný účinek jako příkaz Smazat (Delete).
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/header.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/header.html new file mode 100644 index 0000000..dcb961f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/header.html @@ -0,0 +1,34 @@ + + + + Uživatelská příručka CKFinder + + + + + + + + + + +
      +

      + Uživatelská příručka CKFinder

      +
      + Navštivte internetovou stránku CKFinder
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/license.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/license.html new file mode 100644 index 0000000..bf00b15 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/license.html @@ -0,0 +1,15 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      + CKFinder License

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/suggestions.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/suggestions.html new file mode 100644 index 0000000..36c1188 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/suggestions.html @@ -0,0 +1,34 @@ + + + + Uživatelská příručka CKFinder + + + + + + + +

      + Vaše podněty

      +

      + Neváhejte nám zaslat Vaše podněty o této dokumentaci. + Vždy jsme ochotni ji zlepšit protože Vám chceme nabídnout lepší software každý den.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/toc.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/toc.html new file mode 100644 index 0000000..22f5124 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/files/toc.html @@ -0,0 +1,96 @@ + + + + Uživatelská příručka CKFinder + + + + + + +

      +  Obsah

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/index.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/index.html new file mode 100644 index 0000000..eed8266 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/cs/index.html @@ -0,0 +1,18 @@ + + + + Uživatelská příručka CKFinder + + + + + + + + + + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/001.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/001.html new file mode 100644 index 0000000..9f8960f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/001.html @@ -0,0 +1,30 @@ + + + + CKFinder User's Guide + + + + + +

      + Welcome to CKFinder

      +

      + CKFinder is a file manager that can help you browse, + upload, and manage files located on a web server — directly from your + Internet browser and without the need to install anything on your computer.

      +

      + Due to its application in a distributed environment, CKFinder can be described + as collaborative software that makes it easy to maintain and share files + located on a central computer (the server).

      +

      + Whether you are new to CKFinder or an experienced user, it is well worth spending + some time browsing through the CKFinder documentation in order to gain full + understanding of the ins and outs of this simple yet powerful tool.

      +

      + Legal Notices

      +

      + Please see the "Legal Notices" + for some important copyright information.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/002.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/002.html new file mode 100644 index 0000000..d87bf2d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/002.html @@ -0,0 +1,41 @@ + + + + CKFinder User's Guide + + + + + +

      + CKFinder Interface Overview

      +

      + The CKFinder interface is designed to be clean, familiar to end users, and easy to + learn and use. Most features can be handled with a mouse click as well as by using + the context menus.

      +

      + If you are familiar with desktop file browsers built in most operating systems + available for your PC or laptop, you will quickly see that using an online file + manager is just as easy and intuitive.

      +

      + The following is a screenshot of the CKFinder interface:

      +

      + CKFinder interface 

      +
        +
      1. Folders Pane – contains the "tree view" + of the folders that you can navigate. Folders are used to organize and categorize your + files.
      2. +
      3. Files Pane – lists the files available + in the selected folder.
      4. +
      5. Toolbar – a series of buttons that can + be clicked in order to quickly execute specific file browser functions.
      6. +
      7. Status Bar – the section at the bottom + of the interface that displays some information about the selected file, the total + number of files in the folder, etc.
      8. +
      9. Context Menu – a popup menu with file + browser commands that execute specific tasks for the object that was selected. Options + available in the context menu change dynamically depending on the object that is + clicked.
      10. +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/003.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/003.html new file mode 100644 index 0000000..0f5893d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/003.html @@ -0,0 +1,145 @@ + + + + CKFinder User's Guide + + + + + +

      + Folders Pane

      +

      + The Folders Pane contains the "tree view" of the folders that you can navigate. + Folders are used to organize and categorize your files.

      +

      + CKFinder Folders Pane 

      +

      + Folders display is called "tree view" because the folders hierarchy is represented like + tree branches, with subfolders placed below and indented with regard to their parent items. + The Folders Pane uses the same graphic representation that can be found + in many modern operating systems.

      +

      + Basic Operations

      +

      + Opening (Expanding) a Folder

      +

      + In order to open a folder and expand its subfolders, click the plus icon + () in front of the folder name. If the plus + icon is not present, the folder does not contain any subfolders.

      +

      + Collapsed CKFinder folder 

      +

      + See the "On Request Loading" section below if you require more information about the loading + process in CKFinder.

      +

      + Closing (Collapsing) a Folder

      +

      + In order to close a folder and hide (collapse) its subfolders, click the minus icon + () in front of the folder name.

      +

      + Expanded CKFinder folder with its subfolders 

      +

      + Selecting a Folder

      +

      + In order to select a folder and make it the "current folder" in CKFinder, click the folder + name or its icon. The selected folder will be highlighted with a different background + color.

      +

      + Selected CKFinder folder 

      +

      + Advanced Operations

      +

      + Advanced operations can be performed on a folder by using its Context + Menu. Depending on the circumstances, the following options may be available:

      +

      + Folder context menu 

      +
        +
      • New Subfolder – creates a new subfolder in this parent folder.
      • +
      • Rename – changes the name of the folder.
      • +
      • Copy Files from Basket – copies the files that were placed in the + Basket to the selected folder.
      • +
      • Move Files from Basket – moves the files that were placed in the + Basket to the selected folder.
      • +
      • Delete – permanently removes the folder.
      • +
      +

      + Note: Some context menu options may be disabled (and thus + grayed out), depending on CKFinder settings enforced by your system administrator.

      +

      + Creating Folders

      +

      + In order to create a child folder inside an existing folder, choose the + New Subfolder option from the context menu of the parent folder. + Type the name of the new folder in the dialog window that will be displayed. Once + you give the new folder a name and close the dialog window, the folder will + be created.

      +

      + Creating a new folder in CKFinder 

      +

      + Not all characters can be used in folder and file names due to limitations of the + systems where CKFinder runs. Among the characters that cannot be used in folders and + files names are: \ / : + * ? " < + > and |.

      +

      + Renaming Folders

      +

      + In order to rename a folder, choose the Rename option from its context menu + or use the F2 keyboard shortcut. Type the new folder name in the dialog window that + will be displayed, overwriting the existing name. Once you enter the new folder name and + close the dialog window, the folder will be renamed.

      +

      + Renaming a folder in CKFinder 

      +

      + As stated above, not all characters can be used in folder and file names due to limitations of the + systems where CKFinder runs. Among the characters that cannot be used in folders and + files names are: \ / : + * ? " < + > and |.

      +

      + Attention: When you rename a folder, links or media insertions + available on other pages and pointing to files or folders inside the renamed folder + will be broken, and thus not available anymore. Because of that be careful when using this + feature.

      +

      + Copying and Moving Files from Basket

      +

      + The Basket is a virtual placeholder that can be + helpful if you want to perform batch operations on files. The copying and moving + operations are described in the "Basket" section + of the User's Guide.

      +

      + Deleting Folders

      +

      + In order to delete a folder, including all its contents, choose the Delete + option from its context menu or use the Del key. A confirmation message will appear + to ensure that this operation is what you really intend to do. Once you confirm the deletion, + the folder will be removed.

      +

      + Attention: This operation cannot be undone. Once you delete the + folder and its contents, you will not be able to restore the removed files.

      +

      + Deleting a folder in CKFinder 

      +

      + Attention: When you delete a folder, links or media insertions + available on other pages and pointing to files or folders inside the deleted folder + will be broken, and thus not available anymore. Because of that be careful when using this + feature.

      +

      + "On Request" Loading

      +

      + The most important difference between CKFinder and the folders tree structures found in + desktop operating systems is that in CKFinder the folders are loaded "on request". It means + that the application does not load the entire folders tree structure at startup, but instead + loads its small subset when the folder is being expanded. This feature is present in + most advanced web applications like CKFinder and allows to save on bandwidth and loading time.

      +

      + To indicate that folders are being loaded, the Loading... label may appear when + you expand a folder:

      +

      + Folder loading in CKFinder 

      +

      + The label will automatically disappear once all requested folders are loaded.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/004.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/004.html new file mode 100644 index 0000000..33661e1 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/004.html @@ -0,0 +1,242 @@ + + + + CKFinder User's Guide + + + + + +

      + Files Pane

      +

      + The Files Pane lists all files available in the selected folder.

      +

      + CKFinder Files Pane 

      +

      + Different Views

      +

      + The Files Pane may present the files with two different display formats, + depending on CKFinder settings (see "Settings"). + The following is a comparison of the Thumbnails and the List + views for the same folder.

      +

      + When you configure CKFinder to use the Thumbnails view, the files will + be presented as thumbnails (miniature previews or icons), with or without additional + information like file name, size, or date (depending on your settings).

      +

      + CKFinder Files Pane with Thumbnails view 

      +

      + When you configure CKFinder to use the List view, the files will + be presented in a list, with or without additional information like file name, size, + or date (depending on your settings).

      +

      + CKFinder Files Pane with List view 

      +

      + Basic Operations

      +

      + Activating (Selecting) a File with a Mouse

      +

      + In order to activate a file and make it the "current file" in CKFinder, click the file + name or its thumbnail. To make it easier to choose the file, when you hover your mouse + over a file, its background will become highlighted. Once a file is activated, it will be + permanently highlighted with a different background color.

      +

      + The figure below presents various states of a file as viewed in a folder: unselected, hovered + with a mouse, and activated (selected).

      + + + + + + +
      + Unselected file in CKFinder + Hovered file in CKFinder + Selected file in CKFinder
      +

       

      +

      + In order to deactivate a file, click another one (activating it) or click any empty space inside + the Files Pane.

      +

      + Copying a File

      +

      In order to copy a file to a different folder, select it, and drag onto the target folder in the + Folders Pane. When you drop it onto a folder name, choose the + Copy File Here option from the context menu.

      +

      + Copying a file in CKFinder 

      +

      + The file will be duplicated and its copy will be placed in the target folder. The + source folder will remain untouched.

      +

      + File copied in CKFinder 

      +

      + Note: If the file with the same name already exists in the + target folder, you will be prompted to choose between overwriting it or automatically + renaming the copied file (this is the default option).

      +

      + Error message for a file that already exists in CKFinder 

      +

      + Moving a File

      +

      In order to move a file to a different folder, select it, and drag onto the target folder + in the Folders Pane. When you drop it onto a folder name, choose the + Move File Here option from the context menu.

      +

      + Moving a file in CKFinder 

      +

      + The file will be removed from the source folder and pasted into the target folder.

      +

      + File moved in CKFinder 

      +

      + Advanced Operations

      +

      + Advanced operations can be performed on a file by using its Context + Menu. Depending on the circumstances, the following options may be available:

      +

      + File context menu in CKFinder 

      +
        +
      • Select – selects the file.
      • +
      • View – displays the full-sized file in a new browser tab or window.
      • +
      • Download – downloads the file from the server to your computer.
      • +
      • Resize – allows you to modify file size and/or create a new thumbnail.
      • +
      • Rename – changes the name of the file.
      • +
      • Delete – permanently removes the file.
      • +
      +

      + Note: Some context menu options may be disabled (and thus + grayed out), depending on CKFinder settings enforced by your system administrator.

      +

      + Selecting a File

      +

      + In order to select a file by using the context menu, choose the Select + option. Alternatively, you can also perform a double-click on the file with your mouse.

      +

      + Depending on the environment where CKFinder is used, the selection operation can, for example, + send the file URL to another application or insert an image directly into an article created + in your CMS system.

      +

      + Viewing (Previewing) a File

      +

      + In order to preview a file in the browser, choose the View option from + its context menu. Not all kinds of files can be viewed in browsers, but this feature + is quite useful for images, text, and PDF files. In other cases, the browser will ask + you to open the file with an appropriate application.

      +

      + When you attempt to preview an image, CKFinder will display in directly in a lightbox popup.

      +

      + Downloading a File

      +

      + In order to download a file, choose the Download option from its context + menu. The browser will ask you for a location on your computer to save the downloaded file. + Depending on your browser and operating system settings, the file might also be opened + immediately after it is downloaded by using an appropriate application of your operating + system.

      +

      + Resizing a File (Image)

      +

      + In order to change the image size or its thumbnail size, choose the Resize + option from its context menu. Once you enter new image dimensions or choose a thumbnail size, + close the dialog window to apply the changes.

      +

      + Resizing an image in CKFinder 

      +

      If the image is too big, you can alter its dimensions by entering new values into the + Width and Height fields. By default the image ratio is locked, + which you can see thanks to the Image size ratio locked in CKFinder + (Lock) button. This means that when you change one of the size values (width + or height), the other one will be adjusted automatically.

      +

      If you want to freely modify both dimensions, click the Lock button in order to + unlock the ratio. The button will now change to + Image size ratio unlocked in CKFinder + (Unlock) and modification of one dimension will not automatically cause the + other one to be adjusted. To lock the image ratio again, click the Unlock button + once more.

      +

      You can easily return to original image size by pressing the + Image size ratio reset in CKFinder + (Reset Size) button. This will reset the image size; the original width and height + will now appear in appropriate text boxes.

      +

      + If you resize the image, you can decide to save it under the same name, overwriting the + existing file. Please note that this operation cannot be undone and once you save the file with its + modified dimensions, you will not be able to restore the original size. In order to overwrite the + original image, leave the Create a new image checkbox unselected.

      +

      + Overwriting a resized image in CKFinder 

      +

      + You can also decide to save the resized image in a new file and leave the original as is. If you + select the Create a new image checkbox, you will be able to give the modified + file a new name. By default CKFinder suggests to save the image under the name that is built from + the original file name and new file dimensions (for example: Sun1_100x100.jpg when the + original file was named Sun1.jpg and the file was resized to 100 pixels wide and 100 + pixels high).

      +

      + Creating a new resized image in CKFinder 

      +

      + When you are ready with your changes, click the OK button to close the dialog + window. On successful resizing a confirmation message will be displayed.

      +

      + File resized in CKFinder 

      +

      + If you saved the resized image in a new file, you will see both files appear inside the folder.

      +

      + Original and resized file in CKFinder 

      +

      + Note: The size of the original image may limit the options available for + the Resize feature. The modified image size cannot exceed the original dimensions. +

      +

      + Generating Thumbnails

      +

      + The Resize feature can also be used in order to generate resized copies of + images (thumbnails) that you can use in articles on your website or in blog posts. Thanks to + the thumbnail resizing feature the site administrator can set predefined thumbnail size + options that can be used by CKFinder users. This will save you the effort to manually + enter modified width and height values for each image and will let you keep the thumbnail + sizes consistent across your site.

      +

      + In order to use one of the predefined thumbnail sizes, choose the Resize + option from the image context menu. In the Create a new thumbnail section + of the Resize dialog window select the checkbox(es) representing the + desired thumbnail size(s). On successful resizing a confirmation message will be displayed. + The resized image copies will be created in the same folder and the new files will be named + according to the thumbnail size option that you choose (with _large, + _medium and _small suffixes added to the original file name).

      +

      + Thumbnails generated in CKFinder 

      +

      + Note: If the image is smaller than some of the thumbnails options + (see example above), the ones that are unavailable will be grayed out.

      +

      + Renaming a File

      +

      + In order to rename a file, choose the Rename option from its context menu + or use the F2 keyboard shortcut. Type the new file name in the dialog window that + will be displayed, overwriting the existing name. Once you enter the new file name and close + the dialog window, the file will be renamed.

      +

      + Renaming a file in CKFinder 

      +

      + Not all characters can be used in folder and file names due to limitations of the + systems where CKFinder runs. Among the characters that cannot be used in folders and + files names are: \ / : * + ? " < > and |.

      +

      + Attention: When you rename a file, links or media insertions + available on other pages and pointing to the renamed file will be broken, and thus not + available anymore. Because of that be careful when using this feature.

      +

      + Deleting a File

      +

      + In order to delete a file, choose the Delete option from its context menu + or use the Del key. A confirmation message will appear to ensure that this operation + is what you really intend to do. Once you confirm the deletion, the file will be removed.

      +

      + Attention: This operation cannot be undone. Once you delete the + file, you will not be able to restore it.

      +

      + Deleting a file in CKFinder 

      +

      + Attention: When you delete a file, links or media insertions + available on other pages and pointing to the deleted file will be broken, and thus not + available anymore. Because of that be careful when using this feature.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/005.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/005.html new file mode 100644 index 0000000..d448737 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/005.html @@ -0,0 +1,43 @@ + + + + CKFinder User's Guide + + + + + +

      + Toolbar +

      +

      + The Toolbar is a dedicated section at the top of the CKFinder interface. It contains + a series of menu buttons that can be clicked in order to give you access to various file browser + features.

      +

      + This is what the standard CKFinder toolbar looks like:

      +

      + CKFinder Toolbar 

      +

      Using the Toolbar

      +

      In order to perform an operation assigned to a button, click the button once. In most cases it will + either immediately perform some predefined action or open a drop-down panel with further configuration + options for a feature.

      +

      Remember that the toolbar can also be used with your keyboard. To enter the toolbar, use the + Alt+F10 keyboard shortcut. To move to the next or previous button, use the Right Arrow + and Left Arrow keys, respectively. To activate a selected toolbar button, press Enter + or Space.

      +

      + Toolbar Buttons

      +

      + The following is the list of buttons available in the standard toolbar:

      +
        +
      • Upload – opens the Upload Pane + that can be used to add new files to the current folder.
      • +
      • Refresh – reloads the list of files in the + Files Pane.
      • +
      • Settings – opens the Settings Pane + where you can configure and personalize CKFinder.
      • +
      • Help – opens this User's Guide.
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/006.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/006.html new file mode 100644 index 0000000..fde6bc8 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/006.html @@ -0,0 +1,127 @@ + + + + CKFinder User's Guide + + + + + +

      + Upload Button

      +

      + The Upload button that is available in the CKFinder + Toolbar opens the + Upload Pane which you can use to add new files to the + current folder.

      +

      The figure below presents the default file browser Upload Pane + that is expanded when you click the toolbar button.

      +

      + Flash Upload Panel in CKFinder 

      +

      + In order to close (collapse) the Upload Pane, press + the Cancel button (if you have not started the upload process yet) + or the Close button (if the upload has already finished). You can + also click the Upload toolbar button once again to collapse the panel.

      +

      + Note: Upload is a technical term that + stands for the action of sending the files from your local computer to a central + computer (also known as a server).

      +

      + Upload Pane Versions

      +

      CKFinder Upload Pane comes in two flavors, depending on your + environment. By default, the multiple upload solution (that lets you send more + files to the server in one operation) is used for all environments that support + Adobe Flash. If, however, your local system does not support Flash, you will + still be able to upload individual files in separate operations thanks to the + fallback solution.

      +

      The figure above presents the default Upload Pane with multiple + upload solution enabled. For all systems that do not support Flash (including + some mobile browsers) the following Upload Pane format will + be used.

      +

      + Single file Upload Panel in CKFinder 

      +

      + Multiple File Upload

      +

      + By default CKFinder will allow you to upload multiple files at the same time. + In order to send the files to the server, follow the steps described below.

      +

      Step 1: Click the Upload toolbar button to open the + Upload Pane.

      +

      Step 2: When the Upload Pane expands, choose the + Add Files button. A native file selection dialog window of + your operating system that opens will let you choose the local file to be + uploaded to the server.

      +

      Note: You can choose as many files as you want by + selecting them in the dialog window all at once.

      +

      Step 3: The local file(s) will now be added to the upload queue. + If you want to add further files to this upload batch, click the + Add Files button again and repeat the steps described above.

      +

      + Upload queue in CKFinder 

      +

      Step 4: If you change your mind about the files that should be sent to the server, you + can always either remove individual files from the upload queue by clicking + the Remove button next to the file, or decide to cancel the whole + upload process by choosing the Cancel button of the + Upload Pane.

      +

      Step 5: If you are ready with the file selection process, you can click the + Upload button to start the upload. The progress of the whole process + as well as individual files can be observed on the screen.

      +

      + Multiple file upload progress 

      +

      Step 6: Wait for the upload to terminate. Once it is completed, the folder + content will refresh and the uploaded file (or the last one of the multiple files) + will be selected in the Files Pane.

      +

      + Single File Upload

      +

      When Adobe Flash is not available in your system, CKFinder upload will be fully + functional, though limited to uploading one file at a time. In order to send the + file to the server, follow the steps described below.

      +

      Step 1: Click the Upload toolbar button to open the + Upload Pane.

      +

      Step 2: When the Upload Pane expands, choose the + Browse button. A native file selection dialog window of your + operating system that opens will let you choose the local file to be uploaded + to the server.

      +

      Note: The button caption may differ between browsers.

      +

      Step 3: The local file will now be selected. You can only upload one file + at a time.

      +

      Step 4: If you are ready with the file selection process, you can click the + Upload Selected File button to start the upload. The progress of the + file upload process can be observed on the screen.

      +

      + Single file upload in CKFinder 

      +

      Step 5: Wait for the upload to terminate. Once it is completed, the + Upload Pane will be closed, the folder content will refresh, and the uploaded + file will be selected in the Files Pane.

      +

      + Upload Errors

      +

      + The following error messages may appear when uploading files.

      +

      + A file with the same name is already available. The uploaded file was renamed + to "filename(1).ext"

      +

      + This message indicates that the uploaded file name is already in use by another + file in the same folder. To avoid conflict, a consecutive number, the "(1)", was + appended to the original name.

      +

      + Invalid file

      +

      + The file that you attempted to upload was not accepted. +

      +

      + The most common cause for this message is that CKFinder was configured to not + accept the kind of file you are trying to upload based on its extension. This + is a security restriction. It is also possible that the file size is too + large for your system. If this is the case, the server must be configured to + accept bigger files. +

      +

      Upload cancelled for security reasons. The file contains HTML-like data.

      +

      The uploaded file contains HTML code. For security reasons, only files with selected + extensions are allowed to contain HTML code.

      +

      + Please contact your system administrator to get more information regarding the + accepted file types and their size limits.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/007.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/007.html new file mode 100644 index 0000000..f666c2f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/007.html @@ -0,0 +1,29 @@ + + + + CKFinder User's Guide + + + + + +

      + Refresh Button

      +

      When you work in a shared environment managed by CKFinder, where dozens or even hundreds + of users are working on the same files at the same time, it may happen that some + changes are being introduced by others to the files or folders that you are processing + or viewing at any given moment.

      +

      This is where the Refresh option might come to the rescue. This feature + lets you reload the contents of a folder and see its most current state. Whenever you + need to see the updated file list, click the Refresh + button from the CKFinder Toolbar.

      +

      + Refresh button in the CKFinder toolbar 

      +

      + This feature is particularly useful if you are using CKFinder as collaborative + software, sharing files and folders with friends, family, colleagues, or any other + group of users. In order to ensure that you always see the most current version of the + content managed by CKFinder, you might want to occasionally refresh the files list to + update it.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/008.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/008.html new file mode 100644 index 0000000..d1d0192 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/008.html @@ -0,0 +1,90 @@ + + + + CKFinder User's Guide + + + + + +

      + Settings Button

      +

      + The Settings button that is available in the CKFinder + Toolbar opens the + Settings Pane where you can configure and customize + CKFinder.

      +

      The figure below presents the file browser Settings Pane + that is expanded when you click the toolbar button.

      +

      + CKFinder Settings Pane 

      +

      + All settings are saved automatically by using Internet browser "cookies". + "Cookies" are small files that store private configuration information + for specific websites on your computer.

      +

      + In order to close (collapse) the Settings Pane, press + the Close button or click the Settings + toolbar button once again.

      +

      + CKFinder Configuration Options

      +

      + All configuration options pertain to the Files Pane + and control the way the files are displayed in CKFinder. The + Files Pane will react immediately to changes introduced + in the Settings Pane.

      +

      + View

      +

      + Sets the view mode in the Files Pane:

      +
        +
      • Thumbnails – this mode will display each file in a + box (frame). For images a small preview (called a thumbnail) will + be displayed inside the box. For other files an icon will be available + instead.
      • +
      • List – this mode will display all files in a list. + No image previews are available in this mode.
      • +
      +

      + Display

      +

      + Sets the amount of information available in the Files Pane. + The following options can be turned on and off:

      +
        +
      • File Name – displays the file name, along with its + extension.
      • +
      • Date – displays the last file modification date.
      • +
      • File Size – displays the file size, in kilobytes.
      • +
      +

      If you are using the Thumbnails view mode, you can deselect all + options. In the List mode the file name will always be displayed.

      +

      The image below presents various display options as viewed in the + Thumbnail mode.

      + + + + + + + +
      + File displayed in Thumbnails mode without file name, size, and modification date + File displayed in Thumbnails mode with file name only + File displayed in Thumbnails mode with file name and modification date + File displayed in Thumbnails mode with file name, size, and modification date
      +

      + Sorting

      +

      + Sets the order in which the files will be listed. The following options are available:

      +
        +
      • By File Name – sorts the files alphabetically according to + their names.
      • +
      • By Date – sorts the files by the last modification date, with + newest displayed first.
      • +
      • By Size – sorts the files by their size, with largest displayed + first.
      • +
      • By Extension – sorts the files first alphabetically by their + extension, and then alphabetically according to their names.
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/009.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/009.html new file mode 100644 index 0000000..8f37cf0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/009.html @@ -0,0 +1,19 @@ + + + + CKFinder User's Guide + + + + + +

      + Help Button

      +

      + The Help button is available in the + Toolbar for all CKFinder views. When you click it, + the "User's Guide" will open in a new browser tab or window.

      +

      + Help button in the CKFinder toolbar 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/010.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/010.html new file mode 100644 index 0000000..9260481 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/010.html @@ -0,0 +1,33 @@ + + + + CKFinder User's Guide + + + + + +

      + Status Bar

      +

      + The Status Bar is the section at the bottom of the CKFinder + interface that displays information about the selected file, the total number + of files in the folder, etc.

      +

      + If a file is selected in CKFinder, the Status Bar will display + detailed information about that file, including the file name, its size, and the + data of its last modification. For example:

      +

      + CKFinder Status Bar with a file selected 

      +

      + If no files are selected, the Status Bar will instead display the + total number of files in the current folder. For example:

      +

      + CKFinder Status Bar with no files selected 

      +

      + If the folder is empty, the Status Bar will display an appropriate + message. For example:

      +

      + CKFinder Status Bar for an empty folder 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/011.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/011.html new file mode 100644 index 0000000..cdeb0fb --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/011.html @@ -0,0 +1,25 @@ + + + + CKFinder User's Guide + + + + + +

      + Legal Notices

      +

      + CKFinder, including this documentation, is Copyright © 2007-2013 CKSource - Frederico Knabben. All rights + reserved. Please ensure that you have read and understood the CKFinder + License.

      +

      + The icons used in the toolbar and context menus were designed by Mark James. + Please check the following URL for more information:
      + http://www.famfamfam.com/lab/icons/silk/

      +

      + Trademarks

      +

      + CKFinder, the CKFinder Logo, CKSource, CKEditor, and FCKeditor are trademarks of CKSource - Frederico Knabben.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/012.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/012.html new file mode 100644 index 0000000..aa73719 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/012.html @@ -0,0 +1,64 @@ + + + + CKFinder User's Guide + + + + + +

      + Context Menu

      +

      + The Context Menu is a pop-up menu that appears whenever you + click a file or a folder inside the CKFinder interface with the right mouse + button, use the Menu/Application key on your keyboard, or the + (Ctrl+)Shift+F10 keyboard shortcut. It gives you access to file browser + operations that are available for a given type of object.

      +

      The context menu can also be opened by clicking the down arrow icon + () + that is available in some environments or in mobile browsers next the name of the + active folder or in the file boxes, as visible in the figure below.

      +

      + CKFinder context menu with helper arrows 

      +

      Each context menu consists of a series of options (commands) that can be + selected in order to perform a specific operation that they are associated + with.

      +

      + Note: Some context menu options may be disabled (and + thus grayed out), depending on CKFinder settings enforced by your system + administrator.

      +

      + Using the Context Menu

      +

      + In order to perform an operation listed in the context menu, click it with the + left mouse button. You can also move up and down the context menu with the + Up and Down Arrow keys or the Shift+Tab and + Tab combinations. Once an option is highlighted, you can activate + it with the Space or Enter button. If an option is grayed out, + it is unavailable unless some pre-conditions are met (e.g. you have system + permissions to make specific changes to a file or folder).

      +

      + Available Menus

      +

      + The menu is context-sensitive which means that the options displayed in it + depend on the object that you select. The following are the menus that you may + encounter while working with a standard CKFinder installation.

      +

      + Folder Context Menu

      +

      + It appears when you click a folder in the Folders Pane + with the right mouse button (or use the keyboard shortcuts described + above):

      +

      + CKFinder folder context menu 

      +

      + File Context Menu

      +

      + It appears when you click a file in the Files Pane + with the right mouse button (or use the keyboard shortcuts described + above):

      +

      + CKFinder file context menu 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/013.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/013.html new file mode 100644 index 0000000..910a857 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/013.html @@ -0,0 +1,35 @@ + + + + CKFinder User's Guide + + + + + +

      + Compatibility and System Requirements

      +

      + CKFinder is a web application. It means that it is designed to run + inside Internet browsers, which makes it easy to deploy and to use on any + computer.

      +

      + Currently, the following browsers are required for CKFinder to run:

      +
        +
      • Internet Explorer 6.0+
      • +
      • Firefox 3.0+
      • +
      • Safari
      • +
      • Google Chrome
      • +
      • Opera
      • +
      +

      + Some features depend on your browser settings. CKFinder should work in any of the + browsers listed above with their default settings enabled. If you are experiencing problems + with the Context Menu or your + Settings are not being saved, make sure that your browser + is configured to "allow scripts to replace context menus" ("allow scripts + to receive right clicks") and that you have "cookies support enabled".

      +

      + Please contact your system administrator if you have any doubts.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/014.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/014.html new file mode 100644 index 0000000..c096d82 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/014.html @@ -0,0 +1,101 @@ + + + + CKFinder User's Guide + + + + + +

      + Basket

      +

      + The Basket folder that is available in the + Folders Pane opens the + Basket Pane.

      +

      + The Basket is a virtual and temporary placeholder that can + be used to perform batch operations on files in CKFinder. It is a + virtual container, since the files that are placed in the + Basket are not physically moved from their parent folders. +

      +

      The figure below presents the file browser Basket Pane + that is expanded when you click the Basket folder in the + Folders Pane.

      +

      + CKFinder Basket folder 

      +

      + Note: The Basket folder is private + in the sense that it is not being shared with other users of the file system + and is tied to your browser session.

      +

      + Adding Files to Basket

      +

      + At the beginning of each CKFinder session the Basket is empty. + A message urging you to drag some files and drop them into the Basket + will be displayed. In order to do this, go to the folder that contains the files + that you are going to use, drag it onto the Basket folder in + the Folders Pane, and drop.

      +

      + Dragging a file to the Basket in CKFinder 

      +

      The file should now appear in the Basket folder.

      +

      + File Context Menu

      +

      + When a file is placed in the Basket, its context menu will change + to only include the operations that are available in this special folder.

      +

      + File context menu opened in the Basket 

      +

      + Removing Files from Basket

      +

      + There are two methods of removing a file from the Basket. Firstly, + you can remove an individual file by choosing the Remove from Basket + option from the file context menu. When you select the context menu removal option, + a confirmation message will appear.

      +

      + Removing a file from the Basket in CKFinder 

      +

      You can also remove all files at once by clicking the Clear Basket toolbar + button. When you do this, you will be prompted to confirm whether you intend to remove + all Basket contents.

      +

      + Removing all files from the Basket in CKFinder 

      +

      + Note: Removing a file from the Basket does + not delete it from the file system. It will still be available in its parent folder.

      +

      + Showing File Parent Folder

      +

      + As mentioned above, the Basket is a virtual folder that lists files that + are physically located in other file system folders. If you want to check the source folder + of a file, choose the Open Parent Folder option from the file context + menu. CKFinder will show the folder that the file is located in.

      +

      + Copying Files from Basket

      +

      + Once you conveniently place some files in the Basket, you will now be + able to copy them to a different (physical) folder. In order to achieve this, select the + target folder in the Folders Pane and choose the + Copy Files from Basket option from its context menu.

      +

      + A confirmation message will appear, listing the files that were copied to the target + folder.

      +

      + Copying files from Basket in CKFinder 

      +

      + The files will be duplicated and their copies will be placed in the target folder. The + source folder will remain untouched.

      +

      Moving Files from Basket

      +

      + The Basket is also useful if you want to move some files between folders. + Once you place some files in the Basket, select a target folder in the + Folders Pane, and choose the Move Files from Basket option + from its context menu.

      +

      + A confirmation message will appear, listing the files that were moved to the target folder.

      +

      + Moving files from Basket in CKFinder 

      +

      + The files will be removed from the source folder and pasted into the target folder.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/015.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/015.html new file mode 100644 index 0000000..49b082e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/015.html @@ -0,0 +1,46 @@ + + + + CKFinder User's Guide + + + + + +

      + Keyboard Shortcuts

      +

      + Many functions in CKFinder have their equivalent keyboard shortcuts. This is one + of the reasons why working with the file browser is both simple and efficient.

      +

      + The list below contains available keyboard shortcuts grouped by problem areas.

      +

      CKFinder Interface

      +
        +
      • Alt+F8 – enters the Folders Pane.
      • +
      • Alt+F9 – enters the Files Pane.
      • +
      • Alt+F10 – enters the Toolbar.
      • +
      • Alt+U – opens the Upload Pane.
      • +
      • (Ctrl+)Shift+F10 – opens the Context Menu of a file or folder.
      • +
      • Esc – equivalent of the Cancel button. Closes + a CKFinder dialog window or context menu without saving any changes.
      • +
      • Enter – equivalent of the OK button in a dialog window. + Selects a CKFinder function from the toolbar or context menu.
      • +
      • Left and Right Arrows – move between toolbar buttons.
      • +
      • Up and Down Arrows or Tab and Shift+Tab – move between context menu options.
      • +
      +

      + Files Pane Navigation

      +
        +
      • Page Down – scrolls down the Files Pane.
      • +
      • Page Up – scrolls up the Files Pane.
      • +
      • End – scrolls the Files Pane to the last row.
      • +
      • Home – scrolls the Files Pane to the first row.
      • +
      +

      + Working with Files and Folders

      +
        +
      • F2 – equivalent to the Rename command.
      • +
      • Del – equivalent to the Delete command.
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/header.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/header.html new file mode 100644 index 0000000..bb6642a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/header.html @@ -0,0 +1,33 @@ + + + + CKFinder User's Guide + + + + + + + + + +
      +

      + CKFinder User's Guide

      +
      + Visit the CKFinder Website
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/license.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/license.html new file mode 100644 index 0000000..36e24a0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/license.html @@ -0,0 +1,15 @@ + + + + CKFinder User's Guide + + + + + +

      + CKFinder License +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/suggestions.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/suggestions.html new file mode 100644 index 0000000..d3315f7 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/suggestions.html @@ -0,0 +1,33 @@ + + + + CKFinder User's Guide + + + + + + +

      + Your Suggestions

      +

      + Feel free to send us your suggestions about this documentation. + We are always willing to improve it as we want to offer you better software every day.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/toc.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/toc.html new file mode 100644 index 0000000..a6482b7 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/files/toc.html @@ -0,0 +1,95 @@ + + + + CKFinder User's Guide + + + + + +

      +  Table of Contents

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/index.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/index.html new file mode 100644 index 0000000..9d2174a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/en/index.html @@ -0,0 +1,18 @@ + + + + CKFinder User's Guide + + + + + + + + + + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/001.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/001.html new file mode 100644 index 0000000..0d695c9 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/001.html @@ -0,0 +1,24 @@ + + + + CKFinder User's Guide + + + + + + +

      + Bienvenido a CKFinder +

      +

      + CKFinder es un programa colaborativo que hace más fácil mantener y compartir archivos localizados en una computadora central (el servidor).

      +

      + Ya sea que usted sea nuevo al programa o un usuario experto, vale la pena tomar un poco de su tiempo para leer la documentación completa de CKFinder para obtener un conocimiento completo acerca de este simple pero poderoso programa.

      +

      + Avisos legales +

      +

      + Se le pide su atención a los Avisos legales

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/002.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/002.html new file mode 100644 index 0000000..34553b4 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/002.html @@ -0,0 +1,28 @@ + + + + CKFinder User's Guide + + + + + + +

      + Introducción a la interface de CKFinder

      +

      + La Interface de CKFinder, ha sido diseñada para ser clara, familiar, fácil de aprender y usar para nuestros usuarios finales. La mayoría de las caracteristicas pueden ser usadas con movimientos del mouse y clicks en menus de contexto.

      +

      + La siguiente imagen, es un screenshot de CKFinder:

      +

      + CKFinder Screenshot +

      +
        +
      1. Pánel de Carpetas : contiene la "vista de arbol" de las carpetas donde se puede navegar, las carpetas son formas de organizar mejor los archivos.
      2. +
      3. Pánel de Archivos: Muestra los archivos disponibles en la carpeta seleccionada.
      4. +
      5. Barra de Herramientas: Es una serie de botones que pueden ser pulsados para ejecutar rápidamente funciones específicas.
      6. +
      7. Barra de Status : Es un espacio utilizado para desplegar información referente al archivo seleccionado, el número total de archivos en una carpeta etc.
      8. +
      9. Menú contextual : Una serie de botones que pueden ser usados para ejecutar tareas específicas en el objeto sobre el cual se ha dado un click. Las opciones disponibles cambian dinamicamente dependiendo del tipo del objeto al cual se le dio un click.
      10. +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/003.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/003.html new file mode 100644 index 0000000..a2073ea --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/003.html @@ -0,0 +1,83 @@ + + + + CKFinder User's Guide + + + + + + +

      Pánel de Carpetas

      +

      + El pánel de carpetas, contiene la "vista de arbol" de las carpetas por las que se puede navegar, las carpetas, son una manera de organizar mejor los archivos.

      +

      + Se le llama "vista de arbol", por que se tienen las carpetas representadas jerarquicamente como las ramas de un arbol. Usa la misma representación gráfica que muchos sistemas operativos modernos.

      +

      + Operaciones Básicas

      +

      + Abrir una carpeta

      +

      + Para abrir una carpeta y revelar sus carpetas "hijas", simplemente haga click en el signo "más" (Signo más) en frente de la misma. Si el signo "más" no está presente, la carpeta no tiene carpetas hijas que puedan desplegarse.

      +

      + Vea "Cargado bajo demanda " al final de la pagina para un mejor entendimiento de como son cargadas las carpetas.

      +

      + Cerrar una carpeta

      +

      + Para cerrar una carpeta, y por ende esconder sus carpetas "hijas", simplemente dé click en el signo "menos" (Signo menos) en frente de la misma.

      +

      + Seleccionar una carpeta +

      +

      + Para seleccionar una carpeta y por ende convertirla a "la carpeta actual" para CKFinder, simplemente dé click en el nombre de la carpeta o en su icono. La carpeta seleccionada tendrá un color de fondo diferente.

      +

      + Operaciones Avanzadas

      +

      + Es posible utilizar operaciones avanzadas en una carpeta, haciendo uso de su "Menú de contexto", las siguientes opciones estan disponibles:

      +

      + Menú contextual 

      +

      + Nota: Algunos botones de un menú de contexto podrían estar deshabilitados, dependiendo de los ajustes asignados por el administrador del sistema.

      +
      +

      + Crear Carpetas +

      +
      +

      + Para crear una carpeta "hija" dentro de una carpeta ya existente, solamente haga clic sobre la opción "Nueva Carpeta" del menú de contexto. Una ventana de dialogo aparecerá en donde deberá escribir el nombre de la nueva Carpeta, luego confirme la operación.

      +

      + No todos los caracteres pueden ser usados para establecer un nombre de carpeta, debido a limitaciones en los sistemas donde CKFinder se ejecuta. Por ejemplo, los siguientes caracteres, no pueden usarse para dar nombre a carpetas ni archivos: \ / : + * ? " < + > |

      +
      +

      + Renombrar Carpetas

      +
      +

      + Para renombrar una carpeta, solo dé click en la opción "Renombrar" del menú de contexto. Una ventana de dialogo aparecerá conteniendo el nombre actual de la carpeta, ahí deberá escribir el nuevo nombre que desea asignar a la carpeta, luego confirme la operación.

      +

      + No todos los caracteres pueden ser usados para establecer un nombre de carpeta, debido a limitaciones en los sistemas donde CKFinder se ejecuta. Por ejemplo, los siguientes caracteres, no pueden usarse para dar nombre a carpetas ni archivos: \ / : * ? " < > |

      +
      +

      Atención: Al renombrar una carpeta, las ligas o inserciones de medios disponibles en otras paginas que apunten a archivos o carpetas dentro de aquella que fue renombrada podrían quedar "quebradas" y por lo mismo no disponibles más. Asi que sea cauteloso cuando use esta caracteristica.

      +
      +

      + Borrar Carpetas

      +
      +

      + Para borrar una carpeta, incluyendo su contenido, solo dé click sobre la opción "Borrar" del menú de contexto. Un mensaje de confirmación aparecerá para asegurarse de que realmente desea eliminar dicha carpeta.

      +

      Atención: Al renombrar una carpeta, las ligas o inserciones de medios disponibles en otras paginas que apunten a archivos o carpetas dentro de aquella que fue renombrada podrían quedar "quebradas" y por lo mismo no disponibles más. Asi que sea cauteloso cuando use esta caracteristica.

      +
      +

      + Cargado "Bajo demanda "

      +
      +

      + La diferencia más importante entre CKFinder y la "vista de arbol" que se encuentra en los sistemas operativos modernos, es que los folders se cargan "bajo demanda", esto significa que CKFinder no carga todo el arbol al inicio, sino que solo carga un pequeño subconjunto de el cuando se abre la carpeta, este es un requerimiento de aplicaciones avanzadas para web como lo es CKFinder.like CKFinder.

      +

      + Para indicar que las carpetas se están cargando, la etiqueta "Cargando..." podría aparecer cuando se intente abrir una carpeta.

      +

      + cargando... 

      +

      + La etiqueta desaparecerá automaticamente una vez que la carga de las carpetas haya terminado, una vez cargada, la etiqueta no aparecera más para esa carpeta.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/004.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/004.html new file mode 100644 index 0000000..3f9b798 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/004.html @@ -0,0 +1,68 @@ + + + + CKFinder User's Guide + + + + + + +

      + Pánel de Archivos

      +

      + El Pánel de archivos lista los archivos disponibles en la carpeta seleccionada.

      +

      + Vistas Diferentes

      +

      El pánel de archivos puede presentar dos vistas diferentes, dependiendo de la configuración de CKFinder (vea "Ajustes"). La siguiente, es una comparación de la vista "Miniaturas" y la vista "Lista" para la misma carpeta:

      +

      + Vista de Iconos +

      +

      + +

      +

      + Operaciones Básicas  

      +

      + Seleccionar (Activar) un Archivo

      +

      + Para seleccionar un archivo, y por ende convertirlo al "archivo activo" en CKFinder, simplemente dé click sobre el archivo. Para identificar más fácilmente que el puntero del mouse está sobre un archivo, el área del mismo será coloreada. El archivo seleccionado tendrá un color de fondo diferente (generalmente Azul).

      +

      + Operaciones Avanzadas

      +

      Se pueden realizar operaciones avanzadas en un archivo utilizando su "Menú de Contexto". Las siguientes opciones estan disponibles:

      +

      + Menú contextual +

      +

      + Nota: Algunos botones del menu de contexto, podrían estar deshabilitados, esto depende de los ajustes que su administrador haya hecho en la configuración de CKFinder.

      +
      +

      + Seleccionar Archivos.

      +
      +

      + Para seleccionar un archivo, y por ende regresarlo a la aplicación solamente dé click sobre la opción "Seleccionar".

      +

      + Visiualización (previsualización) de Archivos

      +

      Para previsualizar un archivo en el browser, solo dé click en el botón "Visualizar". No todos los tipos de archivos pueden ser visualizados por los browsers, pero esta caracteristica es útil para imagenes, texto y archivos del tipo PDF. En otros casos, el browser le preguntará si desea abrir el archivo con la aplicación correspondiente.

      +
      +

      + Descargar (bajar) Archivos

      +

      + Para descargar (bajar) un archivo, solo dé click en el botón "Descargar", el bropwser le solicitará el lugar donde desea guardar el archivo en su computadora personal.

      +

      + Renombrar Archivos

      +
      +

      + Para renombrar un archivo, solo dé click en el botón "Renombrar" en el menú de contexto. Una ventana aparecerá con el nombre actual del archivo, donde deberá escribir el nuevo nombre y confirmar la operación.

      +

      No todos los caracteres pueden ser usados para establecer un nombre de archivo, debido a limitaciones en los sistemas donde CKFinder se ejecuta. Por ejemplo, los siguientes caracteres, no pueden usarse para dar nombre a carpetas ni archivos: \ / : * ? " < > |

      +

      Atención: Al renombrar un archivo, las ligas o inserciones de medios disponibles en otras paginas que apunten a archivos o carpetas dentro de aquel que fue renombrado podrían quedar "quebradas" y por lo mismo no disponibles más. Asi que sea cauteloso cuando use esta caracteristica.

      +
      +

      + Borrar Archivos

      +
      +

      + Para borrar un archivo, solo dé click en la opción "Borrar" del menú de contexto. Un mensaje de confirmación aparecerá para asegurarse que realmente esa operación es la que desea realizar.

      +

      + Atención: Al borrar un archivo, las ligas o inserciones de medios disponibles en otras paginas que apunten al archivo recien borrado, quedaran "quebradas" y por ende no disponibles más, asi que sea cauteloso al utilizar esta opción.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/005.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/005.html new file mode 100644 index 0000000..74dfd13 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/005.html @@ -0,0 +1,29 @@ + + + + CKFinder User's Guide + + + + + + +

      + Barra de Herramientas

      +

      + La barra de herramientas, es un área dedicada situada al inicio de la interface de CKFinder. Contiene una serie de botones a los que se puede dar click para ejecutar rápidamente funciones específicas. Este es un screenshot de esta barra:

      +

      + Barra de herramientas +

      +

      + Botones de la barra de herramientas

      +

      + La siguiente, es una lista de los botones que están disponibles en una barra de herramientas estandar:

      +
        +
      • Subir: Abre el "Panél de Subida ", que puede ser usado para agregar nuevos archivos a la carpeta actual.
      • +
      • Recargar: Recarga la lista de archivos en el Pánel de Archivos.
      • +
      • Ajustes: Abre el "Pánel de Ajustes", en donde podrá configurar y personalizar CKFinder.
      • +
      • Ayuda: Abrirá esta Guía del Usuario.
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/006.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/006.html new file mode 100644 index 0000000..b75c78c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/006.html @@ -0,0 +1,48 @@ + + + + CKFinder User's Guide + + + + + + +

      + Botón "Subir"

      +

      + El botón "Subir" en la barra de herramientas , abre el "Pánel de Subida", que puede ser usado para agregar nuevos archivos a la carpeta actual, he aquí un screenshot de este pánel:

      +

      + Panel para añadir ficheros 

      +

      + Para cerrar el pánel de subida, solo dé click sobre el botón "Cancelar", o haga click nuevamente sobre el botón "Subir" de la barra de herramientas.

      +

      + * "Subir" es un término técnico. Se refiere a la acción de transferir un archivo situado en su computadora local a otra computadora central, (también conocida como Servidor).

      +

      + Pasos para Subir un Archivo

      +
        +
      1. Seleccione el archivo de su computadora dando click sobre el botón "Browse". El texto de este botón puede variar de browser a browser, pero siempre estará localizado justo a la derecha del campo "Seleccione archivo que desea subir".
      2. +
      3. Dé click sobre el botón "Subir el archivo seleccionado ". Un mensaje aparecerá indicando que la transferencia está en progreso.
      4. +
      5. Espere a que la transferencia termine. Una vez completada el "Pánel de Subida" se cerrará automaticamente y el archivo que subió será seleccionado en el Pánel de Archivos
      6. +
      +

      + Mensajes de la transferencia.

      +

      + Los siguientes, son los mensajes que podrían aparecer mientras se transfiere un archivo:

      +

      + Un archivo con el mismo nombre ya se encuentra en uso. El archivo que subió ha sido renombrado a: "filename(1).ext"

      +

      + Indica que el nombre del archivo que subió ya se encuentra en uso por otro archivo en la misma carpeta, para evitar un conflicto, un número progresivo (aquel que estará entre los parentesis), ha sido agregado al final del nombre original.

      +

      + Archivo no válido

      +

      + El archivo que subió no ha sido aceptado.

      +

      + La causa mas común de este menesaje, es que CKFinder ha sido configurado para NO aceptar el tipo de archivo que está usted intentando subir, basado en su extensión. Esta, es una restricción de seguridad. Otra causa puede ser que el tamaño del archivo es demasiado grande para el sistema destino, en este caso, el servidor deberá ser configurado para aceptar un archivo de mayor tamaño.

      +

      Transferencia cancelada por razones de seguridad. El archivo contiene datos que podrían ser HTML.

      +

      El archivo que subió contiene código HTML. Por razones de seguridad solamente archivos con ciertas extensiones son permitidos cuando contienen código HTML.

      + +

      + Por favor contacte al Administrador del sistema para obtener mayor información referente a los tipos de archivo aceptados y sus límtes en tamaño.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/007.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/007.html new file mode 100644 index 0000000..5306367 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/007.html @@ -0,0 +1,19 @@ + + + + CKFinder User's Guide + + + + + + +

      + Botón Recargar

      +

      + Cuando se trabaja en un espacio compartido como lo es CKFinder, en donde docenas o incluso cientos de usuarios están trabajando en los mismos archivos, podría suceder que alguno de estos otros usuarios realice cambios en el mismo folder en el que usted se encuentra trabajando en el justo momento en el que usted lo abrió. Para recargar la lista de archivos, solamente dé click sobre el botón "Recargar", esto le presentará la lista de archivos como se encuentra en ese instante.

      +

      + botón Actualizar 

      +

      Por ejemplo, imagine usted que tiene que crear una pagina para un nuevo producto de su compañía. Usted abre entonces CKFinder para obtener la fotografía del producto para ser incluida en el sitio web de la empresa, pero cuando abre la carpeta "Productos" usted no puede encontrar esa fotografía. Toma el teléfono y llama a "Beth", diciendo: "¡Hey Beth, la imagen del producto no se encuentra en CKFinder!". Beth dice entonces: "Ops... espera un minuto". Ella abre CKFinder en su computadora, sube el archivo con la fotografía desde su computadora y le dice: "Ahí está, solo Recarga". Usted entonces dá click sobre el botón "Recargar" y ¡voila!, el archivo aparece ahí para usted. Es por esto que CKFinder es tambien conocido como un programa de colaboración.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/008.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/008.html new file mode 100644 index 0000000..c289b1d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/008.html @@ -0,0 +1,58 @@ + + + + CKFinder User's Guide + + + + + + +

      + Botón Ajustes

      +

      + El botón "Ajustes", en la barra de herramientas, abre el "pánel de ajustes", donde usted podrá configurar y personalizar CKFinder, he aquí un screenshot de el:

      +

      + Panel de Configuración

      +

      + Todos los ajustes son guardados automaticamente utilizando las denominadas "Cookies" de su browser. Las "Cookies" son pequeños archivos que contienen información de configuración proivada para sitios web especificos.

      +

      + Para cerrar el pánel de ajustes, solo dé click sobre el botón "Cerrar" o dé click nuevamente sobre el botón "Ajustes" de la barra de herramientas.

      +

      + Opciones de Configuración

      +

      + Todas las opciones de configuración tienen que ver con el Pánel de Archivos . + Se usan para controlar como desplegar información en ese pánel. El Pánel de Archivos, reacciona inmediatamente a los cambios hechos en el Pánel de ajustes.

      +

      + Vista

      +

      + Controla el modo actual de vista del Pánel de Archivos:

      +
        +
      • El modo "Miniaturas" desplegará cada archivo como una "caja". Para las imagenes, una pequeña previsualización de ella (llamada miniatura) será desplegada dentro de la caja. Para otros tipos de archivo, un icono será mostrado en su lugar.
      • +
      +
        +
      • El modo "Lista" desplegará todos los archivos como una lista, uno abajo del otro. No se mostrará ningún tipo de previsualización en este modo.
      • +
      +

      + Mostrar

      +

      + Ajusta la cantidad de información disponible en el pánel de archivos. Para ejemplificar, he aquí como se mostrarían los archivos cuando ningúna opción está seleccionada, hasta llegar a tener todas las opciones seleccionadas.

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

      +

      + Ordenamiento

      +

      + Controla el orden en el que los archivos serán listados. Puede ser alfabeticamente por el nombre del archivo, por fecha de creación del archivo siendo el más nuevo el primero o incluso por el tamaño del archivo.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/009.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/009.html new file mode 100644 index 0000000..2032363 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/009.html @@ -0,0 +1,18 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Botón de ayuda +

      +

      + Abre esta "Guía del usuario" en una ventana nueva.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/010.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/010.html new file mode 100644 index 0000000..6a689a9 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/010.html @@ -0,0 +1,23 @@ + + + + CKFinder User's Guide + + + + + + +

      + Barra de Estado

      +

      + La "Barra de Estado" es un pequeño espacio usado para desplegar información relevante al archivo seleccionado, el número total de archivos en la carpeta, etc. Se puede encontrar al final de la interface de CKFinder

      +

      + Si un archivo es seleccionado en CKFinder, la barra de estado desplegará información detallada acerca de ese archivo en particular, contendrá el nombre del archivo, su tamaño y la fecha de su última modificación, por ejemplo:

      +

      + adivina.xls (2444Kb 21/03/2011) 

      +

      Si ningún archivo está seleccionado por el contrario, el número total de archivos en la carpeta actual será mostrado. Por ejemplo:

      +

      + 2 ficheros 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/011.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/011.html new file mode 100644 index 0000000..280f370 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/011.html @@ -0,0 +1,23 @@ + + + + CKFinder User's Guide + + + + + + +

      + Avisos Legales

      +

      + CKFinder, incluyendo su documentación tiene Copyright © 2007-2013 por CKSource - Frederico Knabben. Todos los derechos reservados, por favor asegurse de leer y entender la licencia de uso. Licencia de CKFinder.

      +

      + Los iconos usados en la barra de herramientas y los menus de contexto, han sido diseñados por Mark James. +Por favor entre a la siguiente dirección (URL) para obtener más información: http://www.famfamfam.com/lab/icons/silk/

      +

      + Marcas Registradas

      +

      + CKFinder, el logotipo de CKFinder, CKSource, CKEditor y FCKeditor son marcas registradas de CKSource - Frederico Knabben.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/012.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/012.html new file mode 100644 index 0000000..464e487 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/012.html @@ -0,0 +1,39 @@ + + + + CKFinder User's Guide + + + + + + +

      + Menú de Contexto

      +

      + El "Menú de Contexto " es una serie de botones (llamados "menú") que pueden ser usados para ejecutar tareas específicas en el objeto que ha sido seleccionado con un click. Las opciones disponibles cambiarán dinamicamente dependiendo del objeto que haya sido seleccionado con un click.

      +

      + Menus Disponibles

      +

      + Los siguientes, son los menus que podría encontrar mientras trabaja con una instalación estandar de CKFinder + installation.

      +

      + Menú de contexto para Carpetas

      +

      + Aparece cuando da un click con el botón derecho del mouse sobre una carpeta en el Pánel de carpetas

      +

      +  

      +

      + Menu de contexto de Archivo

      +

      + Aparece cuando da click con el botón derecho del mouse sobre un archivo en el Pánel de Archivos:

      +

      +  

      +

      + Menú de contexto de espacio vacío

      +

      + Aparece cuando se da click con el botón derecho del mouse en el Pánel de archivos , pero afuera de un archivo (en el fondo):

      +

      + Añadir nuevo fichero

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/013.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/013.html new file mode 100644 index 0000000..d3f9e52 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/013.html @@ -0,0 +1,28 @@ + + + + CKFinder User's Guide + + + + + + +

      + Compatibilidad y Requerimientos del Sistema

      +

      + CKFinder es una aplicación "Web", esto significa que está hecha para ser ejecutada dentro de un "browser" (navegador) haciendo más fácil distribuir y usar en cualquier computadora.

      +

      + Actualmente cualquiera de los siguientes browsers se requieren para ejecutar CKFinder:

      +
        +
      • Internet Explorer 6.0+
      • +
      • Firefox 2.0+
      • +
      • Safari 3+
      • +
      • Google Chrome
      • +
      • Opera 9.5+
      • +
      • Camino 1.0+
      • +
      +

      Algunas caracteristicas dependen para su funcionamiento de ajustes propios del navegador de internet (browser). Por default CKFinder debería funcionar correctamente, sin embargo si experimienta algun problema con el Menú de Contexto o quizá sus Ajustes no estan siendo guardados, asegurese que su browser está configurado para "Permitir a los scripts reemplazar menus de contexto" ("Permitir a los scripts recibir clicks con el botón derecho") y además tener habilitado el "Soporte para cookies".

      +

      Por favor contacte a su administrador en caso de que tenga alguna duda.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/header.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/header.html new file mode 100644 index 0000000..74359fc --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/header.html @@ -0,0 +1,34 @@ + + + + CKFinder User's Guide + + + + + + + + + + +
      +

      + Guía del Usuario de CKFinder

      +
      + Visite el sitio Web de CKFinder
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/001.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/001.png new file mode 100644 index 0000000000000000000000000000000000000000..8ce1e7217eff87f042b618e847e0f9135a32852c GIT binary patch literal 34236 zcmX`S1yt0}_dZU8bcc(Cl!|mLA*ggMh#*J^1`YdS7myU`cIgln^-XsQ?9z>N_b#=R zfP}Q_ob7$tx%zf_M=T6iMeN7t5yOab31T@-OYA*>0hyVft!ek0! zd`V-PRVV(3#Y6qIhpLAfRIW-m-NjA9z+J>qPoGxbP*exT z_yQ&Z=+i%yF4(p(bD z-3t+ZSt$36S!iEIEG2a!haf_NEKW?cn4G4FO)wu!Uj9fT3S=A)a*mNONDzY+b2wMY zX%sy6NYtZ@GZcw&qx%ATT>65l(&%Be3sn{HI2xiKYXro=ULss!6%gaXm+ob5dL=NA zUM{gAsh7WA(fl%d*zZm=1QXfxqFVKq7_hTW;)+O>h^pa=Dw9IgJjqUc5taU;DA6@K z7AUSTi2tcySPqM;ffW~ebPvmBFDiHSyhtB5EbD_MjJQ^;tA1V8M&tZLSKZJv#yykp z-X))nomayLrmH*fu``d&^i@_2^gWU=Zz_Ua<>*!UMQ(Vnp-hOy2yAgX(H%>!5N$4>0=_?rbz;d#v)}Jmc?P`S|$Q@Z9Fi`uOzD_V3w|qsg7Et>KfC z9sGg#|35ZC(^vw6U{P(g=f>Xif10gdfJ|HVg{i(!-?{tez}3aYbV%tV9W{ICd5%Kz z%Q0 z>o9h*h~_MI+?vMRYVng?`t!Ii;=c8*OXekwrl^K6etyFIfV!-yi=QMH=a&|(Pn~N8 zoH87Jq;x%2&8pFkit~C{y@8x`bb6|$6kJLq&JJg1&b6D~3H3bP_Po_+f-raQex_3F z{4S4`uA@xd+TWNgdVHPO{rZUzy8C-zx7*+T`f7VxREg=YlpnxHn&C2A0_-^w02t>wlo0T+1`ogj0OuFy8_M;LK)VDR36 zHSHN@BM@cdI{v%1lNMR_CbB0-rLpWk83V?G9z;;8sH-Bm!PH0{<#?S=zN@nn)-C}& zY&X@))CRp7ekiSv1O#5757pZ1NH z^f7WSKmUGuO$4ML{7ixwP11aXrmWO8JR2G6Ir&_+?Y^wDshtdasg4X$)L%ccIX!EQ zsj+-;S4oZq%Sa;)1!&)gohQ}j&A!JW^==M%puyXrKMKUW@;e|gh(D%tLGu&E`|AcS zOVshVW6!X!zYsJP!9Hxu3j2S1wY9)9S=&X2*k<%qA#YxZ2XNe;U^vCyUO<~iR!p<-lWxd?X@an2fuUrW5h4n@}}=3 zC0`;!0!Y^dZyjU+_+iRQev|ge&fl*_?(&Rzk1ct++yQM^l7OyM!Nhg3|GBKs>l;l~ z?*7cJ?c%%Os0K4t>>if4W=IS>hUgF7 zq3+y<30t$G-IdQ)d*xQNe<-g$>R|vMS>3{tO{nD`Vj+ilq2e48A3iopJq_6G ze<&G~^CP!&MXL*8#GNk31y-@pK>roXivx9$7Xt9(LS5Yqa8ZcZ?S#Cg?*lbxeHw~+ z0|-ZNVaw8opu|9?q0j1l(lTP1E{J~9(2{)7v+SPs_Eo_~BQEg0`CRh5s~fQ2xJ<1f z&ciwqM%1y5XisY&ns0@s7|tXQ{~4(L>$AmhPFV6LfLzVbsDfg!L$@Z4SDoq)TrDm8 zS6S^}{!$@j0le5<9fRhh5XU0%?ggr5NgBR z_Z=7VH;{HsjLo5B@y5=lfO<0qEu_zWqWGiecWnkog9M*g#w~nW$*N~<#=me zj;+t>YqWhE@cFBjg`}>O^e3VQ))*zTZNJ2go!KiV5*wchuj;uPen+b}Sn1~~Dh`#q zSsfO;Wmh8+k5c;f1wiZno`y8#=^*v1-Wi3w&8ny{u;`dS{wV9RosklZERp&CLHA{s zWM-x#6EA4~ai6E4if7{WzmeO_hPw5k`=p;N`-c{A!6GvsgoMXHxYUCeA~uTmhnzE7 z)Lop5F_fWp>1DFvY^Y0r0C>1scMk+f*MNi}w=dPpW%(U5!;VXqe|*AhxFtUVFx6wp zj*~TLGaMxlXXD4SBB&%>v7eB}_u;=|*hD>W2apyh0K;>NT&$P{wtD4dY}alR?FVE5 zy5*4^XcwYytVhr-HwHQEybjALD%^Xg{N>lKt50p&vc|VOlLan^NraryJgHNkyf^59 zCZh&O`?Oh?6vgQ(jbDm%XfZ(7%MI*l!1+oU{doGyFsW6Wk}dOn{fay9h`k*|l9m0B$hPTt6?6Upk(P;je}2jrI=9ucBmN7v<7 zJ9t1+)*@l7thM>~e9~|l1@_gpo5b29-txG<>6Dxy_`p96BePBsr!N+AS6^^-*FAj+ zP6b?V|fKH>7#Y_z5`(VjGE>H)q5$ze*bF z5)tYdNKlu7OeW!l8i_D&{vDduFq&(JXksWn90)Le_S^(8z`Xx{@`vX_vJ0Fj{~ocl zZ{SQ002u?ClD=mvh2Pss=xQtc3#Rikd@xp{|2eAsE(ZjsU|duG(`-UdWalVdr5 z!9l046e?Z&5cvCeIsXnz$9#g9Fo0PcDxrP$Dl0ga6B>(L>S<%wL5bG;Qw?TLWhYm=_dP&+3npTv?gbJQLk=(yDUSJ-uS{Hjm%sv8jcHMSMW(4XN93GjqA_0ximGEfRAUg4E41IP?rX7um zBsTF`PJ#KjS!+CrrknLCT=&mL%8io;q(KprFQj?Vy!a58I)K-_TmCc9@N6WS!-Hpw z0&4thUr))&_x+Ei^gVXRN*m`f46aeMkEqD$`65y@K0* z5XIEx@c5ytAtQ&wksER)pZv?ba|g6lS3<*5?(uoj#e~SnLXB76>=5$ukCu*G4G12y zTC2tPJ~+F6|#uX-5t`1r&ShVli}Qt^cmU zXN1)!mrI|{7Q9+-I_p$)rM2?j$6j(@ z-5|NgeW}uy$qEgz*;SUS;e`qG%sz~c;Uu**Ljn}X1cA<--p`ruziZ``JCIWPH`)bp z7e#RIZGp8ge*52*&ThOm4d^nTf)5ri*={OaR>KQ&f5Nq~T@-Rgr4PEQH}y{7A4>b? z1-0fk7}L>xMC32R)E&8mjsy>~08uz*Z+Z~|jX_@@3}5cIp6xa6f4?Vp+g{%uG!a6) zIr78r`YC>RMa%gLkS+*MmI}M8JqQdHOl$9P1d*0PD5!>H)4`e`92p(#?_qvQy(O-0 zx2zdCZvqeLo3H=5IZQX5NxViz=1ey74fN#pjd>Dk5*Cvn*_4dS%X7~=qIQPE={-sNMJE5_iAi-j#3#t<`e#r@k3SuJEp@Qy1xwel7BYlBD<{vrA0=A zzcz=FrqR0oYa4>)Se=yQX=<6^XJ2NGhMi*l2<9CLXkUQj$Qiv>KAXF~o2aGqj+Qoj z|LGYlhgR%vEbgW_R~yU-p=M7k`sQi#0ZZXBR0v(8%^kAKVFEwL4Qjk|{&3i{+EdH5 z&V?GX@H?tpu#m(!*<37y9TD4)d{gvqy7)adBW5Y51hZSll0Pl2C`kAt13Y`V0o4Ni z8|-KUEo&$%Kcfy69h_Zdf+0sXYWP5*lx|yrN4XTBWub7=*2m6~KbFEa=hh%(fFewH ze7>;}?sw5ij$bUL>kVsC%nfR0X1|r#9d))CaN7|^_tM~0up9B+I_A-JC3|#uUj!S% za4KndlLVY6sNT{T`DF|j%=0!s%~p*fo#LM1vuLEXkCiebZx86C`r^s%-`cfzKdtyM zjDW#@0R9kdj?mq3)%>X=HdQILF65B&W8HAwd>O}vhu(gFhu^YA_K5ot3`GWf8MM%c zIKj%#_sw!Fq0F+rDqRYxB?w>hr}}G!;8!pv6e0KeRVSU-a24$T3byrf<}Jsu()+?l4PHfd!tbKAwB=swR}Qc*EHKgg$- z$d&V%=oA^=Hi2glXUV@w_=S+xtNs(o9?MUX&#|#EIn2Ci+eS0cBm@3gPA9-IC>N}l zAd|@Jc(l4}SD(Rs(rD?^0ja2+=_tEiZR|z;lKcg|cm4Y<%YG+_EpUESh9B- zUa}{n#^hk%n9r&a+M8IHq`1nOy}-riuQ4{QD3KM7{{2!r9wi<+J&mg=|@Vi7$*45FD`xe^m%JgWr0OxlnjzlYS?)wGvY>Awx*T&JL9l1el zaH@fts*eF4*=dT{+~~r`0K?%^9-WP3@iJ#V&T6OPn87W%I2W8ChE*lZdh9=ftD^4r z?v!=FR}nUqT)f>_9-G({%gx+`L|f<$AK>i2wA^`{vn@C@lh@yzfpQsKxDw6N%F9MH zu{^hAa@3hIXnkijyk1$aMvD?Rd2z)2=noNw2sm4MVjiL$7nI>N3O>(Mh<)}S>;n7m zY^n8N*sJKQi9^&mHsK#A0t84grKG+JTR+MLe&jbfMoj!FLyXzwNXf|n+3Yd##!)|d zD!)#jP>H%Q|GmunrJlTpDqF7m``FA5-5qc~wNo(iqZM`+CS3FSbRR`O9|`i;$)lk_ zqbgzh-*ZhlR#+M8sUxecq)SO68L&UXc~Wh$mSi{$cuaX#0e|D@x%OCcb+|!t)t7S! zwmQ_}YU|?q@=PqVoD3WJid!k*^YUPN`;ydbOA7|GFf}zdH|2L}h3`7gw}^S8uT4Ff zz>tSyiT(NGDScgk?3EMN5-JJQ%&CT07$;BL)r<3=@O@-250`hTH}~Iz^C18X#Aq0% zid&SoGJ^PA{@tng5fO!HYa=MJUf9{)cJpj8{x`0hlJW*M^MzRyzL(!2Qr8no{ehI4 z5tj2zAG_A!|G3Akv8cu@KiooUD1Xc)(mGaW>!~HB;K_bs3z)4gCJ=-eCC8O-W;dzm z4iW=3d2YXs>PWGBtv;N%Q75&%lOy|)PRl*)GC=}rwzYMf^mJTTteN2S>L{hz>m*33 zzft>_%dcmWUVP)MJ(iKZs~RMt{qw#?+ZB2=DA}TP$g1u`;I}Tkf$S5*V#qw6|D2et`8mSx;k-jY6?~ulO@g zs^1!!H_Dpxt?5dco8h1P=De*Le}Xxcj}E#@EpjNoR5c#Xx6ox+nw$OQj%Yj>B&hNm z$>^97Y9dfQI)tPJ2smH&sthND?uXkp-WlKmG_}i78|O&w%%_U5y+3UP;%9#7&Aov) zZ^Q=BN^~Y>Tb5cZ;Mf87H--PrW~}MRG>y$IOv8+JBjVB#c0MU7)*&Fhh5P6S;+&+l zES${XG)WXyqlb-z7&=QE4Y&4+#velNMG`C-*|R09+m);Opr7``1g;^iLQJT%hK9+S zSDrgilkX&8t2LW1qZa)$_r^t^-6`nE-~~jVf4n9QjvC0?(Id6ojKk4q z-ds-#+%d{AQ^C0IFf5Rb;RJ3(S-dv(ICzj9>_hW2M&{KaKc!_4aZ?eMd-K}YFC1|B z`HZ>ku&ZU(O>-YrbL?mV@F1X13oSNmzqtFZ|%YIsN%#DK(H8G3ZhxAPmmCX8;pzn6H2F#o?f_LO)* z^c6!9g20I9aN5KTbIjLUj$la zzZ~5Qd1SlNQPXFctV>F8vcMYp?5G7OcA}Ql*aK_(Cs4$>}=Thg1KrPf0XL-q_(42sV!U+NWuvg_$BQbB|QRO2IMIO3BuU!WeaJQcco~7-Xy1pVLc;k zX~3q^qAeml<9>MrPM<|RY_W5JRHTOd`_zzT6jyJs8OAlX7} zDUS$?G<<*%Fq~;vzE$3}-@4cH`kPJ*wWAu#eg5Z=6xumTAo$tYyLhmxd%f|OJ`L7x zxm*ON+_IcI%b-4Vzo>Jg;F|Xf>UaZi!d@`~ zvgC7C*b1GKaq{!)n%`{(yB*QoDU!_=T_U^I+qAXEuozF2$HygE{^51{@dC(F`k^7A zE)c3N(3kK<_UW7xjAVT&szndL2_?T(S0r=S44!Ne|1fONV-0@$=_lUU~Uq zBb5TpN-$qypT+1vV*)L`V}GpQy)kObWXta4R1UXb5Vvq(S}wXugqX!EUC~Yx z1og#sZ>U5*Z7rg4hu;y?-#}#bO4dU5 zr{~8Y@4J3(falf7eeXl&%b4c5>jd(svtduF4}&mLDDXZ}B&eNca4wHX|G-`lXc+cD zh(>0q6FL6-@t_R-UL?(z@t2(r$7;T%d=QjM1-`ll*-tdxz81yges;%WrCS{4Ctga% zq_JA0@Q$$#sYKe>bo5r956k?s(PVQIn+C@i$s;?51YYaXCKL5H$=rR>V(NImmSs(A_sn~*y?|rM2v;^nX7;vhD@B8 zU_V=yN~mcE^tKo?|1*h~`Ns1~vHAn}+|Sps4UIf!%`0Yhv4cvTI;eh%c_qIYMJ zUNbmPRP|vPn;fpeW>HNu-1RvfIALmj#^Gh?=NDsz)l8;(=38u2$Et2Wp!~(1X2s|z zN}#%_Y6~g+?xG@67~`$0Yw;PrdbTmNBBLi&=>cz?dG#;xy?9X4wWFLLTD>zdb?idr zt02dD5i%Gl$o0V+dN!pL3=X+y5i^!SmPYJES z(q5CJDT}Z0LszlZt8pq4wAD1jUjJQyosGan(y~-c4Hwsm7!`Cq6!h|o;dI@qHFa7m zGYdl^La9E#$~L7!mJGd1a^o?F=iIU#Hi5-1b6Ql+>vo5cqCl0O&9_4;v8JnS;a&?{ zp`8rN5pkOA5`aO?8A3^Ye|%c1ihrAxR+CYznsd5U(%TIy=aW={Y;#B=y7TbC-;%E? z*m+K!9(`f{h^Wwi%+O!*0>XsmcUGj#kD!)?-A*fZ-s!f&A8x%Z6MMzATG3X zCDI8J^MIjO)>}(WUr{mwi8nBL$D$_8C&H%xr3D^Q=`5=Cp^M-jtgn2QkZDWzKhCVM zw$30L#R(iMt}cb?WsE&N`GEJxuUi(Q?NG$-oJOlU2M|?L2A7VCLc=2+qb6bpS9?S% z+#V|ORK=VXjQR!R<|3}O6^~Z<^(BOBp2VikjZ`c!qpZc#aHAXgd!-RhS z$n`gbeOr;k@=qtO3KFsj6eX!G$|(`^$k+c*XlgGqL^Ny0>hoeA#l89hNS4S-bim=2 z$cW!jzxAuE4$%$~Pn7OB%GBDorMem<xP(iVrW6uGe* z9 zuHSks1j4C3gvi=ce2nr>#fvwfB7$$KrR}8sVw@}j@|vq^c#8&+o;EZv=2ojz#N^t%l*v(Y>3ri0k>k{F^;;L#J7iyx{yLvr_Qr@*oe`iKL0Eg&Gf3`L@ zbac^+1vL*3ZlE1a1*!Tqnq@iUhtc=bc!6wuP#K+7CUWd4-`F6rzu^YWJG|*b>M9$q?F6XE`8+ptnZTa2foPvyD5y16dA%MqbCI9k^^SQylm0(hVbUv`a_KZ5 zlzj!#bmWSDqt=cIB@Sel7MCCKhCFYgH(ZxzoP-otgio|V{NHH-R$m=H`~KBF`7BuHo-vLg{^F|JOdd{N&u)!l;GS8+TM2VPoqk$Em-JSWe-80_hUzS2T*Pn}q4U zyGKoz1z5|oq2u2yRmUK=8v(G`kAqjmr~SGmqMN0kh7xQEQRv@sw^Ir5zDWXbdB=BV zu<~Vo3K%+%Sp22{_#SHP{CxMO@CrGWPKA98Ck5lzn*WIzW31N`V5hwBJjn%@zns{H z$?$-;GJEU(E>FgVCc~3d$XF!DUvYJ0hbug9&}z=Lzk`&sSxE2s2w!dVSr_|jPYRAl zolHN*tOe`_EePMhzh%j8?yXXS$Id&yQws@E{`lW=SCg8$7q6{MSF0il4(n zYo%E=)>18Fyy@A`z*J@k}B~6fTq2i#y9W24jxEo_oTVgDS*o_fhm*<9I|TT zbP%usN+RNz6J>%NF@S_^|NzvJ@$)oi#0V$Nc8R}j0{>}O_j0f0S%M1 z&mx5ZG795~5p9Q13$;Tb+_HwEO*)&TOekpGLNHRoHM%;i^TJ@VF*m`}h8X+(KYv?X zst5*w?gPyVb>;Lyv_L2!{$GbSeO)5Db*Kb1%CfouCM$q`j1=iCrv)>AazLB^5rbbcWuI0v5|M_H3UVDpm6Way}RV z^ezHlG#}f8=%TEWUre`a=+xMQPi$=<_DeriM1f@9U|V#eEgIgu^J#;$BE87}+Tk=H z+$f>RG|?ypbl#iZVQxIfu=wqRATW8%#H(wafcAj<1jp%#B%!v!be6MgY2WX4RPEKU&}gEQN(f+0n;R#lcP8N&n>Fu-*1=@we5NH)q2*Lh z)7PJ26COv^sLMfI>J4482zH!X@r3cZt1EQT^^wQ`F>tZa^m21;uLrV6unxeV#!o)E zyHq+Q=8yfNVKQBxr*!yplp%X&NZ1DyV~Z+Ajt4#7pRL$-HHF0#Q+JCuk5Dvigrz~o}Y;;`t`7d9IKw>F61k9J9VqC(xX7N{AiKKe;#0smk_8` zd}c)~!&4@(QzIp+OJsquZdC>@RsAgv!@>fjvqri_Tc{B4;{kG{j!EN2?9s%srw+m* z{Kt#c*9mMJrJy#{>mouR!RW`je!dRZn#~)ECwp+bd7mSE$fk?^gm}zm4_` z40b_AjL}0Qpym9+i0yt%#+!eSu`zZINW}?qvhDoI3p`a^{uljCvI8MJedx^g7`_Wx zSC^`>NhligY-0T`g;xl)XeHkyPA-Y5+~?W1_+CcfA@Iw2>~_C$$PSlp?}XjUlr{!W zWfg-3;F{}ymh)v-cfIA)fMN_Sm=tAHu!pU8-(J(E0s5apG~wUj7*d+1M^f+!DgA|b zl#$S@Z9y^d$vZ5`0weNn`HdJo?C}?`d?ABxFBK;y2eZ$zIWnR!KcU63@kx}>hd24h z*BMcGPNii%pYY+Ty)p*9+kHRv;u8Ry;Fc%#>wypKTg);D_@4C2|Bu|)3t+R5WkL<% zS@#$_Jg1zFwjJ|i0)BEJqd<5$i@o^`>%I6cHDuuf33y){;et!$!w(KL*CnEfpB@;` z*2dzM=xW1+;!OWv13^Guk_p_L0KvN12m-!*Lfr_^cCc>4IPln;Cb3z1?(&qar2?Kd(QNvOfKN<{}ZCK ztx;t(I^GHStcC5O8Dd98$8uTUS_T;W%2H*y$8ry-`Tm{jFt6a(%o+X~eGR288;P)& z-$}o8sv6ncA#Mz_{$v$5vU>8b$?D1G(LdiOZGEN)yx6>BVMk4vRS z(b6qX@4FKN5eitP7B23)t3#VR19{$%v@P1DdIq%C(8fP-15Sx!Euc_ zAs~IfuXGrN|G6FJc3+U>h1=xtlEP=R6j1*MHoZ(-BN9gv^tQ{(fDL8Tq3_(A1MkC6 z6)1y-kp;urMm!>t_WkT(!6y6Z*%wQGz`huHfu~Z8XFvI0D{t!ve0aH@_aZAIw6ZzC}&&PIyEx54Hux?@hYWTHgkUsW-ksrING;cup@Z zPD<0tVm)xMm6c9Sed$0N8U&e!hDP{Z5D2*)O(}BOMmctB_W1IQZBML*nKkHMQ0v=| z=LPx!HjWht?6O^Ls@%8k`2?d%r66R4Uf0`HvY!0+l7Lb*ZiTQL(TmjVp}9$9^5znP z%k_2EV;9mnK0Rq_U;y5~ZfZVOV&w3SsJh>uT? z$}xUr=iuTZB6E(Rq!MWZy$B~K0bkKJvAmrBx)qn{j8)hd^>EhIZ$Bjg=;a#}ecyV9 zSFWsa$3FY*i=~A9mhGcPgc5L>O^+IS{wH=4tSC?{D^;-U*_gIsC+@|RW5{qL64ZYO z_JBevo8IghwuQ~!UPve;C@Lx;VI_RNv$oCr!|Leo-=m`k2QWUKUhjvGvun&wgKAcw zPYk=L9fZfZ<$s}5JeHbwCu1{%cWJQC=6o;2um12g4Xr$-;DY&Xq&n<8|Cik|PIdJn z3C>qVgxlz3cEj|vLd^8(!zR4uEwF!1^$Qlt z@5z&5KxiL=qWby@R<=#=9U*j|Xo{V8f?V9-T`9WGA!78<<6yRMsb(oJ4&Yo5klTYj zY|uCzd(CLy7NqQd!E6|#aUX3dRo&D?ZG>7TS)r+cI@oxivlx_wDd&|VX}5cjPRO2$ zSn!k?lTVUm@l9`i&yW?~%p_B^KWkS4M^uW4x()twsO~Hq)nGruU+Gn1Z5E#q^NQP| z+g-}f%DpdT!&&=aF@!EVJE7?PoE?K@B>NjpZ0Z=7W($qJKA9j96HP6mvy*Sx&^gBD z%HPKUz<+QQ|NlLPi?Ey zos7J4%^}M*u2ppR#1F_8jd^MW+G*Zd1l*0$SpMzD+)&AG7Bi?n98yi1mc}hAMjjIM z_QC9|xTFO2U9YcQS;?jIC9BKO)^C|j3RX5E#U&+qO?^71THbiuj@mY{Hn9_vfJ^n1 z{aT2t>ScPBLEJ!@o`>pcIpL+Fb#1#cCx4DH30!D38-t=sj2B{B53=v5#L}h+ z+eYV8>N+kE9sysG?x>nUL!XjEZ%ZrleaQ}*{}?-VR=gHnp#By-l0uX>!1JbcC%|)v zagm7WL(tet&z&xsb%b8O(=XMmJ8$U=fCSg)%RLdAf&{+^LaVtUv2io-8{>dA%he5O zxKu}31veqw>p>E#ySri*OH;W5+xb1(lgkLL_E7?Ubb-Dy+rjW={28V-to7g2U+&xU zUd&_><;|QK+)?|17sbz|_m4=_TqH-0F`>gA??18I-D>K$Jr*J0)DPT%=xeavPgsv) zXkwty559autN${fVZ;eSg}Que=9Vw?O~9`3?d1OS#LUuWxm;)%DTmzPS)!nv_JZ$Z zr6Y_l%x9XAsC|o*cWU(=&LJ0&>Ik^pQFP^cYVLovd!Rr@iNkz;ub44m5f0U3re}@iu4ySf?e8Ry{rQD@vTSJub@>cc6P0s zKOg@d+qMqld);`kgVCJt;0F(uw838RLp#+Z+)P#kC4b%3 zKHvs(dc9t}vIxc~-U>$l{A{`t#iXto3iI&i;&k9)Cz=+Nm}q=LUFz=*r{1tj;+qwa z)DaP9C2)-i)=+Y^VZrjEr~4AjADU=Qr7K$&)F?IG#&?Re^hp{KAKj|jS1s&~{tw(p zu?ocs3SWa6Ix5MdqSK5U+>8=dC3$r$i?b0@~T+N*2~>n9oQv!<@D7p zCK7|Wnd?o7gY~m!QkRi1pd!Amu{S=EVfm_-k^~2VNSjr$!OW;B1mfgmDx&?_hnz&J zF>bREj6VrtzB6J8xQFsB=+ry9t7w${TGCbd<%vzxNu{kgBcMYYE9fbJWrugMocZ{^ zW)j@Gmgy?%JZoIKDaetLDOhs(_^-kPg_`*$_m@>}TsSFd;I|BXk8bhr-!2NRxyfT= zSalVgy(6@0jA1b5%V)W}JVmHyZz*9G>R1!gG-5s)$5k?%U|2yET3a`@b|4KgcuSWT zh)myrgoEzf;a^6Z&>e?;$}p`*%IV0sM1rW;6^b9xn$++(Td87wFRZT?0>~DN13u-} zHa8Zv?2+_jcctEO{#!h=_7_?V20c$aroYjo3k4!+at;dt~3<_S>i z%UU1sy1*lVndX8A%&5#MHANq*cX)MT`_b+dueMD;X-4L|eR6euv)x}TwGJT8fk67@ zPp^RL3%b2MIgf+ocDLoB2z60ntks`@zumVNnA_E-_pae52@MSm^V#q~XSa0v2wuT% zk?N`^5*!UaM;khCz1cfMimD`D)X|9rzqw0#LzKf4nw9eE{Xh~EA0K3E)pKbyz1Z{& zE?oX)FyJt^?7y}y5$(cfq_Nf+&*r-Y=6@$pYEawGbqGIHC{r*tT=ztcmJdXSkkcmX z`dHz?zp|k9w)^&G>2@dJ=5Jg;(~^n3n8@89);>*)nVA%LNJM`HUu{Q1(6k zz2Qc$I&OHJ^WnpXKn(p|)_vaS*ZF9|9Qx|m%m+GD;AKe9E(XDmE}Bldn|_<)S%N>m z;>LyBJW9(-#<`!Ev%Yi1xmZmnmppF2zq8}$iHfKRZVLkKP~1DH4Nh*L<$4hBvl_li zyI>Sc50=@_-0OIQF+Dx~YpcHkEgrCEW)O@%!-&Qq-jL1T z1>N1c8~zMN3XkD|(m&N}`j{=Qgymo4S{xw)gm&@fEYtB7si@;#lH-SrFe@Y9DJCO+5Nf(X#zY5ditiT06>4;T<| zcN(stb(DhZ23w?Pn)5u0$WX2uk9%#+%_1j1q8n^b_uFc*pHRJ;5?=BwE5wz&z4`t3 zFuWt`^7q)NbDgd{b)#YaA4S`V90jEeX@|ztu0$s9wyggL-$&wt>7f>m3MpHQ>6lMlZ)Mg>;FOIol)>!;(wM~rrmUFk2R--#{w?Ps4=W?4E;52JnDZh zUYeU0tlG+mn2S0)A7;euNk~QPEZh4=Ef5_gA`n`VX?E_H*jIq&(hU1j3y6Xo559qU-+G6ZW}zYN>7dE9*mu*2WfN2L z=tC0>Mb*RC^xZW19uZP)BF;2g?;?h#Mb%afvldK7Giaat5u=JJ!AIFr?(R|qQ+nKU zZtv_8N*7g+a4(gs-839y_?+!?v5_^C>A0RqzRDE_yiuPWAMb<_&$-CIenFDeadp_A zqbWSwsYrwN=b&W3!Zu_-u5Jv0vK*sOx~ji*cARxr44}K>3Uhb7V>(=D@p%(g)Xc0r>iCAG zyDa!XaLg_c`BR;eH4u|}m^hyA^M%gD!~_VpCL^*QdlMxUE~2{a1Cr zRxIS=JdehPSSIU{Msi+8_a}ZNE_?7x%gE4-WU65C*Vpjej^LYKd3;j3yF2`I`CcF{cjBnMa2DuO@!W2hv5rQe`W3w zBs2E``kr)0+2kJVdas-9Z#~McYdr-dEX-f8crD?8IdT5*f$b^h19wN6XUu_b z*My+&Z9a2tS~>70*E!FW2gprQNKVN~GvZk?sFTMR$l~&TZIuR=tElds!*9k+v<4_i zbVU{h>9pBIsaz-6Vyj(f(-!xYopcQsPl!N4`(A3odDEvOLT<>)`;SXzTXX@ z!FzZYd6KNoJS%>K38;|7{{=48JtG$OV4QQUx4oEzSCcYtX=czQFRi6q04rxGt~{bNLE|NM{PO8E2btTpsp|2UVRMWjXCC1ye(_}HFr2FeD;Qrtg~ z^*MpvMVs~i{nelt(lqrW^XmmJW~<0Khbbtk%|gg!Iv9hp{=8*dKnZrfOc6HKmtU6( z6gZeJCn2SDmUD>yiE0kCz*Cob;>EM9QvbQOVaC6>k|~p73mhEZ^~8*A;i#cd3meCH zE?RI=Zoi1r|ARj|&Ie**m2=UQ&lj(L)(FNGeIdxY1Nw3o6rcmo*{)-xE(;A-TYNDT zE*cv=OZv9_l$St3#`jL(<-z?ZCZ`?BiT1KKROD?Z>!V#;A>yF1r$Iqdx3~c@ZYA$o zr`nT6|N5VerC&SCYAz@Hl1{q2Wg92fo$!y4d5}r7YxVy{*Lhnm^$E`6ck1b$XQea; z?=bO2owU>{^!eh8#Rq_tl!vQ5s=zhYcHtA6w|?^Hz|4Vwzas2_fE{loz27bc5tXC> z(mo%3NU5*4n2jo8R4D;M6%ayi49R%ih?R?0|Fpb|Td%4ra$KgVB*tpojd>jAxKdYP zi_fcTjqPsu_U(l4L)y)GTIkAGpl zEr^!bE`>wN&5AxfBq=R>=&$8Rh~gUWH*9}I$dY?K6hTVrsvGl5SI}))#~u(yzk0>6 z3_GdTd|2Z9#ADU|Geq@OcM!2QOc54Xnp&)g^H#iHMbdKkfkLl>5X^1mauuPWy#O#` zDH3OGJ$4nm$KO)$kotq}5vvunX7=EwBLXqvdjsmF<^eXk!A%P)^Y3+shm#O#qW*_{ zKW+}wZneEH4>!^VAnK<^sDM)`{l(I6+e+({rL^r;VlUeu3&xZ}vo9~=@n;c8m(}2` z`{aFTchU3=`3r@v39T(%v{C`p7ZWwSNtT0keoyBp($sF)AhK8tB*iQ7?IW~&=#-pl zRKv@!=r=916pPI85ZDUt7$WJz*VY~~Dk>vO7R4XjLYglT>3wWV5D03&_Jb2|Ih`XP z0ja6o?B=K=ZczB=zeodR(#4y@0_T8>f!5FPBfH8;r~O@}sehTA?6ZwAG9##YbKIUx;ItZP^ z7U_OvStQOR5N)#{%#7Wl_uTy~hZtHF7PcWGkIVS}{X5>1qkR07 zY&q35*eDCxhDqc1xCcG|2XbwK<6sbTG>i8>gO9M{ocQsP_02HD9^3L%P zyku(b^5>6_spbOK+j^f!k@Rx~{SE2c`LgwPkEoE7qd{-#t-RE!)Q~Op>c?4DbURi2 z=vRShB#Y+7#ZCV1Qp)v&6EhKh>k}L9+xo(Z!wVG9>Fm?6SGhFz_}(5%MCpoI6U{2~ z--h26`;6yqSbw|nz|ITB-sQ_maz6Wr&l1gIS*B@S{F>n)H+|6a_rotIr*T+5edeMS z(PGP9^$hJTj;-}yciz*RErVO)z{Xex)xutL>_|f;Nr2JA~j42~G&E-MG8EHSW^E2@+uV{{LYf=VjjR z>UG!cI$Ec8oxKZ&acybWsUQCH-H;Mo;#j_o$kcAV}2U(wqUIrxf^F+PsfbPW08ysWWQ$}Pyj4ZXfayj)eI;^e&eUOpsj%G(RX~~q#UQ< z^=j?zL@RaB_?~aO`rG5&eZ)ox`VN89cP|q1MTj%Upx6cFfI4m)mLCIR+dM`Q!!S%i z5FUVo!#u><)%E*Q=P$7GnPbRQoV7eV+qS+FC|uN2Ah1b>*OA7UQ+~5XS_tMtut&vZ za-%LvZYLsB6d9Ia0y{h)k!n{1vu8blr7HLP>-7mHT`S_wi5b%_Qlp^lN2z?~ zh~w>r3LUl0(=|`KM#Ji$QqtNuwf=XUfojftAR#S(#>@+BqVy-jG$F&<6|oEXKx`oK`F#uy_$`Bb7;d*dj>39Z@P zlLEF!!*b+ZB)n+s=k8KX2D|SExA9PZ(QW!07ud`BX*_p){98-Pn)}C(3rPA(9cXRDre%W* zpHM*#w-xp~wj34bo&M$a2zK+AQJV|eyJDUPUys$Rq4xtv#?{lJqQwH8lphowls7v= z$w0qChN097=stIcl-}uTWLiTRR81CrnK+BPW_}F_*M|%T>}_L|T;XxvPpnwUL`Uy7 z<{wyiwRd*CDoVZ_W3L#ts>y`TeAE%l>oR-WjSub&a&{s`zz`i(4n8O?EToB%?1k&) zaeFlB$D9$kQbiS<0WHw!46RRV@F$pR&qsj~9k0x@x`YWJKw7Os50P;dAeOPw zW58FNgDQ^Md^8rqV`5$r0fnlgpVP&+2eAZD#hz&-AiHX2j_ zH-Dwu{0k9l31Yx`0i3CQWK%Hpc8eSiA7 zIh?mb{whDQxtMmp^2|g*HV`&zg2gCM#IX<=litJY-BN7WR>v%aJ|jbb|GO1Qd^t4r?Z_`=;K#jAr$$z(Cn1rnR03GsKtFM5 z)yPQSo~wm0O_4%C5?g)2MYUQ?b90HZ2XipqWWg=z3W*lE9**;{_(zj$878qq1?$Rk zpU(|vAYzXtBf{O}dVhwvKXnL0t`HcLi#s-Oj|*?pSlPn?gzk7XJYM2(c{Qw~vs?yj zW;yhheD(1|WBgj!gYPqSqMAA4^)Yj}MqM*d>;+NGiybHLm$c)6*z=0!`k*_!`NCBg_e?s{uua9yUSg0$q_P&f}@lYb;?h zL>L^%WDaD}7Jn4lykS8sPa{3L)DPp!NGLA!G6mrLQ5Zp0d#I*k=!vG}i*6ruemqlQ z*l6|lfIUdZz_^bUeGrE1VWHtk6g?S`H=mxNfN0?8=Fo@`Y zHXgfUWkbk8?WRZRlI~)kJWAFYq(<;T3KD=`X&Uw1e#hs6c6jHPELeG`V(safe(MWk z(VKp7rJVB*MO_`<1&32>O=-ptvlHrO;S)fMgMlC^Dj-#D8)6OV$?n5^d8dupviz=e zCI%4ycsSQ70=^#`Mb=h&1Snv0R8(SGc-E?L@-jjlIVvTECA+!f!33EZgeT`{|AYS? z?{7}JdMfQA>bPmk0)&gz+iC|Vd1-%SuyS?Unf&}lX4w#D?u+O63;{xD*58i3OTKIz zv2elq=6;T^0>A(h4H#t$mBZFq0Xp!v>Xs}LLS9#M^7t)hU|t|AF=;J_nAkTmoS-15 z?J5NFe$1Zt>=z4Q=^d{85Gjw@U;LBSi5R{SeN&b`H1@=5H5twsCo_e`^ktN7+Y@^59;VhYR_6Z1akb3 znf0(3wM0;RSS}m0m^f9}{j)3jnP%RKZ2@tLfra(k<7R9wSzW&bq4gQX=8V3+wo0(U z<4%q=+?5P?bDglbjeVbop>E$I^adAY;XYACQ=PDsbHcr^b6!MD6KS1sL#;}h3 z4sAt;o_7wu*-(G+w!+gef29eQvb&%bpBtBXUsD*Xc|54JXi)TBLPZWerKS0!`+M*^ z_o}F5ihX$)Ve|l9-(@(_Wpgz&S5JdL+?YIo3{;xlWKDaWAq(<)%q+Y5y==KJH0ZN(kllygfiPN)WI4%IL&q&*?s?OS$(^w%taO<() za=sYwc)#kti}wLU?A0#f}g6LVR!31+~Kl#ZePS3Yx zJM?@E9o&oXUk3Yp`EqHOozts@8gTXCM;{hQ$<1QotF|Up1{_YJRwBLcGb3{#Mngyv zxGar~jMiM}^dtaQ_HM&C6)?_skS(%1+LKg};Zp*#h%L{GIS^a$w6^B7^U7ywGd3y^ zFbF%sTq+{BZHGB;0{^>f&>50@|0H{zo^9iqdOuwRu21j{+_cpWa}%oj5KGu}h$AR? zKx7`_m9qW$Kg{{_;ClSF#<;2!`_ZL@6WG+;s5fC#e}op18mfvSqu7)1-K_oogews< z@tX!hc<|f5UP%m9{&iMTUSsK=Uq z*-TW&>RBCscFCR^B&CWEDx^ER<60@wZSM=?yLW0}t)pk(ZC3;c$)zZNSJc98$06Hh z{2Yp8zy%gWCBTQExE$#HXeI90SO?egnPc0c`Ox;7Syi*4|wjpcIc^wOiBSV`-L%%1cY(s4)2%3_l~{U=4Uy% z5&ccQ-Eq+FIX;XzOmSc7dq&ft2Y&8~8x*XO3V3?pF;9`eG4{m(++nA_r!IOe3U*ew zf*yl|?x%kS-k(K%88+`XU0)5A-W5w6Ys#m21chRJpa~&+P$f_*FwJsiYbGKv;$i+3 zK2y+e{)h)HnKsgP+KtMf*X_x`-XcGVJwLlRE2iq!42-pfycGW~Ma-2;Dt(oJ0Pxy{ z&zS+=4{fz62N#XNgyYMaxx;L%Sa^!VXudmn?CcV)P-<$O0ghsSwM<((bzQBLm?mc7KPxQeje7X9!!__4FgeIqCkXZM% zPf$R>_1J#;leVL4;EQJND^ADLQtTI)xwre(qizYW^OciOzIU4L;e^o|r-YEtQ{Q7F zJ}5MlV@Kck>+&2DPe_8$biYKtedxr z8W;+T&yz5Ku{N6!)ZOs8Ic)(Qwwkw9_v!Tdg0youi_(Qv6>^R8STbY0uYSLZ#^$$v z_K;mwdCZeU+7PTXJ_m2XxIkt#Cr-K=<=J#`O4K^_}4A*n?I}Wiptb} zw+~mR4y+FFUkyX0gZB~E@}OBc>8@<7+Q3G_)jCeZ0c8h${Wr+FsW?)93GgrTjA@MP z-X&GsLPsgXP&CQRB{R)V;^cA6TgpgW`*k)C-A*OP(ys}J&=CY%N*M;Ld+hS<^`ei6{UN&7ucA3FJx2EtdpEl}Oa&$rQUZw}eyY+ftXjcG0^DOvcw#wghVK5sobFLBc< zFoUu4OmQ0N3XCNqDYJM#MnDcW|GqVPx9~XUnNVt~&Lyb~oUpEH!F##*r&}bNec-nB z9H(_R2p`pJNHG2y>7jFyV}Ws>_8@Bsa?swz6UDz&h`_^fWAg=aAXv*PF=SN9G!=Ey zljO?LR{XO5IyR(rEn~lMiTBWOlwBX1k(py+1-`p+u@d`nmB)KC{+4$m#^;68xSh#( zsSY39-U|VZl8g0hWJNOOSv>YgbeXTV@*_YvJ?P-Ky>4t#Kxz?WmxPVfkg#&CGLCDI zVC@TAEBq8^p`Akto}7j;W1Foz)5^MJ*&z&|V*N`CV`wS?QM~-9otqA`NWgwRUC-)z zbnm$q>0(Y^S$}0e^zld-@dL+FC9hucbK;`V=CId}0 zwEs27`Lo)DJC{unE#_?K1hW8UVBV7E?cF5V@;y{T7Ib@c9~HIXg~SFDhTNChTyL?v zGYctT{2>f?MK_rZS=TtOF;@}w*_(W62MxcH|o`i6Fnzazn1~QQ$S;)gXVOX39 ze(A1!hNuR*33B-XN}6FN^ER`=0jYgk|K0K(2|`mI;5ccW>J5S_ALYlZ2Bi1wy(neN)@IH;?e!Hqc10YWIo*(tq(9QXncU5#(lS^=zzMgb7jxVRyJ{=cK;9_#WmhK*500za%c5tDU-~4%Fzw^O} zd#;?=buFAYh9!iM;%TN0@x?Mi<0;JZz4!ijzw#&dOJrRGlv{Fv0MHFCm5-a7H2g{{Kr_WVkc6tul4 z0_p!=`n4qhm=#KI3QF#uaUlndymC3k#JY*eQ~ke3el`xQw*vL-5AE^Z!n{99a?sEy zS7xB$KV@%jYi=en2R3cmXQ(V-*$EX2oexo_}>quZR-d920ZN44bLmG;W%qcjf_8u zn*&9*%UTJ5^G%y1Ge9t`HtBLmyxh9$92iD0VO(CRcXOK}Z=u(dlz)iBNgfqIm4^VK zL=tP#DLj0a7PEN?l0=V3VZCH7fKKI`Y}+MC^0$JJkW5L3$pNHRCge#9C}H4Ue;F_h z2U@hNiNdF_buuQ&R!K2(3+D3q(7ECd9h0^JA$q5Ei2I6g|LbwFBo@S!&x*Gt9`as3 z^78ZmB7pybKisaThVF;T-VvP^?1bb1g zCfA1l02gEjN+*OOOia-e`biqx-26p~V^{axiGSMEudU$@My*TNp6vxG;^6bLb+GwjLaCTXK84JRVycg3&Yyt(RV6=}nmkH%PG93~V4>cy^wu%BU> zzL~7V;X&~5?lXSYR5luMG^Gw>rhhImmQF#d6Y80Cak2Z=tfNApZdA$2R#{oa$dsvo zI(IOJ=)E@pKaw!nJ4Wq1Py{3f+2AvPomb)hc%3ecx)qPgAwks(fiek)0xT#E1QXRQ zU0sD!4wfBi>Yg?S!TO8b-pHo(720N0WZl)YO3aT+yt&($nkv@t(J_KeU}o|mXA*f# zfL2E!Omi+zeo?-LQoMx;nxN?Z-)!}%B~dZJo#$&ZvQxr~n$1DBL;J;_V#1t1XJ5*h zhTODkx4OiE8wWBrR3)EbrL7%jMo@bgaoGQN`i7JJ-q6SwL7bGKQg5$0Dq&SibFpip z+5Xz$Ed$P{@Vm4a0Z87s+B9!Wh1~hBCNpXNl%Oco1AVn+birtV4#iDzey(Ngz(7A{`LWNIHp z;p)T#AJPhkzuFGDY`NKky9iU5FBS0q4bl*U>IgW%(wyS4eu(jdbIX~j`M--u93wjm z>+1`9-?lebi1%s{H>da)marDr*x1-KbuqIK7^nLS6jtmDFja(^RtM6Z!YJ$lDTj2nm<@IHOtvQzHqII(yI&^d|E^SFD`zU01vkXnhI3cR^P2Vvauxw z8}9LqPGVDTVqXb}OGx42Ay!C%3#0hS-svlQ`j-6f^W?tkQ;>+(S9l0@rmZzRTSe2b zt?VDKmO?L&V@~M(YUQ+4IJfSX>I#u7%k)M1%xB7Pn@4v*>vNHu5!!{4dF69za4g54 zG2xHw4a}y;_B%U&(QcZk%?deruBto!Y}VG8cdpsb9FnMruC=#urW2gX#jf@B$pl(< zsc}woIb48a7FIVl?gl|yl*)4iBoS9vS6uOfv^>97Oxe?N(X1Q7%8F~p_YviP2DW(Y z*GHml;y(EV1dzVuDUkj&SK<3d=S|PV#Prp+?CbXMElP(A(k3wk_Z$a$fAsDr-}hHQ z<7!kid=R?45xa+mzzm#c_SPmh8aN+O)m=wTU60=bC8)6hyf3Gh{)sc0dq(A>K+xQZ zPq5EGZsQlSw&Uv7!D?D<)IWWKfC3)|2;LSe`^5P82Yd88<4?OLHktnZHRdnB*OSTx ziPuC$+Cl`X^-B)u@kZls?#KZ|oL*jDX#|~b0PUih7e1qae}|J-c>{`SZiO9EoT(HX zLaguv_yimjzNnBgD#;(i&h~3bwqMJ?&U~itaS3os@mD<#4NoY>+-qS6l*5OHOdkH_ zW3@rLR7h=Yd~xwGctDlH8=l3xtht$^J#o%F%JJfO-|p<3`?x8V7PrrtZ#xQ~3&H=xF#17A?)e>D_WKxdM3c2=y<_D(w6=Z> z36rAaV%+9FHcqxFh_%n7)i=Z-0$22q=EeMm`fn;JaCc z$BkROpQY(uK65j>xbf=@dc)yWR^}ZmrGFQjtqL&-phceF>8FK0U)VR7QizAFA8=N8 zbv7cCW9WH`a0}wTv*0_F4Az!>5nE2AU%d+PrTAe0DEv4J0RI82hocbShp~Os z1Ce@fO&ovw5GaISmn>EHFVCL#$le%A^qG8I((6&%=quCA(t4@pLW?Un^z7tTBt#vb z3m>)jEN(0eY}V>_u#3nomERi@_p$I_7P|!O!5o6pehhC9W)LHN6b4`G2Y;z#2* znzR`c4T^O5jQ(d2t;w83}e2+Dt=oJD1GA@V864*z5nAc%7XUNi#kBmln|;QL!3} zw3AW0p@kLM2VDt%+ah`_QZ=Js&b;@?u=hl=cF%v;%Ob(>lSr4@T{u-;U+27!0Ji%S zE`;cMoE!GmPv1oDieJcl$;o3^&KU36!tWusd!I|B)MR9`Ew?RaEJHd{1u?xZ2goE+$0vMsR{XTLo&M*90!;mW|dMB;(`RNNux>I)W(WcSeFQa`}1L{pN>wKl?7DJZcSKVC3^_k zAFm3W-}S1Ikr%7dn;4%MK?r>eLbg$3;srF=4AHK3RM{=OS!n-%%&0m-PSKIgP3bLLMKA@$lJ zK>~Kgf4nlK2Aax>@SyjoW0XPLm)}svED&eZhfge>5_7B_Kbfs+19*EVA#4&mfo!o>L(Eh04%9-r_(i=2OTYY+g$tnFz z2^u$pnwi=7IR|y2?3Bz0`n~Ezkjx#;NIFwyDuT*zqIN)xuY?Szm_7_XIwiDjE@r;ycKYsnX^Pfvc zCF~wl`h?e$@aKzopp-Szr0;w+UiU zteS5`0lmJy#`gBsc4z0bA%O#LDK3XfZNIHIfCJMs{7p^#f+0Mww&Z;1hUB|X| z{4@*;Y&-hDxu9JE6*!po$7}6x=x8mQn?K&9eQyKWVdt1|Y?#>*R^*J~c^g|=;)!PI zEdEmcs$+Y>hg658vV6t@qt4>QD8nA!x2Z9wM8>W+W!h3nzV6IoO9o8C3QFA2B?Qv7+yIgJw2PwudEV#J^H1;a38PvM7{GT{_NCLtyPoyzz2P@)|NR4l4|v*XV`(1fh#f4| zOXB_<`ia9bp8!!;e3xkyj`rGuEcAGKkH}2Fq0Pmxjv^0cgxgVn##4$!FNq>^FVtqg z+5hOO>cl*+Vk&t*u|W}2&;CH=?@THvJ!hc8{)bcn||(Q+HEU0=`9NXNlCk6+6BK9FuKB*SeOqBq##HTupEVqiDTwRtLOLKmOGFI{l;i z^-}EsRjJJ1Tw~?kHz@lO%-Q!9|IJu;I_TCE%&C^R5j_yV7Tr9xb4wEbXjAp; zcir>LcDURn7RT$HYqRYq@XUON7$D62_U%01S!eJI@Xhs(!hk=&xYEe zcWBx%x42$O}MP*?C( z@O!E!&Ce0-0t@+G&lF-aT|~(gQV+~?7!}9of(Nn6*8b&-dS82AN9ea#mp0!8gv(gg zuR0|_z~H8bhbFapPe|J|qhRhNCdZ`Bb)Z{xe^JsnS^35Eq}fv+s`Se5Sv!X&&3@2Sy%cmPr5+e{wAYdFOO^C0-wjF~0lU)}}^pN^ia=l7Y-wnMp*(7|y$d zIvZ7wqsq#nDLyjQ8?Nufd#0nQy!v&h`rgunkZDy%s#k7nX)CP0YNO02Td$^%9}Ook z0GauC%Of!@Yl}7MN)IcXh;t9EI2Mns0X@!pS1RnKG(cVInTw0B#yUt&Hi&iS0vM-W zddk|{;;YoAEO}psc}vVZzLrPR&#f{L;3$=j)o_k1t-!$|BWNjmd05rmX*;K<6IH~g z#T9MrKZ(ADtpDXpc~9g1-S>C|HdJ(X*Vb}z2b?i}(AX+)78bhhMIIgPTOa2e9vkQ5 zl^9bxS{Y=bac5%}^RTat+lZ2QhGRHoI5 z7#-oMtOwh4a`R=ScMorHcsoJJ8J`&GFtXY) zkvj^4Jt?t?4ZQpmL}JJi`l(e~n&i;HdM7NTU9gTJ;;6RQb0!8yS4+P3bV$Z2_fJb( zj||R91(+|d@s$R(Pg!j|+g^bdmnVI03vpeXfJ&V#H+sOv(;p>cH0u-+)8}g^%3ZI^ z{P&m{P4PlaV>7?Qov9yG!R;EsoWDJF7g-{_UyV@Gg$qHwdRWd?Ms@_ARTu(|?X!^4d#F*p%U9 ztV~RXJ*k{&)x<5}9Mr{|c}Yl6AaD>kl|C)xFvNTOZ*aN5FCv;`=`pztaoqQF^l~~j z3>CcKY@RI<@xt0lKGMp%MX9G_OknO4Y)dF?NHumuJ(kklqsu?n?e?$VSbX##8Txd| zBM#Qq%j+)ifYFOGp834L`ubt*L6N6Ouy+*sRFa{0 z(Ca`Z^MI%EagZX~z?a6iD|AkSW#-yi7YoC1Y{UShK=-_Q`+;oZ`T^gQIm_F^0Exu% zrO?T`JPAxYfmQjeo)^3JOmL|ZCeoY~G8{Evb8YPhC;1z-LxNw?*Iz_pwDc}QpH6O` zF@$0e@S?zvEacZVs;DeO+LwhyEI+Z)dvNS9{kGMyEeSUelph8AoLN=Yx1|a$9KL>4 zR74KXCE^{D#FBUpdVH*G>OI31c)%9{KSKuw2AunR$d9Uw%u$J$$UFFqO~puZ#Ili5 z$uFZ`s!G)%Ry#{iC8G{54t=R*lapU5A?^p1Fn)2I!JbC6OKXz$P79$rbqnEDp;UUz zN##*dI#|)_pT-W1n>7vvt|^coo|6SOlIfT<_C}8~Y|}u7r$aToq!gsI0(KM9&03lDz&7lOf@Wy7#)XZOU_aD7oPiLCp#UeGd zXy;Gb+W+Ee962bh8~e_DI(ev>qY-MKkKrsTwT4hcn!7s^`=NZg&rRr@6qZZj z&wKMolo%zRUd%futaVvbSwlc;#`c5tT#g9o8wMDziKY$nk35khBQ|!?OVe4K5L_}6%X78goh`I0V`T?{8Ru>c|*W@%63V!wI zM~&=I7*W}U_KXiOz-YBX*fVn{EpW!hRK~~08^^~(!JUVi5+R(_48IbjvBp_5`b0;+AZ1q(0{f|r5W(sHp6NuRH^lKTx5-<{ z(ChHOld`bvPe$h>GDy$g4i<-)5JBDj11ZBd4I@7ZQ23;uoB{vMb%yep&9|H_KZ_O{ zktvxl{TL^q?79n{Ht#)OL`I?NHEZ{x0mQQJj9fbiY1c6n;;6~Ey1FvE{ngqj#Fos1 z3~)R(S#9fwYv4_{{(G9&)Fl73QY}N6nCbu65&`;5J!gj_;NEGeUE}4QG~3N=L!H6L2NKXt(aVMmo&>! z1Wm8eTW0T)-pAU7+v9U>HnYG7hbr`N$yj&L#>R4I zf&6Bq_DfFlfDS3MFWz|$Axda9Qq{8#3*?^a%_8AC=55OXr~e+28fDDQ0Y51~gfa4X zhNKh?w)3N{_V(0(`i03OPyc`k3(f!-0B@)HXH{ypAyzLHwDy#H-#U_u(%D@7mvu#| zz<)eKsA%n`D_u;=47v87S(N9_?v_Sx8C8tzb$QASc0hJNryF0V{vI9nFy7utb3V z^e&gg1N>ldhC27LekkbThe8tL_Kr`kk`u+xuJTm22^>{eK~95ImX@%d(%9dXi{u&= z9bJ?_M?l>PbsQnsRO9QPogxQZa4i4Y{cxAY3=~n5xHA&g(U$R?DP*XW&rH|wBVxms znQ@f3GFZ?WtD&~i7V}ICmI6eZTTkbA5!m+*i3%JIgGfV==!3hBe|+cNwG~wA4+L(L z9+MI3uK|0XPf){j#RKmHJOh2B_a#N_QG?PsCo|g&W!4Ncv6?xT z#?&VSec9hqcWGqb4Z`>bSzSI`Z2wJ9S7c-Bh3VJ8nM?>-A4~k9e=Ay7*4o;!Kk#p6 zZtfH>anQ=y234_dqN4j!%&U#CmoXx&7e%MSWMcrjcz2!n9In$h&0+QDeK4|uM?ZNy zUPEIoW*nRy>;b}y)LfAZlMdq93{wqp@y=kX0UdMB!D5=l zI))N2=gU6sO`RLQCzm_H|7N|ox~z>)ky51@EBk#h@P$FS!cJ&&gqLQBkZ(SpVp62w z?8Pz=VN#H|)RVQv!c>0g4ksFL|BWYxB_s*$@O-LsNhFfcWzo@I+7kYjo|GH7{0u;d zYO5ue^uz!7!DrAW0NjD+dtkW}8CyC1lY=ik>Fb6;%|2r&mswz!hiL3@D%iF!s{%GK z`Epm~){d{Gj*u=F>>QIjzsQ*^l#jO{5K}UXcX3c#Run6CUC_Wr8rlc#b#=iOiUserd*o35T2r_u3i&QrAWmH7C^&5!S$gx zC~Q;r2s)6B+fk!Xx`qR4=DkQD>z8%cBqID1>`Q)L)wMLR-BL$tcmxdDYKJm0kBZe`xW)<0tx&Tn%k~HY)r|i_(cEWjozXFzK z&o?p5`iY!H3G3R76qvuc5~+fOQN1fXmrl^ZakZ|9F0|U-HWOG4`ui%!{V%}RJSD*2 zK4Da8f6&y|BNQANUhMMc--o3wB7k%zkSxC0Id_I2;KitbJ64XiW-4f?MyGu61_u;d z@wi$)q`+6xaPGtjo*wF}iU5Pv>PfM2D*3ekjutyVYd?n@iIHPi*`;SvK2A6Kv?0w2 zigMWx?<6cHc<3;OaledO|F#LaeijvdqWRuZzpB{or#G>vc*1OUa>5&jnzT)ULB9_W zN9vQR$T}mx1PHdE9qn`Hh1GldLnb=0KW?O_HUz%pXZt2e_dpLJGC~vN9A-XGrJt}l z7U>7VBo#*PkzEi!ZNFuMt#*y2qOIlUqhe0XzH<+IUI- zuOf8T_4IT*i*(Q!+_Ri)kkhO}taKX4p$&!G~$xs`ofS{U1;Q>C(0oWaC0d*wB*o>so)^*5d`o{ zUF)OU+2hTTiOI-%t{iu=h>}gS$z~R#dq?LHIMe|hjTTXG#$bex0vmeXo%8wOdR+3w z_4ao^0cI$IYt-bQtRMOLCO~yq08Wy2H{8m;O5_}SYI75F6yqV`?p3yOI-2F#Nw2nn zN;x{L2SzSF-ZwWg)(da{hne4tUvO2vH`+JD#wd3i!69R&Yga2xkg~7YPTV^x+zqSL zFOXFpacjws$6>B+b|nS5BaeOTw5pXWVjqSyE<#5)=G+V9K1VFoC4JRo#|E{DQ|)1W6GUEr1*{Npu0F@2?NAw}M2kk7tRdKXtcoRkqK)}^ijjp}evVb64Pn{pzA=jt`_?>4GalTiyl`tlm zeWnU@ohAsZ_s%lumi$HUGqsz%C8L23aA>=Y9&iY2&8!jXX^AgQ?8rydLR3mt9AjB+gy?hlD~kuv_D3r^>d|f;)bx@H;o?Es(b|je1uNCk=T2h3Sb^ z!uRj8RPM3FC8NztqGY@G^qrN<1+zadrMWPhank>^4HbaO`swi3dm(~l=*G*2L3Yla zYk6Fmv`KRA;~fXma{hP8ZwZB-7aGoU4hol3%gE~ zrqLDwK^yIty=ef}Ry-|$WD_d_vA}nrbkh-H=h<4U%v!!#RLkqVx3aO}#cJR7(vM9x z<>}#JetL!-eJ)!(Ki`PXxm;I;=pC+v?-mKy*IT9^?Fa}8vh;Ggt%*Z2S-Yg^QvhVI zBh8o@oewu)e)VT1a_*^Cq^~!^mdK38Kjcqpn>JiE`rYl^yz5s1#X1am>WCrxLttcd z)tL1T@=C2ukixNPW)$*Ud@)K%O$3u9h~(drvSpmMvFg@hL<=_PvGIXz>ih|Phx(m^ zxg37xb<8Z#|6bhK>YyQeIKP_gWp^%VGHIFnM5_bo>LJs3>Y4`2Ka4>qvj3?HroZ@l zef9A7Cv$nf#=ZOr3MJV?0gI~-oZp|EL`H7-1fcN^hl0x(3#thQc%l!zExpEggaH{b z>meZb_ewegr^m;~CZ_+Ot&RBpM7FV`3~vc!sNM}4DI!oTHoB6r3tX5tH&K>#0hi$e&BiF zpGYQq6RZsjvYztqXW5LGB_bdqNGWR*K|N(nGG|PQ`L+)Ip6wGLD6!`z90KYkw5TrC z2<**09oc)sdP_Z@c@Xl(b=ZWc!Nqxx)t=31A`h8zlA1VivwZp?EU< z4ke-Gnl3t7(A+EsxKa(Mst|rlv}RqtI<|A+I@M)4a~Py+a}=a+ru{U&jX%@UOkh%; z4Yb}P(N>tM?_CC1Z<(Bm4<)$W1mR+X-m5Iww<1gw%Y82lk+adZysa=!ghmYMvGVET zZ{@m9va6|Mrgl2T(X{vTi}MKZ2!P18evk{ULiY+i-9;~#u)dp!5=x4AS9AwosT|d> zIXgQO+>#lpL7l(r2Ad1WNR7IVO3#rX zHL;GlIh+`l3FRwia$0@#IwWn;fIRHw`;Oq4jZdaNUj2 z{LOvKIT?SoyC0t(opQL4H87*#wM{tefj+Wy{ z79iH(@&?FaKI`$YtStcg5Nr58Kx<-HU?j2DnDvlt@;?rLwPons!V7|4V{8sDN99I_d9L6~3Gf+&)MY zXe-igC;i>3!WX~|li8RwQ?U!SlIPMEVPobkBkYhpy`VQ!^zqV1VXw5Xwd9K=3(E&* zh~#mj>65;|RpATbMqX6Jjj7nk@EUoq^PP*xVY03H!}$XxkGu~HaApc434~_&{y~AZ z11fmZ7q}{X`ElGTH}cgFlc$c~S)ibpVjzWwi*U;~Geu`Bhg)H_N{CzR7qOGRz*XT3 zAGe&PVtDU(EHXJ$$&}c{A|;d;A&^D59i!s}gO=b~id*D^SlK|xO_kPYtjY;W)^`*9 zy@l_1C>7hgH19F@RN}i8VZu~8T=4$*A1*kROyRqfDqAI8CTa3bqH0UuG2v;q++RKW zj~_q?eXlehH-U~SuiXSKWneueR-=Ql*+hej~1TF;>J@& zC80tEu1a7%4mZBKJO;OPm?|}=LFzQj@|-Fu!Amj7Z^fjAA>Kw?sCqDr WDiNkz4u^vP0000T4g JC@;cb4FK3@53&FN literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/004.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/004.png new file mode 100644 index 0000000000000000000000000000000000000000..ab397f17d752a45b15e7c63ed6dd04f20febadf9 GIT binary patch literal 619 zcmV-x0+juUP)WdH}+0~Hb#3@suAYXATM2XskIMF-gf6%rOVVg+6N00009a7bBm000XT z000XT0n*)m`~Uy|Fi=cXMF0Q*$ar1Keq@i2bJm4*=Y({*xt-sRgy)ur?xvCMwyE>U zxb)f0#M2M{MG$AI<& zxC$a1ba!z-Xi*$Q!8`l_Dt-dp9K5MGxgHOkB_=Ov?6p>sM$Q)cE`&CDzrL3j`cFC7 z3^Ldf0rnA$f9BTS2E4C03c*%A5U6*=Sryjb$W`#d2B2nR5ebsU*-rRS{TXrt>THsGM<^iO%~ zfufn@8*n)dR5TQnpW1h@rBhR&>+w_a4p!dS_2Xi|2fR}_YK8bV^uwz{y?$KkDN+wo zdX%`5vbwHaNfI-{gjV>Rqa#>pGdO||E<^=qUeQac+5)#H6ybE^n!KkCcsKCZ13x?L zQt~~;CzB97d3-)@k1uW?=6AcT@#HDX&W^NHGJpJhmSyRs`7HFt7xO9Sd+A17{QhFO ze2)uU9SXl34Rw4*cx2YDzgQcOhB}^|aL&`nL^mJ2;ELz5q`57f#+h^UeCL|;c)Khb&jZ@4e=r+C=EMqjZnBJ%AU!uS9H002ovPDHLk FV1lPV8e;$e literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/005.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/005.png new file mode 100644 index 0000000000000000000000000000000000000000..e8da8865a04addc9a0d6b2974f54006b977bf1d3 GIT binary patch literal 1361 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/007.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/007.png new file mode 100644 index 0000000000000000000000000000000000000000..652356428045b5f73e7a1cf476a4c22d262db5f1 GIT binary patch literal 22551 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/009.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/009.png new file mode 100644 index 0000000000000000000000000000000000000000..7e92cacbbaf9dea593713d10c75f8f345e6c1c89 GIT binary patch literal 1854 zcmeHH`8U)H9Q{s1BwJBZ5l*(3H>WHSW0@GsljY%M$&$&M$TBpZio}#HV~K1NW5#Q& z4W4c6lYM9~$ZiZ-!x)k;ulMx+i+9fZoO3_-o_jt&-E;0I&f3yMNZ`Bx002T}rbadZ z0Fge@=lG#V`@#*B#SxuBBOTC&!Jh7D--iJ*cE0|e0N*(Dj2I8^@x|TcqXRy)nFaD+ zi&wzOK-=`lIuU5<7ykw&5C)(;b@ABioWUUx>N^@X8w zGW^^ou8Mc6L6oU=Z48S~og^d=VnG|WiVGO-FPIm?+4*bg%pF8Vk%lseng&5&^b)VW zKu^fP{*w9$QLjo-%sLOg#tWmOLA$3Mvozc_mYf&s$_o5OvBeQL@wenCVfLEw*)~qB zoR$K7UB@|x8i(;x@r3Z+>r!wDS=n=fmU+S-jSE$}s@U5I%nS@}zru{P zH;)b8=OTKOl5lzuMC#+ysE)FD9>tu{37%j=5aX2M&3D7X$0Ngz1^WOBY5bxkTeSs}C8*8#9ipU&p)ed8{79Iv3CG$+H*R8&&VdKvOl{=sF~qE@K8nfo78a z=-bcCW}jM5ZR6*gVHXg(VsS4;zslIM3(t;ZmHExvtV)@2b|j7^Pw5)$^BC!eEA_50 z_#{iI>VitJZT6Q30QPUxgx|%#maC(m8AQ>ov&a)YzJifFv|qpZAXP5KT@_ppbHuVF zE43k3)*8cTD}t-_R%suGX|}3B^zdlJ{-mr?3g_jogMRJwN&I@g|1)bWDgbg#7;^)7 zBohL47)`woC(w3`utk#iv)z}?^fh296Heq@OHecy)0j^26RbX2)FGBIJ=7ziS&b3A zn66@Hh@>WcUg_E2&{2a&D@)UVaa#kdgjfagWr2wr(u-O$Rxmf+yjybc5{_Fhl{Y*llHr9D{CIt!Y?0)bVy25fb3C z$KPzHE16s&r>&=xap7E&V#f4DDok&@bkq;^kyyQ-e*}d&DYlCV_y~ZvYJUWHqtwS*X8lyc9UoVe5!e? zKIS!H5t4^Q^#k=QsOk}arziE*cho4~FZQ>c+3`XwM`vH=3sRR~ZQ$bsNz~M;al_ng z!ViZ!x`JBFxd+^PQc_neFzq4g4cEBN7DZ}U5s=+6rFNLPAAYb9h*Mf>>K5Eu$LGB= z@0wH9wUINYI+tg^3sn^f{yV#fOd@q~B9`=*<5=PMvso0TU^3~bUArPscMTp{Z0O{V O&trzPG%CM&H~Jrr@6(C^ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/010.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/010.gif new file mode 100644 index 0000000000000000000000000000000000000000..13f9f0487346b78fd0f97bee47de42799fafe365 GIT binary patch literal 1561 zcmb7>>pznV0D#|Jnpw6`IS{)=w%B^BqwVw*5^p4GCn7IqF%~s~t z(iAJ&#{6D~YR4_)Cv;mX(JAH4InL?)2j}_le0x4UZXT}Nwud4SmcSbT2uoLL2PR?o ztMbX~{+H9t!nVpUSi8Y?>^ zXi0uQ{aqp{kC8F7<4sA8aW|ptoEA_flfc@-+)ggsUaC;suB(%A>Mz328qZ3?>-&WA z=VDlqz^U#lP&||N7Qwn&&)B-MR$gBENm*YhPnA&8$t}}m!Z(hR z7gcZHj(2pl!OCPX?r?cWrm!fcPv5D1aWB6eR1V*U#+%E!a?3k;{r!JD7^vn*p*;Ch zxTjw8@?O_#&2?2W{G=*6>Ojk|99Ct+57S_%9Iib(GTAqIm&>^lSUprWbCUr#C4zAQ zGBIcRp&&BMt-SE!M? z0G~dM{OkV8o!Lx};9By(-Y8o#+Ba@#c$j-@4VH6Y=T`w*vy-}1W z6p1S&(wjmCv#PqLw(hq4P8H);!@c{BO;TBXbIT)zQq$U|z4h=>$M4nZj1yrI?cF^> zVt;Qk)cL&mvD9kay8Q#$1_rNkh}%O*`lO+10tWE~fguccjPQbjLwQ#GxysMs?pgRr zf*Q;wwIXm!%%iyzy5}o4_mZ&2h7SlnA1%kSNq1v#qIU-fVw4IPlnU)DJl8KT7t=FmXn^?%R6o z;+)535yy0Qfbg1`sW_8?b=0XMQE~n>99rmIwmPCgWXosj8*MjLC{%6C1~YpQ=|B_N z%%5Adg(1%M${#2p5lE}DeJKa*Utcp1grsEOE4n>Px9C;u1(D|5p5py~ZzbiOse*7w zbYlPwf%5Z4AY)Cv!GPU=7lmhWK5t96{jjVXiJ7)MQi9w|X$n5a^c;NS$Mp1-CX$Zx z?4?IeP1un``Bdj6{-Ay-8xhTTSADRh6_<%0J_0%|000^S4Y0yRZ2pRxOEg|L-Ebvj z+=|IsEu~Q^Z_andmJ(ief!smZK+GhX|QQSr`#u?By_fGOa(xV{)FfW0y+jg2iqA z*w*WBw1&L%0u_m0w(pL{a5E)G2ATiL*yy{4pu1gnd15Dk#Lflw3z17bsrJ@iK=xG} zdW>pp?f$@m`Ji0UC7`CB=<+>}3 zG~`De0h(53bLy~004<;mGg2W;nvaXLT^}?}CzIC(I-BgxQz?2fPq^WX)F!7a7P#!U zgA7;23TF&Ag}k(ILIB1pz+KO415k1*;DNg9%d#V_FSHgR)zscKu)}d z1B0{7e|*n9=z`zmSpLX$=4JcG&u%K@8zhJbY6tL;3d2LP4SQ2itK8Mc=z^GqHA2kR xO7d@UQ%OVx+P0UbF)g0rQ1*#%haru*a*9jM5E(_dw^|KNC2w;IB?7?Ce*n{G%y<9* literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/011.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/011.png new file mode 100644 index 0000000000000000000000000000000000000000..50f97206966bae802af5d6740bb47080b5e94ba8 GIT binary patch literal 1895 zcmeHH`B#z&6#WpyEtO2ot)#`Ky|J{0F()L*rEoHva+w)T(_FC;EHW1~HJ9w*z60S3 zWd)&zVwxtAnz#d+qGYLQE@?V_rH;*iG3U%X=e~E(eeb7x&V5N|9c?w$jnn}E(6qP1 zo&x{~a-AEfLf3mRv{Se~^hh`t(#cStOC0CchA=%?` z|4QlzWUYKzmb%@t&NESLF%l?1RVI=z9yV#cwH;~uk8OG_DScFDtsEFSOC9ac*Qr@fHh zQ&J}`X^^G}Z)FK7*`k=V*5tg#1X^=)L0ba7Et&o*HD8=g>rAD0=ah-kN_%rldJEY7 zMfV43+B#*@%{?5UjNd*q^CW(uE*Y$i1#1&PLDIZ{+SpjvG*%-V zsTL~uB1JvemR@wfFaT4G+s&rEk0Clds=5 z^-s19&-4$CPs!)kW@m>La|2`ZL*wI$v8maanaSz7xrNUQAozLR$^Yv==KzhOM%X=2ekR8OD~~`ATbR5`rC9 zhF4PZ@-d+wG1Lhati1bZt{PBtr~Fp(;I2?x2tku%nM;O+!@?hlR8Ka*-)52=q{Ngr`-cq))Og5mH`zVKzyR`CRy5-X8p zSpn=6?tXhN>>Z6F5(TZH4zZFZ6rR>w{&JW_s7R{LP zZ?NS#I4FNRC-J0Vu1KuKt`=v{AE>R>LG_wt;#?Tn|Wes zRAyq?31_sMvN@Rj+_Dr%wJOqTn|J_$0Gaqem5I7m`cgc20J0bvvi#E3Y-IWCB*|TT zfzDpKen9gr(z_5xtGtbj#~jz53X2&xqY<{u$Cwj*Sqw6&99rpz{`>H8gGrSC*Rn7~ zb+-*^FJ+&Kr)70_W~xX!wP08?ssBF57yc>S{g*UpiD4r3oQ8@d<5?h(wdAO!efM<8Af#_VY4pvs z+kGXyjfnCWOwo1t;a%`>{e`TaB$$$0@@n@@gW}DVW;D zvXLgj_I{+9OwX9U7JuG=%}%#Q#BEowBpVUBFz2bD#^Ajb?@woM>YC8`G|x|(&Mk-$ zOb_I95nit1ME=)_trVEj#iMAsF5S9SMa&G2G1!FYfmdwR*(MGqgcbs*yr4fcwSTWh z_Z$+=;e8eFzO_31xoi$G+>xs+iuVO|-BfSzvY1XN;QB#!%BW2~EdOGpFRMn_*?j1r zfwdtwB~Qgaz(EJK@gQ?mc~tj77y1M744%hA?zG5o_Yj|X8aR|N+#?jgY>1x682wp zc6P?eBFeRLHppgeh{PvD5^;3WHmK3F@3E^5VW_Nz(4(^%wspi^_O9PQlReH6`w-(9 F`wzE?)tCSP literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/012.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/012.png new file mode 100644 index 0000000000000000000000000000000000000000..a726f048ae489e3fb667f2f13a57c26b529f4adc GIT binary patch literal 3369 zcmd^?c|6qL8plT}Bq|w6{Hkd&hEk#WMPwNUSt<--ERAfTEK#Lc~}KgP)yY zLKn;eygWcVy^YiZ7V}l+sy9?MGZtkt=>0syW?BRaO#M#XO#7E@?iwQ|qMVtk8 z9r(O;4dDNj4jsO~f8pM)B=8tv;RON-iu|5D0yu7T!!rYRQf;?P#Wo2nKfe=$bOf2hqSJ#(Y-<#VwR8DA#>3kVSewEl6 z{$=7odqx_2Mi~`hEA;>eAHuFNTeCFR#sQotJ`bq+Z!9qjSbf3=E~+Ko5R^JwW=zurppAy3U7 z5Km(t;CaVi?KUi=zvm?dEn}OKbA1*8U6j`vjG0SVi$@1if=ah>+Bu}Id4HuG(hVbh z7vCd8@x$S5Tgnc+x+%9vRXw-h&aZ%`U8bQN@-a1DBht(ano`CS@=#Rh(81A(0&H`0 zC`aiT{q<29E5=iT{k;i8g2D6z&YKii8Wl@Ut zWuU{je)@n5!DYZ#u8E1!A^l99xEaV{CnAj`9~qGrKa*MaI`#FVUqvL$Q)Y@gkDi#G zp8kr$xqYPq*Hju9_ncBLfPgMVSv*1Z^H?SCBJ=Bs;_jZrKXp=@= zKhTU6C8Wc{&9vZOo}7h>Xp@c_U67AklTuY_KR#7zf}hX7{I=F}lbpA@S{CnDBcfS# zyUH>(bGSM+v-~9Dh-vdZ(HQLaH`0!Vl5UF6IsP<9VZ`*TWi1v%%p%|0B7|?TuMcpNsSZv-e_CPzk@`mr+ zj5NHg;B9<-TS-14!K(~8hv&-Y$9#ggyyJJ`maVVvY|Ey!wzal?c|lUJ@NpMHRpDTk zfV_bW@b$ux0xj!v@T@d&vBU0$}l%iBw%MQgwdci#cB?PXDKxr4P0={pi^aQHjCTV|! zl)#k6GqI-k?~uMT^<*qD0*>OkviQt5*}sDBlL84gA6DMEhB*tIgjWa(o>_~=Y@4u9 zHU@o)rtneg9yun^lhL@r-K3!c*ys^pqmT{A71;|8k5+;$X3P6^V_CSd$ADD;TnEYV z_g}6MT3w_i@5`;jQo|}7Gmhnig^@JXZHb4|8X#8(n7}8xIR2D4c3%rPHGfUa7()2d zv`mlam?)B#*gI}Md`Mx27fd50%JXP5f9Vd|>YP}MX)Mzycjvb;i9JYu~ z{lUJoC7In)pS9Zl=xo61+|)cI7^p}L13A9CAT^{VEq^Q&fds(xC;rJ5xChDox}{Qf zbs$}g;P#&R$>!91AHokUdTa@1P3QDPlfL`eTvTC^y?|`!@WBUp<|RWOIz^wdu% zD3jbMF`J9ALttY}4DO>bv{EcS>2rRu7?_y_d8`G6iTc?L^RmxGo(@hZXWrGQ_SP5O zh>9ykj2!*c!F5RzWg5K=5p}=(hkJ0-F}EkZzJTA)SncqB9TVXT*VJ`W}1$ zDy`MwVSB-0I7yf60W9RtPuchMxKVLnAO|rb4g*jZp{80Y)a{lIK+E02O}zkGnQYZ8 zn*hnnK)DRVYfzXqIZM5DhH0Wl)#?~(E< zQ?biSspr)+f77Zowz1#0e6?XN4o5 z&WuJZ?iutL4UnY^I%_iKg9#m{y!A&9`D>z9gT|85*7c2Qr-rsQ@nd9AzGX-e zW);m}JIR?u+MnQ%_*7Z1aZ5uJCLE9=VVEZY%Rv%^{s{ zfaEwUjb*hPi8E9l?$ur9?|jmS(!JIzBbRh3R5wZ)GsmHw&@=4@3oP+>!@7SaG8xE9 zZC)+HB{kPk9tpFjPOq;xoGI@_N5M8yS-Y_gyHOrZ;CmTnsjjSKFeHNiMzIx z$_O-%0XPg@bptq9W?`Ww8!rzJ2v7n-=@giVW*e}dsv#vMdqvS2oPLCn-vFKBJ$V_R zK)}TU^{fsJ7^whq<~FAPb_w`6xdK7(opr=Wq>5(3@y_L6E1*aq1c}5`rp&z61soa# z6w)i_^!?z{@7(tKY7YTD?djNzwn!Dg29%8*Q-2Di1&@RSSIqi75%s7e=mf?T!=yhi e3-a^d;GXOm*_(nfuld~wfpp=9S|u8`A^!k{AYC*7 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/013.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/013.png new file mode 100644 index 0000000000000000000000000000000000000000..7d1ba11a064e8badb8087ed456324ad425038ed9 GIT binary patch literal 4037 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 Y3ysuc{RL;7{{C{bH6ExJsac`_2j2LcOaK4? literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/014.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/014.gif new file mode 100644 index 0000000000000000000000000000000000000000..39aa1bbb0767cd755ffa756f117d252d49c77350 GIT binary patch literal 3005 zcmV;u3qtfqNk%w1VQ>I&0J8u9NOhPfOlWD7w2-#drpe?~gsYIQus>;weWu7~i=a1L zc36IxdY!Q*J4Mse)BpefA^8LV00000EC2ui0B`_s000F4(8)=wy*TU5yT?x`j$~<` zXsWJkOG<7m&vgAdcCPO=%>Tfk$R{isXT+m&c}g;$Oeb_&lv1xeD|Xw%albh&c&rkW z&m}W@{ZO;d?)Nw@|I+JQX8=$TAO;8m3IPEMhK2wD2M2rwiH!w)2m}NJlz@N?0tE|- zkDs3flLUbR3iLTn)4ArQs;;E{xu%@)Ov#Gh-MUhvQ6)JuolA!>9VPPWm6t_|stjcEdA4y{ zweaL61)zYD$UoQUvbsxCFSb4jJkCP=va44B8Y|m0+>=;PYvdZEeXMJ+QP*zFa-~5A9i`^2m%e@2m_t^2^&a^ zfJ)!_HOFEIXysPAtj7 zbI2lne90Xnei)-b0|1QD>8{aYn=L$twi!x6tf*4gWAR#I&mwA7mhHOsE`v*foB~%0 zNHvfDrvpomo%V z?btK|)GyOcSCShxvshG;f3u1p?8*zx1h&P_poUsZV~6^3etm@_bH>*AsVUC2D3X;! zJ3|Rg(UFw24TT`i7uqZeg`(I0-@G8lbjC9mh}S`s5z>GH>tQAGn%zcIQZxzCC}nM$ z51Q>OGYyXM9}I}(M*@Wof(#+Sq%OgRJpvDdbr6S)b616VT3E;)=JpQB54ePkQNfIK2QA5ruW=4xc zD&{P~F(ZG}xJWhvk0`^EktOTMN@M_ue{t~~iZEoQpZu|K1n5v>7*5Ljp&Qw^dA}i&2Np9wC z8xrJ-cC0iF3FI>WF=U#+GyN$|ls(0P6v~omeE3e`fsdgK4Zxo6fhez0XigP)CNDKA zo0FAupspcFjdsd1VVX{!9^_8Fm{Uo@tS6cVum!^^kksi^qKNie2QM|W0J5kMeuL2# zQ9F3jlm3Tqbfjcuyg`kf#08y{u;?@Q6V;-i4rrCoQJ7$nkwrnKVut!&R~ul=t_%~0 z%cR=VtQ|@N)$r2MZa4Vi$+t zgO6a#C`!&$B|X_l1Z>M|UREBW5HHOIYh7_PZDsd8BH=|)pvkmh^ zU{$5(fOXNHis>l=c(xd@`b{u`X}m!nS~xD(aw;HDht}C-r5kU0N{JAF4-cz!#drLx zf5-a78fKBC|9$dR5($U}pwj`o`PM`Ez&ut|;~;~`VR^$W=Hbaxe2O42pTnGtsC}}C ze?UP00@4cSO0YI@*bAmR*`B^6&`;CAc>kV;}= z-eCX8UGD#S#g39>_pVUP>J9F~eX;P8-@-a(TF080&j#^3B}Ga8E#P$Qt^@+r(q&># z4&l0ZCEXbQTw(f8n>!>PVZIVw58^Pw2Y_oPhQh&fA!K$7$YThc09|07+}6cL@Oe}J zj)+KE%ohIxY9Yoa5;iZU79_1$h4hmfowva)4`{WZu|_uivDm^yub9G2k@S-WkQ)O@ zMMhNJEGlUOwQ*T#Y4J+3du`R$cT5I)Hu03QdvJr)PPEzyoUlY#2Y3lS9yfV~i2L5x z?yO$2#{tq0S@<2O=#HBB*b@jEf@~^rVeKl`wFyHI!^Bgo<~8>x`A8RoD9Y_>2hYu| zb`6J5&`^1W7_d5cp#JxKUxo!IE2<XR z@XL-=?Nk>r1{2@Yaq;Ct+qAJ9zwJSSF2l%j8!2l$Npk7UrDWT&q4aPR!RTE2*3!wIYW(RbVf(r!rE3pSa3TQo{ z)Eh^_8H7_mJ&{7R(+vi(6PNdYRzy@q|UV;MHcP2~qZ z@xlt)^M5f%f3Pu22Cx82#|-=j8q)WHM%Y28WkP0RG?Y<>^%i>yzz}PQfrB_|D58Uk z1^^ut7m1P{Em3tpWrP_>JcRcVDl%TnS6;H`8fR#T#4tx~FpR`l1;BWWSYV9G2n5X7 zj9HM3(8!C@IE}w(ja=}I*w_WzxQx}bQ;<5CH%?fJS?( literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/015.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/015.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9ace9480d0b88f962936b4a5414ad33e84242cc GIT binary patch literal 3119 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 JlNS&H06U-fy}JMa literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/016.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/016.gif new file mode 100644 index 0000000000000000000000000000000000000000..dacdada00c5b9b62b456c2032228063ee49c6b52 GIT binary patch literal 3354 zcmV+#4dwDjNk%w1VQ>JD0J8u9NOYMdLsn^%wUM{grpo11gsYIQus>*tex}H0i=i`E zb69?td7ZJ-)6)O|0RR90A^8LV00000EC2ui0B``1000F4u*pfQy*TU5yT?x`j$~<` zXsWJkOG<7m&vgAZcCPO=%>Tfk$R{isXT+m&c}g;$Oeb_&lv1xeD|Xw%albh&c&rkW z&m}W@{ZO;d?)Nw@|I+JQX8=$TAO;8m2MUCR3IG5H2YdyHj0JrN1Ox+DPwN$Bt^~x44TkUM6x)?9fuMtlFh`kD=@6bSan)*nT#%J3}KO~7k z%p{K?wONfo0f;3FUaxi%Z5aSMR8_5cABT7mK`YX+egJbxR2Q?+%WXb0LbL_(nWj&Q zJnrNMW+L_ZKtAlrqQFDg1Y1yq@-8yp=HY_i87jGHBq>e3H zt-UF3U{geL?G`9nz6cb*u{@!*8@k(6+Q+v#BBK3(0i)vCD((Iqe!$bge7(xn zcuM&q=F1TcGQ3_E^#Kev#d-}pqr3&&9b;Ah0odqPV0j1zH{dqKeS(NQ=fGzgD9s&K z3ql4Yuoy)<+1DRv3o|n1xXD60)%G`C1aMS7kXdn z)SP@#zSrE8TiJL{0)RC6pipYHGZ+8?M)Qm%V+I%S z3}!Zqjq0h&rmd{WRPlC~nAa%BU}8A^C-k@%Yl0K1EzY%2qH3oNi7NubbjvtIx;zO2 z=yH@uPg~tRVUstlxXYuvfX1-@+NK7q-z;ZohFN)w8*@%&$}H0hU@5Q3`KwKB%@Cr~ z0^TpUuLyh=a;xBXh#v_cihAnG#JYMdDXTo=Kq{35O@o8mSo?pbRxj`?60Ory!3iYu z+@gvklR7goIs>uF?iR4wE$Xn(5yQOv=N94C!=8y|>&PTk@XX0q2y^072KlIQzW)Ir zblE!vIiAO?h^R{*t1`_nHj@ya#N!jsVTK`?L%e0cM`(or2f?P&w%zTof!TS{q6jA% zhF!=f3~>+u4WYb32#|)Y3m=%wp%q#bj1>kbMQj2yn&ik2CU6@-0;JW8dravq@1Y?L z=kv7`!dM5vpy)4FJK@8n_PO3LB1(j)b^j0m0<4@c3{jiwPomV1r4; z8B$P;L*$E61)l&u@{}D6K#=Bxy_TiuC!Hi6C&l>5UzLIo~lWJke_ z#77OW1#SeGr6+4?iBk+`cK!+<4SShN?&QRc6^Y2yC;=NIjcJz51Z5s^F(qZqaGKOi zoi!UI4`{H^9Yt~sAjLxf32<_mpM=>|p17k`{qJk(RHYqjvm&}=qMVenh6Iw?JB3PM zjI<1=ZUS+Tb$H|dMG(x`ava&qKItPqZ~4Z$Dv->@jA;TTRm-4|$t_yE10Mg0sS3qq z$_{b|Tcz|~d~UO@KxN2i^`tS z5*J_qhw5f6ncCdKvI+|@>F6kt5^LZ#>PxArFp|rNq!nXz9V6Q3n~!mfMSWqJSd>T* z3qS>xrlqd6Le-{HWfNREDp!^5=N!yfT|6_wJF$L^l`%R%m{4dG>RAsgH5I5*NFdEe z2GEB8w36!fV+kKI3oMo4M_d^hD?l3MI2V+PONzCeYDyKZsGRL${}&5k{AZ81ogQor zAwcH5B2R$-;Su7<$=h8LFJ%E;h5$`VhzrUCkgmO)Qy0NptMv~Yj={zsS0$;lv8Aq-T zKu-M8B!KgxJy;buE?Gq9e1%KC*v3&&8&w`M{ujX86lh^x#Uy^yQ?96WPq^}eWN5kj zoY)!*fHa*VCnDQbKnSC&CA}>-Xjc|jl7hf>H1HjD+)Kt@ihokv=zcd?40afVtM$~4 zlBvoE=WPZXkmX1Ck_X8u1D7AZaD^Oo{7+_NQj>s4z$6wbj@wQuVrH?;Ki4eP%gT|O z!1W;iFt<$Se=5Vm25N;uxfxbnjB6Tl{9vKmlxSWuxWwn=N23)H00->BmDrF~1Ipx^ z&NgB`4_dLBDI__??wH4xK~1BxJP6`h#vSSqRK>JX60q&#*y80=V!>BhM58a)jIQZv zHP~wrE1(z$K=RAXfeCnPs}f=?3edK`Iy`5`LMI*x z@KP@K;c4Z?vDx%3ubQuW+N zhZ)-Hb5NEjWbqzGImt8LtLt5}D0N!L?+KVKq%DkI9Dg;yA`<8ZqoJO*QUUvIJ_SjEbt$0k?xblKQZKf)jCxV4&N;fGeoBP?k$ z1^+sfZ>f@GA7E;4Uof_1mv68oF!71lbxJ;s1Ok}wLJwVyatnD`>e?H|+B2gW!4w19 z81c9@iQ_}By7;LsIwcDOTIZ3(Z&(vdf}c|#)SO&{2@^*i7J4nIDm$6>##8>g zOX!Ogw@*nfj9Mj`+I&r5XIMaa9V@U`UK;vX@J{5_+`K?tYTd%jLEaZVp5(W0g#$o# zuevZzM8zt6An<~@Cgl*s))melkItf2Fa|c2LQa8)__ts2SL8h!o*3STu}Fgd%CrxO zw}&L%;!5~q3g;3T#)1ga(GK%BUuqUvVB{yx(N^X601e|PU{oCz1RDR4I2-mFr=vBm zR|=BXZ*k;z`EV*b_DjT54A(+(zGilc8pRgBiq(CL;X_OZ_GoydkQ3XiIlhmmUxLrkcpaD1zFUIcJPUymIT-~uxsx#flRn8ECxDVPd6DD@k~B$_;h2*4IE+O(lO*}alqTQ?92t@Hn3Pia zkXmVx06CLQX_ZIWl@+K0Tltk0d6e&%kq~JDCCQLxSq2kXmSE|Y9SM=FwmuK0ORVkN(IhcF70(4-K?nsw&`Ic$fkq*h0Ln)Fd5C_j_l7m^0ndz2> z8Ig4fnrbPQT}YN;DVm7sn1yMXkolOOnFg_Fj){qyr|Fd9h?VCkl~&1@Bbl3|S(-s< ki@_JT0J8u9NOYMdLsn^%wUM{grpo11gsYIQus>*tex}H0i=i`E zb69?td7ZJ-)6)O|0RR90A^8LV00000EC2ui0B``H000F4u*pfQy*TU5yT?x`j$~<` zXsWJkOG<7m&vgAZcCPO=%>Tfk$R{isXT+m&c}g;$Oeb_&lv1xeD|Xw%albh&c&rkW z&m}W@{ZO;d?)Nw@|I+JQX8=$TAO;8m2MUCR3IG5H2YdyHj0JrN1Ox+DPwN$Bt^~x44TkUM6x)?9fuMtlFh`kD=@6bSan)*nT#%J3}KO~7k z%p{K?wONfo0f;3FUaxi%Z5aSMR8_5cABT7mK`YX+egJbxR2Q?+%WXb0LbL_(nWj&Q zJnrNMW+L_ZKtAlrqQFDg1Y1yq@-8yp=HY_i87jGHBq>e3H zt-UF3U{geL?G`9nz6cb*u{@!*8@k(6+Q+v#BBK3(0i)vCD((Iqe!$bge7(xn zcuM&q=F1TcGQ3_E^#Kev#d-}pqr3&&9b;Ah0odqPV0j1zH{dqKeS(NQ=fGzgD9s&K z3ql4Yuoy)<+1DRv3o|n1xXD60)%G`C1aMS7kXdn z)SP@#zSrE8TiJL{0)RC6pipYHGZ+8?M)Qm%V+I%S z3}!Zqjq0h&rmd{WRPlC~nAa%BU}8A^C-k@%Yl0K1EzY%2qH3oNi7NubbjvtIx;zO2 z=yH@uPg~tRVUstlxXYuvfX1-@+NK7q-z;ZohFN)w8*@%&$}H0hU@5Q3`KwKB%@Cr~ z0^TpUuLyh=a;xBXh#v_cihAnG#JYMdDXTo=Kq{35O@o8mSo?pbRxj`?60Ory!3iYu z+@gvklR7goIs>uF?iR4wE$Xn(5yQOv=N94C!=8y|>&PTk@XX0q2y^072KlIQzW)Ir zblE!vIiAO?h^R{*t1`_nHj@ya#N!jsVTK`?L%e0cM`(or2f?P&w%zTof!TS{q6jA% zhF!=f3~>+u4WYb32#|)Y3m=%wp%q#bj1>kbMQj2yn&ik2CU6@-0;JW8dravq@1Y?L z=kv7`!dM5vpy)4FJK@8n_PO3LB1(j)b^j0m0<4@c3{jiwPomV1r4; z8B$P;L*$E61)l&u@{}D6K#=Bxy_TiuC!Hi6C&l>5UzLIo~lWJke_ z#77OW1#SeGr6+4?iBk+`cK!+<4SShN?&QRc6^Y2yC;=NIjcJz51Z5s^F(qZqaGKOi zoi!UI4`{H^9Yt~sAjLxf32<_mpM=>|p17k`{qJk(RHYqjvm&}=qMVenh6Iw?JB3PM zjI<1=ZUS+Tb$H|dMG(x`ava&qKItPqZ~4Z$Dv->@jA;TTRm-4|$t_yE10Mg0sS3qq z$_{b|Tcz|~d~UO@KxN2i^`tS z5*J_qhw5f6ncCdKvI+|@>F6kt5^LZ#>PxArFp|rNq!nXz9V6Q3n~!mfMSWqJSd>T* z3qS>xrlqd6Le-{HWfNREDp!^5=N!yfT|6_wJF$L^l`%R%m{4dG>RAsgH5I5*NFdEe z2GEB8w36!fV+kKI3oMo4M_d^hD?l3MI2V+PONzCeYDyKZsGRL${}&5k{AZ81ogQor zAwcH5B2R$-;Su7<$=h8LFJ%E;h5$`VhzrUCkgmO)Qy0NptMv~Yj={zsS0$;lv8Aq-T zKu-M8B!KgxJy;buE?Gq9e1%KC*v3&&8&w`M{ujX86lh^x#Uy^yQ?96WPq^}eWN5kj zoY)!*fHa*VCnDQbKnSC&CA}>-Xjc|jl7hf>H1HjD+)Kt@ihokv=zcd?40afVtM$~4 zlBvoE=WPZXkmX1Ck_X8u1D7AZaD^Oo{7+_NQj>s4z$6wbj@wQuVrH?;Ki4eP%gT|O z!1W;iFt<$Se=5Vm25N;uxfxbnjB6Tl{9vKmlxSWuxWwn=N23)H00->BmDrF~1Ipx^ z&NgB`4_dLBDI__??wH4xK~1BxJP6`h#vSSqRK>JX60q&#*y80=V!>BhM58a)jIQZv zHP~wrE1(z$K=RAXfeCnPs}f=?3edK`Iy`5`LMI*x z@KP@K;c4Z?vDx%3ubQuW+N zhZ)-Hb5NEjWbqzGImt8LtLt5}D0N!L?+KVKq%DkI9Dg;yA`<8ZqoJO*QUUvIJ_SjEbt$0k?xblKQZKf)jCxV4&N;fGeoBP?k$ z1^+sfZ>f@GA7E;4Uof_1mv68oF!71lbxJ;s1Ok}wLJwVyatnD`>e?H|+B2gW!4w19 z81c9@iQ_}By7;LsIwcDOTIZ3(Z&(vdf}c|#)SO&{2@^*i7J4nIDm$6>##8>g zOX!Ogw@*nfj9Mj`+I&r5XIMaa9V@U`UK;vX@J{5_+`K?tYTd%jLEaZVp5(W0g#$o# zuevZzM8zt6An<~@Cgl*s))melkItf2Fa|c2LQa8)__ts2SL8h!o*3STu}Fgd%CrxO zw}&L%;!5~q3g;3T#)1ga(GK%BUuqUvVB{yx(N^X601e|PU{oCz1RDR4I2-mFr=vBm zR|=BXZ*k;z`EV*b_DjT54A(+(zGilc8pRgBiq(CL;X_OZ_GoydkQ3XiIlhmmUxLrkcpaD1zFUIcJPUymIT-~uxsx#flRn8ECxDVPd6DD@k~B$_;h2*4IE+O(lO*~7lqTQ?92t@Hn3Pia zkXmVx06CLQX_ZIWl@+K0Tltk0d6e&%kq~JDCCQLxSq2kXmSE|Y9SM=FwmuK0ORVkN(IhcF70(4-K?nsw&`Ic$fkq*h0Ln)Fd5C_j_l7m^0ndz2> z8Ig4fnrbPQT}YN;DVm7sn1yMXkolOOnFg_Fj){qyr|Fd9h?VCkl~&1@Bbl3|S(-s< zi@_UbYMGszXi(hb^n%S4%IiJy~m*=S>oy92x)tQt3d6NMOj04(> X1*(e&dW#>hpbXle4*H-N5CH%?v)?#g literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/018.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/018.png new file mode 100644 index 0000000000000000000000000000000000000000..64ffd7c318b9d37795a0dddbe2a30cb70cf5151c GIT binary patch literal 1269 zcmeAS@N?(olHy`uVBq!ia0y~yU}OZc1vr?2q~duiS0E)?;u=xnT$Gwvl9`{U5R#dj z%D{e;SyaeWT}0|;Cr|-8d@BeIx*fm;ZK886+f`@_J%%n;xc z;#yoB{`m3nj~^fZ|NkGTa1@M&z=#TgcONY80drZpr;B4q#jUr~xVsJ;@VFd*`}h4F zUB4wWH$H6njq_AC@Ay0U>b%!oinq3}muEbY@3W*>drDl|q5bn2JYH3Y zCv?{}+?*^f_TuPpWjue>i zG3pCL`aPxko%>j4FB4J}IM-&khVz8=gK1{2T5@qhwd^+{uQHb`z4NBB>!OR0gh#v4 z42$F2_p2m+Kb)|#GJ4_Gn4`Oc1U4+_ipH(l5ABriiS5gr8`;m_&pY1}y|8HNFKQQ>T3+zopr0BcFwtN;K2 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/019.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/019.png new file mode 100644 index 0000000000000000000000000000000000000000..e82934483f6adcdcbf4284eca5e62cc3a3f07e7d GIT binary patch literal 1027 zcmeAS@N?(olHy`uVBq!ia0vp^6M>kYgBeI(&bq4vq(nWvY3H^TL^?1FWs&C!@$7I5a1Ky zT3j6d`0??NA0Pk!{~xGu6pV(zhzfysA1v+EDlz5@yzEbYJk+nYN& z^H%IrepmbYjubQBMyxY3P41ekV{o+4%XT7YuVga(Asf-jP;cRK9tt+eDAtIMXYf U4|Bs`u!2I|)78&qol`;+0HvN{+5i9m literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/020.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/images/020.png new file mode 100644 index 0000000000000000000000000000000000000000..9808b18a87218efa32401366c0a11ee0305c37a9 GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^EkG>8!VDyX;<~)otntkY{1d#d5?42-GsP?wcq#Ou26WD zV=nx<|7dSgZeyKD(xRAMuIrWtziU^J+wR$B|7Z$_DeE2cePNHnaugJj3%VCfUG1b3 zRIczw%!_q>a(|>rdf3U{_8Shp0n$9>BKayCy-dqhKH4sx&2fHuhlM6nsk?&LjC%?$ zr{FVdQ&MBb@0MK`Q;{X5v literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/license.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/license.html new file mode 100644 index 0000000..d0a7069 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/license.html @@ -0,0 +1,16 @@ + + + + CKFinder User's Guide + + + + + + +

      + CKFinder License +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/suggestions.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/suggestions.html new file mode 100644 index 0000000..1fa5dd7 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/suggestions.html @@ -0,0 +1,33 @@ + + + + CKFinder User's Guide + + + + + + + +

      + Sugerencias

      +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/toc.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/toc.html new file mode 100644 index 0000000..5f26733 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/files/toc.html @@ -0,0 +1,92 @@ + + + + CKFinder User's Guide + + + + + + +

      +  Indice +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/index.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/index.html new file mode 100644 index 0000000..a5f818c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es-mx/index.html @@ -0,0 +1,18 @@ + + + + Guía para el usuario de CKFinder + + + + + + + + + + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/001.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/001.html new file mode 100644 index 0000000..4f35334 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/001.html @@ -0,0 +1,25 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Bienvenido a CKFinder +

      +

      + CKFinder es un programa colaborativo que hace más fácil mantener y compartir ficheros localizados en un ordenador central (el servidor).

      +

      + Ya sea que usted es nuevo al programa o un usuario experto, vale la pena emplear un poco de su tiempo para leer la documentación completa de CKFinder para obtener un conocimiento completo acerca de este simple pero poderoso programa.

      +

      + Avisos legales +

      +

      + Se le pide su atención a los Avisos legales

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/002.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/002.html new file mode 100644 index 0000000..ccac64d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/002.html @@ -0,0 +1,29 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Introducción a la interfaz de CKFinder

      +

      + La interfaz de CKFinder ha sido diseñada para ser clara, familiar, fácil de aprender y usar para nuestros usuarios finales. La mayoría de las características pueden ser usadas con movimientos del ratón y clicks en menús contextuales.

      +

      + La siguiente imagen es una captura de pantalla de CKFinder:

      +

      + Captura de CKFinder +

      +
        +
      1. Panel de Carpetas : contiene la "vista de árbol" de las carpetas donde se puede navegar, las carpetas son formas de organizar mejor los ficheros.
      2. +
      3. Panel de Ficheros: Muestra los ficheros disponibles en la carpeta seleccionada.
      4. +
      5. Barra de Herramientas: Es una serie de botones que pueden ser pulsados para ejecutar rápidamente funciones específicas.
      6. +
      7. Barra de Estado : Es un espacio utilizado para mostrar información referente al fichero seleccionado, el número total de ficheros en una carpeta etc...
      8. +
      9. Menú contextual: Una serie de opciones que pueden ser usados para ejecutar tareas específicas en el objeto sobre el cual se ha hecho click. Las opciones disponibles cambian dinamicamente dependiendo del tipo del objeto al cual se le hizo click.
      10. +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/003.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/003.html new file mode 100644 index 0000000..3fada81 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/003.html @@ -0,0 +1,83 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      Panel de Carpetas

      +

      + El panel de carpetas contiene la "vista de árbol +" de las carpetas por las que se puede navegar. Las carpetas son una manera de organizar mejor los ficheros.

      +

      + Se le llama "vista de árbol +", por que se tienen las carpetas representadas jerárquicamente como las ramas de un árbol. Usa la misma representación gráfica que muchos sistemas operativos modernos.

      +

      + Operaciones Básicas

      +

      + Abrir una carpeta

      +

      + Para abrir una carpeta y revelar sus carpetas "hijas", simplemente haga click en el signo "más" (Signo más) en frente de la misma. Si el signo "más" no está presente, la carpeta no tiene carpetas hijas que puedan desplegarse.

      +

      + Vea "Cargado bajo demanda " al final de la pagina para un mejor entendimiento de cómo son cargadas las carpetas.

      +

      + Cerrar una carpeta

      +

      + Para cerrar una carpeta, y por ende esconder sus carpetas "hijas", simplemente haga click en el signo "menos" (Signo menos) en frente de la misma.

      +

      + Seleccionar una carpeta +

      +

      + Para seleccionar una carpeta y por ende convertirla a "la carpeta actual" para CKFinder, simplemente haga click en el nombre de la carpeta o en su icono. La carpeta seleccionada tendrá un color de fondo diferente.

      +

      + Operaciones Avanzadas

      +

      + Es posible utilizar operaciones avanzadas en una carpeta, haciendo uso de su "Menú contextual", las siguientes opciones están disponibles:

      +

      + Menú contextual 

      +

      + Nota: Algunas opciones del menú contextuales podrían estar deshabilitados dependiendo de los ajustes asignados por el administrador del sistema.

      + +

      + Crear Carpetas +

      + +

      + Para crear una carpeta "hija" dentro de una carpeta ya existente, solamente haga click sobre la opción "Nueva Carpeta" del menú contextual. Una ventana de diálogo aparecerá en donde deberá escribir el nombre de la nueva Carpeta, luego confirme la operación.

      +

      + No todos los caracteres pueden ser usados para establecer un nombre de carpeta, debido a limitaciones en los sistemas donde CKFinder se ejecuta. Por ejemplo, los siguientes caracteres no pueden usarse para dar nombre a carpetas ni ficheros: \ / : + * ? " < + > |

      + +

      + Renombrar Carpetas

      +

      + Para renombrar una carpeta, solo haga click en la opción "Renombrar" del menú contextual. Una ventana de dialogo aparecerá conteniendo el nombre actual de la carpeta, ahí deberá escribir el nuevo nombre que desea asignar a la carpeta, luego confirme la operación.

      +

      + No todos los caracteres pueden ser usados para establecer un nombre de carpeta, debido a limitaciones en los sistemas donde CKFinder se ejecuta. Por ejemplo, los siguientes caracteres, no pueden usarse para dar nombre a carpetas ni ficheros: \ / : * ? " < > |

      + +

      Atención: Al renombrar una carpeta, los enlaces o inserciones de medios disponibles en otras páginas que apunten a ficheros o carpetas dentro de aquella que fue renombrada podrían quedar "rotas" y por lo tanto no funcionarán. Así que sea cauteloso cuando use esta característica.

      + +

      + Borrar Carpetas

      +

      + Para borrar una carpeta, incluyendo su contenido, solo haga click sobre la opción "Borrar" del menú contextual. Un mensaje de confirmación aparecerá para asegurarse de que realmente desea eliminar dicha carpeta.

      +

      Atención: Al borrar una carpeta, los enlaces o inserciones de medios disponibles en otras páginas que apunten a ficheros o carpetas dentro de aquella que fue borrada podrían quedar "rotas" y por lo tanto no funcionarán. Así que sea cauteloso cuando use esta característica.

      + +

      + Cargado "Bajo demanda "

      +

      + La diferencia más importante entre CKFinder y la "vista de árbol " que se encuentra en los sistemas operativos modernos, es que las carpetas se cargan "bajo demanda", esto significa que CKFinder no carga todo el árbol al inicio, sino que solo carga un pequeño subconjunto de él cuando se abre la carpeta, este es un requerimiento de aplicaciones avanzadas para web como lo es CKFinder.

      +

      + Para indicar que las carpetas se están cargando, la etiqueta "Cargando..." podría aparecer cuando se intente abrir una carpeta.

      +

      + cargando... 

      +

      + La etiqueta desaparecerá automaticamente una vez que la carga de las carpetas haya terminado. Una vez cargada, la etiqueta no aparecerá más para esa carpeta.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/004.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/004.html new file mode 100644 index 0000000..81e540f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/004.html @@ -0,0 +1,69 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Panel de Ficheros

      +

      + El panel de ficheros muestra los ficheros disponibles en la carpeta seleccionada.

      +

      + Vistas Diferentes

      +

      El panel de ficheros puede presentar dos vistas diferentes, dependiendo de la configuración de CKFinder (vea "Configuración"). La siguiente, es una comparación de la vista "Iconos" y la vista "Lista" para la misma carpeta:

      +

      + Vista de Iconos +

      +

      + Vista de Lista +

      +

      + Operaciones Básicas  

      +

      + Seleccionar (Activar) un Fichero

      +

      + Para seleccionar un fichero, y por ende convertirlo al "fichero activo" en CKFinder, simplemente haga click sobre el fichero. Para identificar más fácilmente que el puntero del ratón está sobre un fichero, el área del mismo será coloreada. El fichero seleccionado tendrá un color de fondo diferente (generalmente Azul).

      +

      + Operaciones Avanzadas

      +

      Se pueden realizar operaciones avanzadas en un fichero utilizando su "Menú contextual". Las siguientes opciones estan disponibles:

      +

      + Menú contextual +

      +

      + Nota: Algunos botones del menú contextual, podrían estar deshabilitados, esto depende de los ajustes que su administrador haya hecho en la configuración de CKFinder.

      +
      +

      + Seleccionar Ficheros.

      +
      +

      + Para seleccionar un fichero, y por ende regresarlo a la aplicación solamente haga click sobre la opción "Seleccionar".

      +

      + Visualización (previsualización) de Ficheros

      +

      Para previsualizar un fichero en el navegador, haga click en el botón "Visualizar". No todos los tipos de ficheros pueden ser visualizados por los navegadores, pero esta característica es útil para imagenes, texto y ficheros del tipo PDF. En otros casos, el navegador le preguntará si desea abrir el fichero con la aplicación correspondiente.

      +
      +

      + Descargar (bajar) Ficheros

      +

      + Para descargar (bajar) un fichero, haga click en el botón "Descargar", el navegador le solicitará el lugar donde desea guardar el fichero en su ordenador.

      +

      + Renombrar Ficheros

      +
      +

      + Para renombrar un fichero, haga click en el botón "Renombrar" en el menú contextual. Una ventana aparecerá con el nombre actual del fichero, donde deberá escribir el nuevo nombre y confirmar la operación.

      +

      No todos los caracteres pueden ser usados para establecer un nombre de fichero, debido a limitaciones en los sistemas donde CKFinder se ejecuta. Por ejemplo, los siguientes caracteres, no pueden usarse para dar nombre a carpetas ni ficheros: \ / : * ? " < > |

      +

      Atención: Al renombrar un fichero, los enlaces o inserciones de medios disponibles en otras páginas que apunten al fichero renombrado podrían quedar "rotos" y por tanto no funcionar. Así que sea cauteloso cuando use esta característica.

      +
      +

      + Borrar Ficheros

      +
      +

      + Para borrar un fichero, haga click en la opción "Borrar" del menú contextual. Un mensaje de confirmación aparecerá para asegurarse que realmente esa operación es la que desea realizar.

      +

      + Atención: Al borrar un fichero, los enlaces o inserciones de medios disponibles en otras páginas que apunten al fichero recien borrado quedaran "rotos" y por tanto no funcionar, así que sea cauteloso al utilizar esta opción.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/005.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/005.html new file mode 100644 index 0000000..4712f49 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/005.html @@ -0,0 +1,30 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Barra de Herramientas

      +

      + La barra de herramientas es un área dedicada situada al inicio de la interfaz de CKFinder. Contiene una serie de botones a los que se puede dar click para ejecutar rápidamente funciones específicas. Esta es una imagen de esta barra:

      +

      + Barra de herramientas +

      +

      + Botones de la barra de herramientas

      +

      + La siguiente es una lista de los botones que están disponibles en una barra de herramientas estandar:

      +
        +
      • Añadir: Abre el "Panel de Subida", que puede ser usado para agregar nuevos ficheros a la carpeta actual.
      • +
      • Actualizar: Recarga la lista de ficheros en el Panel de Ficheros.
      • +
      • Configuración: Abre el "Panel de Ajustes", en donde podrá configurar y personalizar CKFinder.
      • +
      • Ayuda: Abrirá esta Guía del Usuario.
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/006.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/006.html new file mode 100644 index 0000000..666a37c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/006.html @@ -0,0 +1,49 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Botón "Añadir"

      +

      + El botón "Añadir" en la barra de herramientas , abre el "Panel de Subida", que puede ser usado para agregar nuevos ficheros a la carpeta actual, he aquí una imagen de este panel:

      +

      + Panel para añadir ficheros 

      +

      + Para cerrar el panel de subida, haga click sobre el botón "Cancelar", o haga click nuevamente sobre el botón "Añadir" de la barra de herramientas.

      +

      + * "Subir" es un término técnico. Se refiere a la acción de transferir un fichero situado en su ordenador local a otro ordenador central, (también conocido como Servidor).

      +

      + Pasos para Subir un Fichero

      +
        +
      1. Seleccione el fichero de su ordenador dando click sobre el botón "Examinar...". El texto de este botón puede variar de navegador a navegador, pero siempre estará localizado justo a la derecha del campo "Elija el fichero a subir".
      2. +
      3. Haga click sobre el botón "Subir el fichero elegido ". Un mensaje aparecerá indicando que la transferencia está en progreso.
      4. +
      5. Espere a que la transferencia termine. Una vez completada el "Panel de Subida" se cerrará automaticamente y el fichero que subió será seleccionado en el Panel de Ficheros
      6. +
      +

      + Mensajes de la transferencia.

      +

      + Los siguientes son los mensajes que podrían aparecer mientras se transfiere un fichero:

      +

      + Ya existía un fichero con ese nombre. El fichero subido ha sido renombrado como "nombre(1).ext"

      +

      + Indica que el nombre del fichero que subió ya se encuentra en uso por otro fichero en la misma carpeta, para evitar un conflicto, un número progresivo (aquel que estará entre los parentesis), ha sido agregado al final del nombre original.

      +

      + Fichero inválido

      +

      + El fichero que subió no ha sido aceptado.

      +

      + La causa mas común de este mensaje, es que CKFinder ha sido configurado para NO aceptar el tipo de fichero que está usted intentando subir, basado en su extensión. Esta es una restricción de seguridad. Otra causa puede ser que el tamaño del fichero es demasiado grande para el sistema destino, en este caso, el servidor deberá ser configurado para aceptar un fichero de mayor tamaño.

      +

      La subida se ha cancelado por razones de seguridad. El fichero contenía código HTML.

      +

      El fichero que subió contiene código HTML. Por razones de seguridad solamente ficheros con ciertas extensiones son permitidos cuando contienen código HTML.

      + +

      + Por favor contacte al Administrador del sistema para obtener mayor información referente a los tipos de fichero aceptados y sus límites en tamaño.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/007.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/007.html new file mode 100644 index 0000000..5682796 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/007.html @@ -0,0 +1,20 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Botón Actualizar

      +

      + Cuando se trabaja en un espacio compartido como lo es CKFinder, en donde docenas o incluso cientos de usuarios están trabajando en los mismos ficheros, podría suceder que alguno de estos otros usuarios realice cambios en la misma carpeta en la que usted se encuentra trabajando. Para recargar la lista de ficheros, solamente haga click sobre el botón "Actualizar", esto le presentará la lista de ficheros como se encuentra en ese instante.

      +

      + botón Actualizar 

      +

      Por ejemplo, imagine usted que tiene que crear una página para un nuevo producto de su compañía. Usted abre entonces CKFinder para obtener la fotografía del producto para ser incluida en el sitio web de la empresa, pero cuando abre la carpeta "Productos" usted no puede encontrar esa fotografía. Toma el teléfono y llama a "Beth", diciendo: "¡Hey Beth, la imagen del producto no se encuentra en CKFinder!". Beth dice entonces: "Ops... espera un minuto". Ella abre CKFinder en su ordenador, sube el fichero con la fotografía desde su ordenador y le dice: "Ahí está, solo Actualiza". Usted entonces dá click sobre el botón "Actualizar" y ¡voila!, el fichero aparece ahí para usted. Es por esto que CKFinder es también conocido como un programa de colaboración.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/008.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/008.html new file mode 100644 index 0000000..161bd7f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/008.html @@ -0,0 +1,59 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Botón Configuración

      +

      + El botón "Configuración", en la barra de herramientas, abre el "Panel de Configuración", donde usted podrá configurar y personalizar CKFinder, he aquí una imagen de él:

      +

      + Panel de Configuración

      +

      + Todos los ajustes son guardados automaticamente utilizando las denominadas "Cookies" de su navegador. Las "Cookies" son pequeños ficheros que contienen información de configuración privada para sitios web especificos.

      +

      + Para cerrar el panel de configuración, haga click sobre el botón "Cerrar" o haga click nuevamente sobre el botón "Configuración" de la barra de herramientas.

      +

      + Opciones de Configuración

      +

      + Todas las opciones de configuración tienen que ver con el Panel de Ficheros . + Se usan para controlar como mostrar información en ese panel. El panel de Ficheros reacciona inmediatamente a los cambios hechos en el panel de configuración.

      +

      + Vista

      +

      + Controla el modo actual de vista del Panel de Ficheros:

      +
        +
      • El modo "Iconos" mostrará cada fichero como una "caja". Para las imagenes, una pequeña previsualización de ella (llamada miniatura) será mostrada dentro de la caja. Para otros tipos de fichero, un icono será mostrado en su lugar.
      • +
      +
        +
      • El modo "Lista" mostrará todos los ficheros como una lista, uno abajo del otro. No se mostrará ningún tipo de previsualización en este modo.
      • +
      +

      + Mostrar

      +

      + Ajusta la cantidad de información disponible en el panel de ficheros. Para ejemplificar, he aquí como se mostrarían los ficheros cuando ningúna opción está seleccionada, hasta llegar a tener todas las opciones seleccionadas.

      + + + + + + + +
      + Imagen + Imagen y nombre + Imagen, nombre y fecha + Imagen, nombre, fecha y peso
      + +

      + Ordenar

      +

      + Controla el orden en el que los ficheros serán listados. Puede ser alfabeticamente por el nombre del fichero, por fecha de creación del fichero siendo el más nuevo el primero o incluso por el tamaño del fichero.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/009.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/009.html new file mode 100644 index 0000000..2032363 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/009.html @@ -0,0 +1,18 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Botón de ayuda +

      +

      + Abre esta "Guía del usuario" en una ventana nueva.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/010.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/010.html new file mode 100644 index 0000000..62ec6fd --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/010.html @@ -0,0 +1,24 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Barra de Estado

      +

      + La "Barra de Estado" es un pequeño espacio usado para mostrar información relevante al fichero seleccionado, el número total de ficheros en la carpeta, etc... Se puede encontrar al final de la interfaz de CKFinder

      +

      + Si un fichero es seleccionado en CKFinder, la barra de estado mostrará información detallada acerca de ese fichero en particular, contendrá el nombre del fichero, su tamaño y la fecha de su última modificación, por ejemplo:

      +

      + adivina.xls (2444Kb 21/03/2011) 

      +

      Si por el contrario ningún fichero está seleccionado, se mostrará el número total de ficheros en la carpeta actual. Por ejemplo:

      +

      + 2 ficheros 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/011.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/011.html new file mode 100644 index 0000000..baa1972 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/011.html @@ -0,0 +1,24 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Avisos Legales

      +

      + CKFinder, incluyendo su documentación tiene Copyright © 2007-2013 por CKSource - Frederico Knabben. Todos los derechos reservados, por favor asegurse de leer y entender la licencia de uso. Licencia de CKFinder.

      +

      + Los iconos usados en la barra de herramientas y los menús contextual, han sido diseñados por Mark James. +Por favor entre a la siguiente dirección (URL) para obtener más información: http://www.famfamfam.com/lab/icons/silk/

      +

      + Marcas Registradas

      +

      + CKFinder, el logotipo de CKFinder, CKSource, CKEditor y FCKeditor son marcas registradas de CKSource - Frederico Knabben. All rights reserved (CKSource).

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/012.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/012.html new file mode 100644 index 0000000..d94085f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/012.html @@ -0,0 +1,39 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Menú contextual

      +

      + El "Menú contextual " es una serie de botones (llamados "menú") que pueden ser usados para ejecutar tareas específicas en el objeto que ha sido seleccionado con un click. Las opciones disponibles cambiarán dinamicamente dependiendo del objeto que haya sido seleccionado.

      +

      + Menús Disponibles

      +

      + Los siguientes son los menús que podría encontrar mientras trabaja con una instalación estandar de CKFinder.

      +

      + Menú contextual para Carpetas

      +

      + Aparece cuando hace click con el botón derecho del ratón sobre una carpeta en el Panel de carpetas

      +

      + Menú contextual de carpeta 

      +

      + Menú contextual de Fichero

      +

      + Aparece cuando hace click con el botón derecho del ratón sobre un fichero en el panel de Ficheros:

      +

      + Menú contextual de ficheros 

      +

      + Menú contextual de espacio vacío

      +

      + Aparece cuando hace click con el botón derecho del ratón en el Panel de ficheros , pero afuera de un fichero (en el fondo):

      +

      + Añadir nuevo fichero

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/013.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/013.html new file mode 100644 index 0000000..b3016e6 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/013.html @@ -0,0 +1,29 @@ + + + + + Guía del usuario de CKFinder + + + + + +

      + Compatibilidad y Requerimientos del Sistema

      +

      + CKFinder es una aplicación "Web", esto significa que está hecha para ser ejecutada dentro de un navegador siendo más fácil distribuir y usar en cualquier ordenador.

      +

      + Actualmente cualquiera de los siguientes navegadores se requieren para ejecutar CKFinder:

      +
        +
      • Internet Explorer 6.0+
      • +
      • Firefox 2.0+
      • +
      • Safari 3+
      • +
      • Google Chrome
      • +
      • Opera 9.5+
      • +
      • Camino 1.0+
      • +
      +

      Algunas características dependen para su funcionamiento de ajustes propios del navegador de internet. Por defecto CKFinder debería funcionar correctamente, sin embargo si experimienta algún problema con el Menú contextual o quizá sus Ajustes no están siendo guardados, asegurese que su navegador está configurado para "Permitir a los scripts reemplazar menús contextuales" ("Permitir a los scripts recibir clicks con el botón derecho") y además tener habilitado el "Soporte para cookies".

      +

      Por favor contacte a su administrador en caso de que tenga alguna duda.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/header.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/header.html new file mode 100644 index 0000000..f31d331 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/header.html @@ -0,0 +1,37 @@ + + + + + + Guía del usuario de CKFinder + + + + + + + + +
      +

      + Guía del Usuario de CKFinder

      +
      + Visite el sitio Web de CKFinder
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/001.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/001.png new file mode 100644 index 0000000000000000000000000000000000000000..8ce1e7217eff87f042b618e847e0f9135a32852c GIT binary patch literal 34236 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 WDiNkz4u^vP0000T4g JC@;cb4FK3@53&FN literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/004.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/004.png new file mode 100644 index 0000000000000000000000000000000000000000..ab397f17d752a45b15e7c63ed6dd04f20febadf9 GIT binary patch literal 619 zcmV-x0+juUP)WdH}+0~Hb#3@suAYXATM2XskIMF-gf6%rOVVg+6N00009a7bBm000XT z000XT0n*)m`~Uy|Fi=cXMF0Q*$ar1Keq@i2bJm4*=Y({*xt-sRgy)ur?xvCMwyE>U zxb)f0#M2M{MG$AI<& zxC$a1ba!z-Xi*$Q!8`l_Dt-dp9K5MGxgHOkB_=Ov?6p>sM$Q)cE`&CDzrL3j`cFC7 z3^Ldf0rnA$f9BTS2E4C03c*%A5U6*=Sryjb$W`#d2B2nR5ebsU*-rRS{TXrt>THsGM<^iO%~ zfufn@8*n)dR5TQnpW1h@rBhR&>+w_a4p!dS_2Xi|2fR}_YK8bV^uwz{y?$KkDN+wo zdX%`5vbwHaNfI-{gjV>Rqa#>pGdO||E<^=qUeQac+5)#H6ybE^n!KkCcsKCZ13x?L zQt~~;CzB97d3-)@k1uW?=6AcT@#HDX&W^NHGJpJhmSyRs`7HFt7xO9Sd+A17{QhFO ze2)uU9SXl34Rw4*cx2YDzgQcOhB}^|aL&`nL^mJ2;ELz5q`57f#+h^UeCL|;c)Khb&jZ@4e=r+C=EMqjZnBJ%AU!uS9H002ovPDHLk FV1lPV8e;$e literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/005.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/005.png new file mode 100644 index 0000000000000000000000000000000000000000..e8da8865a04addc9a0d6b2974f54006b977bf1d3 GIT binary patch literal 1361 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/007.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/007.png new file mode 100644 index 0000000000000000000000000000000000000000..652356428045b5f73e7a1cf476a4c22d262db5f1 GIT binary patch literal 22551 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/009.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/009.png new file mode 100644 index 0000000000000000000000000000000000000000..7e92cacbbaf9dea593713d10c75f8f345e6c1c89 GIT binary patch literal 1854 zcmeHH`8U)H9Q{s1BwJBZ5l*(3H>WHSW0@GsljY%M$&$&M$TBpZio}#HV~K1NW5#Q& z4W4c6lYM9~$ZiZ-!x)k;ulMx+i+9fZoO3_-o_jt&-E;0I&f3yMNZ`Bx002T}rbadZ z0Fge@=lG#V`@#*B#SxuBBOTC&!Jh7D--iJ*cE0|e0N*(Dj2I8^@x|TcqXRy)nFaD+ zi&wzOK-=`lIuU5<7ykw&5C)(;b@ABioWUUx>N^@X8w zGW^^ou8Mc6L6oU=Z48S~og^d=VnG|WiVGO-FPIm?+4*bg%pF8Vk%lseng&5&^b)VW zKu^fP{*w9$QLjo-%sLOg#tWmOLA$3Mvozc_mYf&s$_o5OvBeQL@wenCVfLEw*)~qB zoR$K7UB@|x8i(;x@r3Z+>r!wDS=n=fmU+S-jSE$}s@U5I%nS@}zru{P zH;)b8=OTKOl5lzuMC#+ysE)FD9>tu{37%j=5aX2M&3D7X$0Ngz1^WOBY5bxkTeSs}C8*8#9ipU&p)ed8{79Iv3CG$+H*R8&&VdKvOl{=sF~qE@K8nfo78a z=-bcCW}jM5ZR6*gVHXg(VsS4;zslIM3(t;ZmHExvtV)@2b|j7^Pw5)$^BC!eEA_50 z_#{iI>VitJZT6Q30QPUxgx|%#maC(m8AQ>ov&a)YzJifFv|qpZAXP5KT@_ppbHuVF zE43k3)*8cTD}t-_R%suGX|}3B^zdlJ{-mr?3g_jogMRJwN&I@g|1)bWDgbg#7;^)7 zBohL47)`woC(w3`utk#iv)z}?^fh296Heq@OHecy)0j^26RbX2)FGBIJ=7ziS&b3A zn66@Hh@>WcUg_E2&{2a&D@)UVaa#kdgjfagWr2wr(u-O$Rxmf+yjybc5{_Fhl{Y*llHr9D{CIt!Y?0)bVy25fb3C z$KPzHE16s&r>&=xap7E&V#f4DDok&@bkq;^kyyQ-e*}d&DYlCV_y~ZvYJUWHqtwS*X8lyc9UoVe5!e? zKIS!H5t4^Q^#k=QsOk}arziE*cho4~FZQ>c+3`XwM`vH=3sRR~ZQ$bsNz~M;al_ng z!ViZ!x`JBFxd+^PQc_neFzq4g4cEBN7DZ}U5s=+6rFNLPAAYb9h*Mf>>K5Eu$LGB= z@0wH9wUINYI+tg^3sn^f{yV#fOd@q~B9`=*<5=PMvso0TU^3~bUArPscMTp{Z0O{V O&trzPG%CM&H~Jrr@6(C^ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/010.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/010.gif new file mode 100644 index 0000000000000000000000000000000000000000..13f9f0487346b78fd0f97bee47de42799fafe365 GIT binary patch literal 1561 zcmb7>>pznV0D#|Jnpw6`IS{)=w%B^BqwVw*5^p4GCn7IqF%~s~t z(iAJ&#{6D~YR4_)Cv;mX(JAH4InL?)2j}_le0x4UZXT}Nwud4SmcSbT2uoLL2PR?o ztMbX~{+H9t!nVpUSi8Y?>^ zXi0uQ{aqp{kC8F7<4sA8aW|ptoEA_flfc@-+)ggsUaC;suB(%A>Mz328qZ3?>-&WA z=VDlqz^U#lP&||N7Qwn&&)B-MR$gBENm*YhPnA&8$t}}m!Z(hR z7gcZHj(2pl!OCPX?r?cWrm!fcPv5D1aWB6eR1V*U#+%E!a?3k;{r!JD7^vn*p*;Ch zxTjw8@?O_#&2?2W{G=*6>Ojk|99Ct+57S_%9Iib(GTAqIm&>^lSUprWbCUr#C4zAQ zGBIcRp&&BMt-SE!M? z0G~dM{OkV8o!Lx};9By(-Y8o#+Ba@#c$j-@4VH6Y=T`w*vy-}1W z6p1S&(wjmCv#PqLw(hq4P8H);!@c{BO;TBXbIT)zQq$U|z4h=>$M4nZj1yrI?cF^> zVt;Qk)cL&mvD9kay8Q#$1_rNkh}%O*`lO+10tWE~fguccjPQbjLwQ#GxysMs?pgRr zf*Q;wwIXm!%%iyzy5}o4_mZ&2h7SlnA1%kSNq1v#qIU-fVw4IPlnU)DJl8KT7t=FmXn^?%R6o z;+)535yy0Qfbg1`sW_8?b=0XMQE~n>99rmIwmPCgWXosj8*MjLC{%6C1~YpQ=|B_N z%%5Adg(1%M${#2p5lE}DeJKa*Utcp1grsEOE4n>Px9C;u1(D|5p5py~ZzbiOse*7w zbYlPwf%5Z4AY)Cv!GPU=7lmhWK5t96{jjVXiJ7)MQi9w|X$n5a^c;NS$Mp1-CX$Zx z?4?IeP1un``Bdj6{-Ay-8xhTTSADRh6_<%0J_0%|000^S4Y0yRZ2pRxOEg|L-Ebvj z+=|IsEu~Q^Z_andmJ(ief!smZK+GhX|QQSr`#u?By_fGOa(xV{)FfW0y+jg2iqA z*w*WBw1&L%0u_m0w(pL{a5E)G2ATiL*yy{4pu1gnd15Dk#Lflw3z17bsrJ@iK=xG} zdW>pp?f$@m`Ji0UC7`CB=<+>}3 zG~`De0h(53bLy~004<;mGg2W;nvaXLT^}?}CzIC(I-BgxQz?2fPq^WX)F!7a7P#!U zgA7;23TF&Ag}k(ILIB1pz+KO415k1*;DNg9%d#V_FSHgR)zscKu)}d z1B0{7e|*n9=z`zmSpLX$=4JcG&u%K@8zhJbY6tL;3d2LP4SQ2itK8Mc=z^GqHA2kR xO7d@UQ%OVx+P0UbF)g0rQ1*#%haru*a*9jM5E(_dw^|KNC2w;IB?7?Ce*n{G%y<9* literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/011.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/011.png new file mode 100644 index 0000000000000000000000000000000000000000..50f97206966bae802af5d6740bb47080b5e94ba8 GIT binary patch literal 1895 zcmeHH`B#z&6#WpyEtO2ot)#`Ky|J{0F()L*rEoHva+w)T(_FC;EHW1~HJ9w*z60S3 zWd)&zVwxtAnz#d+qGYLQE@?V_rH;*iG3U%X=e~E(eeb7x&V5N|9c?w$jnn}E(6qP1 zo&x{~a-AEfLf3mRv{Se~^hh`t(#cStOC0CchA=%?` z|4QlzWUYKzmb%@t&NESLF%l?1RVI=z9yV#cwH;~uk8OG_DScFDtsEFSOC9ac*Qr@fHh zQ&J}`X^^G}Z)FK7*`k=V*5tg#1X^=)L0ba7Et&o*HD8=g>rAD0=ah-kN_%rldJEY7 zMfV43+B#*@%{?5UjNd*q^CW(uE*Y$i1#1&PLDIZ{+SpjvG*%-V zsTL~uB1JvemR@wfFaT4G+s&rEk0Clds=5 z^-s19&-4$CPs!)kW@m>La|2`ZL*wI$v8maanaSz7xrNUQAozLR$^Yv==KzhOM%X=2ekR8OD~~`ATbR5`rC9 zhF4PZ@-d+wG1Lhati1bZt{PBtr~Fp(;I2?x2tku%nM;O+!@?hlR8Ka*-)52=q{Ngr`-cq))Og5mH`zVKzyR`CRy5-X8p zSpn=6?tXhN>>Z6F5(TZH4zZFZ6rR>w{&JW_s7R{LP zZ?NS#I4FNRC-J0Vu1KuKt`=v{AE>R>LG_wt;#?Tn|Wes zRAyq?31_sMvN@Rj+_Dr%wJOqTn|J_$0Gaqem5I7m`cgc20J0bvvi#E3Y-IWCB*|TT zfzDpKen9gr(z_5xtGtbj#~jz53X2&xqY<{u$Cwj*Sqw6&99rpz{`>H8gGrSC*Rn7~ zb+-*^FJ+&Kr)70_W~xX!wP08?ssBF57yc>S{g*UpiD4r3oQ8@d<5?h(wdAO!efM<8Af#_VY4pvs z+kGXyjfnCWOwo1t;a%`>{e`TaB$$$0@@n@@gW}DVW;D zvXLgj_I{+9OwX9U7JuG=%}%#Q#BEowBpVUBFz2bD#^Ajb?@woM>YC8`G|x|(&Mk-$ zOb_I95nit1ME=)_trVEj#iMAsF5S9SMa&G2G1!FYfmdwR*(MGqgcbs*yr4fcwSTWh z_Z$+=;e8eFzO_31xoi$G+>xs+iuVO|-BfSzvY1XN;QB#!%BW2~EdOGpFRMn_*?j1r zfwdtwB~Qgaz(EJK@gQ?mc~tj77y1M744%hA?zG5o_Yj|X8aR|N+#?jgY>1x682wp zc6P?eBFeRLHppgeh{PvD5^;3WHmK3F@3E^5VW_Nz(4(^%wspi^_O9PQlReH6`w-(9 F`wzE?)tCSP literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/012.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/012.png new file mode 100644 index 0000000000000000000000000000000000000000..a726f048ae489e3fb667f2f13a57c26b529f4adc GIT binary patch literal 3369 zcmd^?c|6qL8plT}Bq|w6{Hkd&hEk#WMPwNUSt<--ERAfTEK#Lc~}KgP)yY zLKn;eygWcVy^YiZ7V}l+sy9?MGZtkt=>0syW?BRaO#M#XO#7E@?iwQ|qMVtk8 z9r(O;4dDNj4jsO~f8pM)B=8tv;RON-iu|5D0yu7T!!rYRQf;?P#Wo2nKfe=$bOf2hqSJ#(Y-<#VwR8DA#>3kVSewEl6 z{$=7odqx_2Mi~`hEA;>eAHuFNTeCFR#sQotJ`bq+Z!9qjSbf3=E~+Ko5R^JwW=zurppAy3U7 z5Km(t;CaVi?KUi=zvm?dEn}OKbA1*8U6j`vjG0SVi$@1if=ah>+Bu}Id4HuG(hVbh z7vCd8@x$S5Tgnc+x+%9vRXw-h&aZ%`U8bQN@-a1DBht(ano`CS@=#Rh(81A(0&H`0 zC`aiT{q<29E5=iT{k;i8g2D6z&YKii8Wl@Ut zWuU{je)@n5!DYZ#u8E1!A^l99xEaV{CnAj`9~qGrKa*MaI`#FVUqvL$Q)Y@gkDi#G zp8kr$xqYPq*Hju9_ncBLfPgMVSv*1Z^H?SCBJ=Bs;_jZrKXp=@= zKhTU6C8Wc{&9vZOo}7h>Xp@c_U67AklTuY_KR#7zf}hX7{I=F}lbpA@S{CnDBcfS# zyUH>(bGSM+v-~9Dh-vdZ(HQLaH`0!Vl5UF6IsP<9VZ`*TWi1v%%p%|0B7|?TuMcpNsSZv-e_CPzk@`mr+ zj5NHg;B9<-TS-14!K(~8hv&-Y$9#ggyyJJ`maVVvY|Ey!wzal?c|lUJ@NpMHRpDTk zfV_bW@b$ux0xj!v@T@d&vBU0$}l%iBw%MQgwdci#cB?PXDKxr4P0={pi^aQHjCTV|! zl)#k6GqI-k?~uMT^<*qD0*>OkviQt5*}sDBlL84gA6DMEhB*tIgjWa(o>_~=Y@4u9 zHU@o)rtneg9yun^lhL@r-K3!c*ys^pqmT{A71;|8k5+;$X3P6^V_CSd$ADD;TnEYV z_g}6MT3w_i@5`;jQo|}7Gmhnig^@JXZHb4|8X#8(n7}8xIR2D4c3%rPHGfUa7()2d zv`mlam?)B#*gI}Md`Mx27fd50%JXP5f9Vd|>YP}MX)Mzycjvb;i9JYu~ z{lUJoC7In)pS9Zl=xo61+|)cI7^p}L13A9CAT^{VEq^Q&fds(xC;rJ5xChDox}{Qf zbs$}g;P#&R$>!91AHokUdTa@1P3QDPlfL`eTvTC^y?|`!@WBUp<|RWOIz^wdu% zD3jbMF`J9ALttY}4DO>bv{EcS>2rRu7?_y_d8`G6iTc?L^RmxGo(@hZXWrGQ_SP5O zh>9ykj2!*c!F5RzWg5K=5p}=(hkJ0-F}EkZzJTA)SncqB9TVXT*VJ`W}1$ zDy`MwVSB-0I7yf60W9RtPuchMxKVLnAO|rb4g*jZp{80Y)a{lIK+E02O}zkGnQYZ8 zn*hnnK)DRVYfzXqIZM5DhH0Wl)#?~(E< zQ?biSspr)+f77Zowz1#0e6?XN4o5 z&WuJZ?iutL4UnY^I%_iKg9#m{y!A&9`D>z9gT|85*7c2Qr-rsQ@nd9AzGX-e zW);m}JIR?u+MnQ%_*7Z1aZ5uJCLE9=VVEZY%Rv%^{s{ zfaEwUjb*hPi8E9l?$ur9?|jmS(!JIzBbRh3R5wZ)GsmHw&@=4@3oP+>!@7SaG8xE9 zZC)+HB{kPk9tpFjPOq;xoGI@_N5M8yS-Y_gyHOrZ;CmTnsjjSKFeHNiMzIx z$_O-%0XPg@bptq9W?`Ww8!rzJ2v7n-=@giVW*e}dsv#vMdqvS2oPLCn-vFKBJ$V_R zK)}TU^{fsJ7^whq<~FAPb_w`6xdK7(opr=Wq>5(3@y_L6E1*aq1c}5`rp&z61soa# z6w)i_^!?z{@7(tKY7YTD?djNzwn!Dg29%8*Q-2Di1&@RSSIqi75%s7e=mf?T!=yhi e3-a^d;GXOm*_(nfuld~wfpp=9S|u8`A^!k{AYC*7 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/013.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/013.png new file mode 100644 index 0000000000000000000000000000000000000000..7d1ba11a064e8badb8087ed456324ad425038ed9 GIT binary patch literal 4037 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 Y3ysuc{RL;7{{C{bH6ExJsac`_2j2LcOaK4? literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/014.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/014.gif new file mode 100644 index 0000000000000000000000000000000000000000..39aa1bbb0767cd755ffa756f117d252d49c77350 GIT binary patch literal 3005 zcmV;u3qtfqNk%w1VQ>I&0J8u9NOhPfOlWD7w2-#drpe?~gsYIQus>;weWu7~i=a1L zc36IxdY!Q*J4Mse)BpefA^8LV00000EC2ui0B`_s000F4(8)=wy*TU5yT?x`j$~<` zXsWJkOG<7m&vgAdcCPO=%>Tfk$R{isXT+m&c}g;$Oeb_&lv1xeD|Xw%albh&c&rkW z&m}W@{ZO;d?)Nw@|I+JQX8=$TAO;8m3IPEMhK2wD2M2rwiH!w)2m}NJlz@N?0tE|- zkDs3flLUbR3iLTn)4ArQs;;E{xu%@)Ov#Gh-MUhvQ6)JuolA!>9VPPWm6t_|stjcEdA4y{ zweaL61)zYD$UoQUvbsxCFSb4jJkCP=va44B8Y|m0+>=;PYvdZEeXMJ+QP*zFa-~5A9i`^2m%e@2m_t^2^&a^ zfJ)!_HOFEIXysPAtj7 zbI2lne90Xnei)-b0|1QD>8{aYn=L$twi!x6tf*4gWAR#I&mwA7mhHOsE`v*foB~%0 zNHvfDrvpomo%V z?btK|)GyOcSCShxvshG;f3u1p?8*zx1h&P_poUsZV~6^3etm@_bH>*AsVUC2D3X;! zJ3|Rg(UFw24TT`i7uqZeg`(I0-@G8lbjC9mh}S`s5z>GH>tQAGn%zcIQZxzCC}nM$ z51Q>OGYyXM9}I}(M*@Wof(#+Sq%OgRJpvDdbr6S)b616VT3E;)=JpQB54ePkQNfIK2QA5ruW=4xc zD&{P~F(ZG}xJWhvk0`^EktOTMN@M_ue{t~~iZEoQpZu|K1n5v>7*5Ljp&Qw^dA}i&2Np9wC z8xrJ-cC0iF3FI>WF=U#+GyN$|ls(0P6v~omeE3e`fsdgK4Zxo6fhez0XigP)CNDKA zo0FAupspcFjdsd1VVX{!9^_8Fm{Uo@tS6cVum!^^kksi^qKNie2QM|W0J5kMeuL2# zQ9F3jlm3Tqbfjcuyg`kf#08y{u;?@Q6V;-i4rrCoQJ7$nkwrnKVut!&R~ul=t_%~0 z%cR=VtQ|@N)$r2MZa4Vi$+t zgO6a#C`!&$B|X_l1Z>M|UREBW5HHOIYh7_PZDsd8BH=|)pvkmh^ zU{$5(fOXNHis>l=c(xd@`b{u`X}m!nS~xD(aw;HDht}C-r5kU0N{JAF4-cz!#drLx zf5-a78fKBC|9$dR5($U}pwj`o`PM`Ez&ut|;~;~`VR^$W=Hbaxe2O42pTnGtsC}}C ze?UP00@4cSO0YI@*bAmR*`B^6&`;CAc>kV;}= z-eCX8UGD#S#g39>_pVUP>J9F~eX;P8-@-a(TF080&j#^3B}Ga8E#P$Qt^@+r(q&># z4&l0ZCEXbQTw(f8n>!>PVZIVw58^Pw2Y_oPhQh&fA!K$7$YThc09|07+}6cL@Oe}J zj)+KE%ohIxY9Yoa5;iZU79_1$h4hmfowva)4`{WZu|_uivDm^yub9G2k@S-WkQ)O@ zMMhNJEGlUOwQ*T#Y4J+3du`R$cT5I)Hu03QdvJr)PPEzyoUlY#2Y3lS9yfV~i2L5x z?yO$2#{tq0S@<2O=#HBB*b@jEf@~^rVeKl`wFyHI!^Bgo<~8>x`A8RoD9Y_>2hYu| zb`6J5&`^1W7_d5cp#JxKUxo!IE2<XR z@XL-=?Nk>r1{2@Yaq;Ct+qAJ9zwJSSF2l%j8!2l$Npk7UrDWT&q4aPR!RTE2*3!wIYW(RbVf(r!rE3pSa3TQo{ z)Eh^_8H7_mJ&{7R(+vi(6PNdYRzy@q|UV;MHcP2~qZ z@xlt)^M5f%f3Pu22Cx82#|-=j8q)WHM%Y28WkP0RG?Y<>^%i>yzz}PQfrB_|D58Uk z1^^ut7m1P{Em3tpWrP_>JcRcVDl%TnS6;H`8fR#T#4tx~FpR`l1;BWWSYV9G2n5X7 zj9HM3(8!C@IE}w(ja=}I*w_WzxQx}bQ;<5CH%?fJS?( literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/015.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/015.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9ace9480d0b88f962936b4a5414ad33e84242cc GIT binary patch literal 3119 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 JlNS&H06U-fy}JMa literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/016.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/016.gif new file mode 100644 index 0000000000000000000000000000000000000000..dacdada00c5b9b62b456c2032228063ee49c6b52 GIT binary patch literal 3354 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 X1*(e&dW#>hpbXle4*H-N5CH%?v)?#g literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/018.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/018.png new file mode 100644 index 0000000000000000000000000000000000000000..64ffd7c318b9d37795a0dddbe2a30cb70cf5151c GIT binary patch literal 1269 zcmeAS@N?(olHy`uVBq!ia0y~yU}OZc1vr?2q~duiS0E)?;u=xnT$Gwvl9`{U5R#dj z%D{e;SyaeWT}0|;Cr|-8d@BeIx*fm;ZK886+f`@_J%%n;xc z;#yoB{`m3nj~^fZ|NkGTa1@M&z=#TgcONY80drZpr;B4q#jUr~xVsJ;@VFd*`}h4F zUB4wWH$H6njq_AC@Ay0U>b%!oinq3}muEbY@3W*>drDl|q5bn2JYH3Y zCv?{}+?*^f_TuPpWjue>i zG3pCL`aPxko%>j4FB4J}IM-&khVz8=gK1{2T5@qhwd^+{uQHb`z4NBB>!OR0gh#v4 z42$F2_p2m+Kb)|#GJ4_Gn4`Oc1U4+_ipH(l5ABriiS5gr8`;m_&pY1}y|8HNFKQQ>T3+zopr0BcFwtN;K2 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/019.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/019.png new file mode 100644 index 0000000000000000000000000000000000000000..e82934483f6adcdcbf4284eca5e62cc3a3f07e7d GIT binary patch literal 1027 zcmeAS@N?(olHy`uVBq!ia0vp^6M>kYgBeI(&bq4vq(nWvY3H^TL^?1FWs&C!@$7I5a1Ky zT3j6d`0??NA0Pk!{~xGu6pV(zhzfysA1v+EDlz5@yzEbYJk+nYN& z^H%IrepmbYjubQBMyxY3P41ekV{o+4%XT7YuVga(Asf-jP;cRK9tt+eDAtIMXYf U4|Bs`u!2I|)78&qol`;+0HvN{+5i9m literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/020.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/images/020.png new file mode 100644 index 0000000000000000000000000000000000000000..9808b18a87218efa32401366c0a11ee0305c37a9 GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^EkG>8!VDyX;<~)otntkY{1d#d5?42-GsP?wcq#Ou26WD zV=nx<|7dSgZeyKD(xRAMuIrWtziU^J+wR$B|7Z$_DeE2cePNHnaugJj3%VCfUG1b3 zRIczw%!_q>a(|>rdf3U{_8Shp0n$9>BKayCy-dqhKH4sx&2fHuhlM6nsk?&LjC%?$ zr{FVdQ&MBb@0MK`Q;{X5v literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/license.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/license.html new file mode 100644 index 0000000..b8c6319 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/license.html @@ -0,0 +1,17 @@ + + + + + Gu�a del usuario de CKFinder + + + + + +

      + CKFinder License +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/suggestions.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/suggestions.html new file mode 100644 index 0000000..8806100 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/suggestions.html @@ -0,0 +1,47 @@ + + + + + Guía del usuario de CKFinder + + + + + + +

      + Sugerencias

      +
      +

      + Formulario para sugerencias

      +
      + + +

      + Sus sugerencias:
      +

      +

      + + (abrirá una nueva ventana)

      +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/toc.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/toc.html new file mode 100644 index 0000000..ee5bcb2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/files/toc.html @@ -0,0 +1,93 @@ + + + + + + Guía del usuario de CKFinder + + + + +

      +  Índice +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/index.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/index.html new file mode 100644 index 0000000..50e4d98 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/es/index.html @@ -0,0 +1,18 @@ + + + + Guía para el usuario de CKFinder + + + + + + + + + + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/001.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/001.html new file mode 100644 index 0000000..f734b66 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/001.html @@ -0,0 +1,27 @@ + + + + CKFinder käyttöohje + + + + + +

      + Tervetuloa CKFinderiin +

      +

      + CKFinder on ryhmätyöohjelmisto, joka helpottaa tiedostojen ylläpitoa ja jakelua palvelimella.

      +

      + Olet sitten vasta-alkaja tai kokenut CKFinderin käyttäjä, + kannattaa silmäillä ohjeet lävitse. Aina voi löytyä uutta opittavaa, + vaikka ohjelma onkin yksinkertainen, mutta tehokas. +

      +

      + Juridisia huomautuksia +

      +

      + Katso Juridiset huomautukset. +

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/002.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/002.html new file mode 100644 index 0000000..77ac736 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/002.html @@ -0,0 +1,34 @@ + + + + CKFinder käyttöohje + + + + + +

      + CKFinder-käyttöliittymän yleiskuva +

      +

      + CKFinderin käyttöliittymä on suunniteltu selkeäksi ja helposti opittavaksi. + Useimpia toimintoja voidaan käyttää hiiren ja pikavalikon avulla. +

      +

      + Kuvaruutukaappaus CKFinderista: +

      +

      + CKFinder Screenshot +

      +
        +
      1. Kansioruutu: kansioiden muodostama puurakenne. + Kansioiden avulla järjestellään tiedostoja.
      2. +
      3. Tiedostoruutu: listaa kansiossa sijaitsevat tiedostot.
      4. +
      5. Työkalurivi: toiminto käynnistetään nappia painamalla.
      6. +
      7. Tilarivi: tila, josta ilmenee tietoja valitusta tiedostosta, + tiedostojen lukumäärä kansiossa, jne.
      8. +
      9. Pikavalikko: luettelo napeista, joilla voidaan käynnistää + valittuun kohteeseen liittyviä toimintoja. Toiminnot vaihtuvat valitun kohteen tyypin mukaan.
      10. +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/003.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/003.html new file mode 100644 index 0000000..7fd1353 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/003.html @@ -0,0 +1,128 @@ + + + + CKFinder käyttöohje + + + + + +

      + Kansioruutu +

      +

      + Kansioiden muodostama puurakenne, jossa voidaan liikkua. + Kansioiden avulla järjestellään tiedostoja.

      +

      + Rakennetta kutsutaan puunäkymäksi, koska kansiot on esitetty hierarkkisesti kuten puun oksat. + Yleisilme vastaa modernien graafisten käyttöjärjestelmien tiedostoselainnäkymää.

      +

      + Perustoiminnat +

      +

      + Kansion avaaminen +

      +

      + Avataksesi kansion, eli näyttääksesi alikansiot, napsauta kansion edessä olevaa plusmerkkiä + (). Jollei plusmerkkiä näy, kansio ei sisällä alikansioita. +

      +

      + Katso "Kutsusta lataaminen" alempana tällä sivulla ymmärtääksesi, kuinka kansioiden lataaminen toimii. +

      +

      + Kansion sulkeminen +

      +

      + Paina kansion edessä näkyvää miinusmerkkiä sulkeaksesi kansion + (). +

      +

      + Kansion valitseminen +

      +

      + Valitaksesi kansion, napsauta kansionimeä tai -kuvaketta. Valitun kansion taustaväri muuttuu. +

      +

      + Edistyneemmät toiminnot +

      +

      + Kansion edityneempiin toimintoihin pääset "pikavalikosta". + Tarjolla on seuraavat valinnat: +

      +

      +  

      +

      + Huom: Jotkin pikavalikon valinnat voivat olla kytkettynä pois, + mikäli pääkäyttäjä on näin valinnut. +

      +
      +

      + Kansioiden luominen +

      +
      +

      + Luodaksesi alikansion, napsauta "Uusi alikansio" -valintaa pikavalikossa. + Valintaruutu ilmestyy kysyen lisättävän kansion nimeä. Kirjoita ja vahvista nimi. +

      +

      + Kansio- ja tiedostonimissä ei voi käyttää kaikkia merkkejä. Tämä on + käyttöjärjestelmäkohtaista. Esim. : + \ / : * + ? " < + > |

      +

      +
      +

      + Kansion uudelleennimeäminen +

      +
      +

      + Uudelleennimetäksesi kansion, napsauta "Uudelleennimeä"-valintaa pikavalikossa. + Ilmestyy valintaikkuna, jossa näkyy kansion nykyinen nimi. Kirjoita uusi nimi + ja vahvista valinta. +

      +

      + Kansio- ja tiedostonimissä ei voi käyttää kaikkia merkkejä. Tämä on + käyttöjärjestelmäkohtaista. Esim. : + \ / : * + ? " < + > |

      +

      + Huom: Kun uudelleennimeät kansion, linkin tai mediatiedoston, + jota käytetään jollain toisellakin sivulla, toisen sivun linkit rikkoontuvat. Ole siis + varovainen toimenpiteen suhteen.

      +
      +

      + Kansion poistaminen +

      +
      +

      + Poistaaksesi kansion sisältöineen, napsauta "Poista" pikavalikossa. Näkyviin ilmestyy + ikkuna, jossa kysytään varmistusta toimenpiteelle. +

      +

      + Huom: Kun poistat kansion, linkin tai mediatiedoston, + jota käytetään jollain toisellakin sivulla, toisen sivun linkit rikkoontuvat. Ole siis + varovainen toimenpiteen suhteen.

      +
      +

      + "Kutsusta lataaminen" +

      +
      +

      + CKFinderissa kansioiden sisältö ladataan "kutsusta" toisin kuin paikallisia + kansioita selattaessa. Ts. aluksi ladataan vain puurakenteen näkyvät kansiot, + ja vasta avattaessa kansiota ladataan alikansiot ja tiedostot näkyviin. Tämä + on tavallista nettisovellusten suhteen. +

      +

      + Kansioiden latautumisen havaitset ilmoituksesta "Lataan...": +

      +

      +  

      +

      + Ilmoitus katoaa automaattisesti kansion lataannuttua. Ensimmäisen latauskerran + jälkeen ilmoituksen ei pitäisi uudelleen ilmestyä samalle kansiolle. +

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/004.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/004.html new file mode 100644 index 0000000..138ecbf --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/004.html @@ -0,0 +1,101 @@ + + + + CKFinder käyttöohje + + + + + +

      + Tiedostoruutu +

      +

      + Tiedostoruutu listaa kansiossa sijaitsevat tiedostot.

      +

      + Näkymät

      +

      + Tiedostoruutu voidaan esittää kahdella eri tavalla, riippuen CKFinderin asetuksista (katso + "Asetukset"). Ohessa vertailu "Esikatselukuva" + ja "Luettelo" -näkymästä samalle kansiolle:

      +

      + +

      +

      + +

      +

      + Perustoiminnot  

      +

      + Tiedoston valinta (aktivointi)

      +

      + Napsauta tiedostoa valitaksesi sen. Kun osoitin on tiedoston päällä, tiedostoalue + muuttaa väriään. Valitun tiedoston taustan väri muuttuu, yleensä siniseksi. +

      +

      + Edistyneemmät toiminnot +

      +

      + Tiedoston edistyneempiin toimintoihin pääset "pikavalikosta". + Seuraavat toiminnot ovat valittavissa: +

      +

      + +

      +

      + Huom: Jotkin pikavalikon valinnat voivat olla kytkettynä pois, + mikäli pääkäyttäjä on näin valinnut. +

      +
      +

      + Tiedoston valitseminen +

      +
      +

      + Valitse tiedosto napsauttamalla "Valitse"-toimintoa.

      +

      + Tiedoston esikatselu +

      +

      + Napsauta "Näytä" esikatselleksallesi tiedosta selaimessa. Kaikentyyppisiä tiedostoja + ei voida näyttää selaimessa, mutta kuvat, teksti ja PDF-tiedostot (Adobe Portable Document Format) + voidaan. Muissa tapauksissa selain kysyy, millä sovelluksella haluat tiedoston avata.

      +
      +

      + Tiedostojen lataaminen omalle koneelle

      +

      + Ladataksesi tiedoston, napsauta "Lataa"-nappia. Selain pyytää esittämään paikallisen kansion, + johon haluat tiedoston ladata.

      +

      + Tiedostojen uudelleennimeäminen +

      +
      +

      + Napsauta "Uudelleennimeä"-nappia pikavalikosta antaaksesi tiedostolle uuden nimen. + Näkyviin ilmestyy ikkuna, joss lukee tiedoston nykyinen nimi. Anna uusi nimi ja kuittaa. +

      +

      + Kansio- ja tiedostonimissä ei voi käyttää kaikkia merkkejä. Tämä on + käyttöjärjestelmäkohtaista. Esim. : + \ / : * + ? " < + > |

      +

      + Huom: Kun uudelleennimeät kansion, linkin tai mediatiedoston, + jota käytetään jollain toisellakin sivulla, toisen sivun linkit rikkoontuvat. Ole siis + varovainen toimenpiteen suhteen.

      +
      +

      + Tiedoston poistaminen +

      +
      +

      + Poistaaksesi tiedoston, napsauta "Poista" pikavalikossa. Näkyviin ilmestyy + ikkuna, jossa kysytään varmistusta toimenpiteelle. +

      +

      + Huom: Kun poistat kansion, linkin tai mediatiedoston, + jota käytetään jollain toisellakin sivulla, toisen sivun linkit rikkoontuvat. Ole siis + varovainen toimenpiteen suhteen.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/005.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/005.html new file mode 100644 index 0000000..890f214 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/005.html @@ -0,0 +1,35 @@ + + + + CKFinder käyttöohje + + + + + +

      + Työkalurivi +

      +

      + CKFinderin yläreunassa sijaitseva työkalurivi koostuu napeista, joita napsauttamalla + käynnistetään eri toimintoja.  + Tässä kuvaruutukaappaus työkalurivistä: +

      +

      + +

      +

      + Työkalurivin napit

      +

      + Alla vakiotyökalurivin napit listattuna:

      +
        +
      • Lataa palvelimelle: Avaa "Lataa palvelimelle"-ruudun, + jonka avulla lisätään uusia tiedostoja valittuun kansioon.
      • +
      • Päivitä: Päivittää tiedostolistauksen + tiedostoruudussa.
      • +
      • Asetukset: Avaa "Asetusruudun", jonka avulla voit muokata + CKFinderin toimintaa.
      • +
      • Apua: Avaa tämän käyttöohjeen.
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/006.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/006.html new file mode 100644 index 0000000..5f6e175 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/006.html @@ -0,0 +1,61 @@ + + + + CKFinder käyttöohje + + + + + +

      + Lataa palvelimelle -nappi +

      +

      + Lataa palvelimelle -nappi* työkalurivillä avaa + "Lataa palvelimelle" -ruudun, jonka avulla lisätään uusia tiedostoja valittuun kansioon. + Tässä kuvaruutukaappaus:

      +

      +  

      +

      + Napsauta "Peru"-nappia sulkeaksesi ruudun, tai napsauta uudelleen "Lataa palvelimelle"-nappia + työkalurivillä.

      +

      + * "Lataa palvelimelle" -termi tarkoittaa tiedoston siirtämistä paikalliselta + tietokoneelta palvelimelle.

      +

      + Latauksen vaiheet

      +
        +
      1. Valitse tiedosto koneeltasi "Selaa..."-napilla. Napin teksti vaihtelee selaimittain, + mutta se sijaitsee aina heti kentän "Valitse ladattava tiedosto" jälkeen.
      2. +
      3. Napsauta nappia "Lataa valittu tiedosto". Lataamisesta kertova viesti-ikkuna ilmestyy näkuviin. +
      4. +
      5. Lataamisen loputtua Lataa palvelimelle -ruutu sulkeutuu automaattisesti ja ladattu tiedosto + muuttuu aktiiviseksi tiedostoruudussa.
      6. +
      +

      + Latausviestit

      +

      + Voit nähdä seuraavia viestejä lataustapahtuman aikana:

      +

      + Samanniminen tiedosto on jo olemassa. Palvelimelle ladattu tiedosto on nimetty: + "tiedostonimi(1).xxx"

      +

      + Viesti tarkoittaa, että samanniminen kuin lataamasi tiedosto on jo tallennettu hakemistoon. + Ristiriidan estämiseksi tiedostonimen perään lisätään juokseva numero "(1)".

      +

      + Tiedosto ei kelpaa

      +

      + Palvelin ei hyväksy ladattavaa tiedostoa.

      + Yleensä kysymys on siitä, että CKFinder on asetettu estämään tiettyjen tiedostotyyppien + lataaminen. Ne tunnistetaan tiedostotarkenteen perusteella. Lataaminen + estetään tietoturvasyistä. Vaihtoehtoisesti tiedostokoko voi olla liian suuri. Siinä + tapauksessa palvelin on konfiguroitava hyväksymään isompia tiedostoja. +

      +

      Palvelimelle lataaminen on peruttu turvallisuussyistä. Tiedosto sisältää HTML-tyylistä dataa.

      +

      Ladattava tiedosto sisältää HTML-koodia. Tietoturvasyistä vain määrätyillä tiedostotarkenteilla + varustetut tiedostot saavat sisältää HTML-koodia.

      + + Ota yhteyttä pääkäyttäjään selvittääksesi, mitkä ovat hyväksyttäjä tiedostotyyppejä, ja mikä + on niiden suurin sallittu koko.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/007.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/007.html new file mode 100644 index 0000000..458f4b2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/007.html @@ -0,0 +1,26 @@ + + + + CKFinder käyttöohje + + + + + +

      + Päivitä-nappi +

      +

      + Jaetussa ohjelmistoympäristössä, kuten CKFinder, voi työskennellä + useita käyttäjiä yhtä aikaa. Tällöin yhteisessä kansiossa oleviin tiedostoihin voi tulla + lähes samanaikaisia muutoksia. Saat muutokset näkyviin "Päivitä"-toiminnolla.

      +

      +  

      +

      + Oletetaan, että luot uuden sivun yrityksenne tuliterälle tuotteelle. Avaat CKFinderin + ladataksesi tuotekuvan tekemällesi sivulle. Mutta avatessasi "Tuotteet"-kansiota, kuvaa + ei löydykään. Pirautat "Maikille", ja ihmettelet, mihin kuvat ovat kadonneet. Maikki + pyytää odottamaan tovin ja lataa kuvan palvelimelle. Sitten hän kehottaa sinua + päivittämään kansiorakenteesi. Ja voila! Siellähän kuva näkyykin. + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/008.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/008.html new file mode 100644 index 0000000..c9fe4a7 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/008.html @@ -0,0 +1,70 @@ + + + + CKFinder käyttöohje + + + + + +

      + Asetukset-nappi +

      +

      + "Asetukset"-nappi työkalurivillä avaa "Asetusruudun", + jossa voit konfiguroida ja muokata CKFinderia. Tässä kuvaruutukaappaus: +

      +

      +

      +

      + Kaikki asetukset tallennetaan hyödyntäen selaimen evästeitä (cookies). + Evästeet, "keksit", ovat pieniä tiedostoja, jotka sisältävät käyttäjäkohtaisia + konfigurointiasetuksia. Kullekin sivustolle on oma evästeensä.

      +

      + Napsauta "Sulje"-nappia tai "Asetukset"-nappia toistamiseen sulkeaksesi asetusruudun.

      +

      + Konfigurointivalinnat

      +

      + Kaikki konfigurointivalinnat liittyvät tiedostoruutuun. + Niitä käytetään tietoruudun informaation esittämistavan valitaan. Tiedostoruutu reagoi + välittömästi asetusmuutoksiin.

      +

      + Näkymä

      +

      + Hallinnoi näkymätyypin valintaa tiedostoruudussa:

      +
        +
      • "Esikatselukuvat" näyttää jokaisen tiedoston "laatikkona". + Vain kuvat näytetään pienoiskoossa, muille tiedostoille näkyy kuvake.
      • +
      +
        +
      • "Luettelo" näyttää kaikki tiedostot alekkaisena listana. + Esikatselukuvia ei näytetä.
      • +
      +

      + Näytä +

      +

      + Asettaa näytettävän informaation määrän tiedostoruudulle. Esimerkkinä näytetään alla + vaihtoehdot eri informaatiomäärävalinnoilla:

      +

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

      +

      + Lajittele

      +

      + Asettaa järjestyksen, jossa tiedostot näytetään: aakkosjärjestyksessä tiedostonimien + perusteella, tiedoston luontipäivämäärän mukaan (uusimmat ensin) tai tiedostokoon + mukaisesti.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/009.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/009.html new file mode 100644 index 0000000..e403c96 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/009.html @@ -0,0 +1,16 @@ + + + + CKFinder käyttöohje + + + + + +

      + Apua-nappi +

      +

      + Avaa käyttöohjeen uuteen ikkunaan.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/010.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/010.html new file mode 100644 index 0000000..b7a0030 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/010.html @@ -0,0 +1,29 @@ + + + + CKFinder käyttöohje + + + + + +

      + Tilarivi +

      +

      + "Tilariviltä" ilmenee tietoja valitusta tiedostosta, tiedostojen lukumäärä + kansiossa, jne. +

      +

      + Jos tiedosto on valittuna CKFinderissa tilarivi näyttää + tiedoston yksityiskohtaiset tiedot: tiedostonimi, -koko ja viimeisin + muokkauspäivämäärä. Esimerkiksi:

      +

      +  

      +

      + Jos tiedostoja ei ole valittuna, näytetään valitussa + kansiossa olevien tiedostojen lukumäärä. Esimerkiksi:

      +

      +  

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/011.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/011.html new file mode 100644 index 0000000..53e740c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/011.html @@ -0,0 +1,30 @@ + + + + CKFinder käyttöohje + + + + + +

      + Juridisia huomautuksia +

      +

      + CKFinderin, ja tämän dokumentaation, tekijänoikeudet omistaa © 2007-2013 CKSource - Frederico Knabben. + Kaikki oikeudet pidätetään. + Varmistu, että olet lukenut ja ymmärtänyt CKFinder-käyttöoikeussopimuksen. +

      +

      + Mark James on suunnitellut työkalurivin ja pikavalikon kuvakkeet. + Tutustu seuraavaan sivuun lisätietoja saadaksesi:
      + http://www.famfamfam.com/lab/icons/silk/

      +

      + Tuotemerkit +

      +

      + CKFinder, CKFinderin logo, CKSource, CKEditor ja FCKeditor ovat + CKSource - Frederico Knabben omistamia tuotemerkkejä. +

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/012.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/012.html new file mode 100644 index 0000000..8aaa550 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/012.html @@ -0,0 +1,44 @@ + + + + CKFinder käyttöohje + + + + + +

      + Pikavalikko +

      +

      + "Pikavalikko" koostuu napeista (valikkorivit), joilla käynnistetään pikavalikon + kohteeseen liittyviä toimintoja. Näkyvät toiminnot vaihtuvat valitun kohteen + mukaisesti.

      +

      + Käytettävät valikot

      +

      + Seuraavat valikot löydät vakio-CKFinder-asennuksesta. +

      +

      + Kansion pikavalikko

      +

      + Valikko ilmestyy, kun napsautat kansiota hakemistoruudussa + hiiren oikealla näppäimellä:

      +

      +  

      +

      + Tiedoston pikavalikko

      +

      + Valikko ilmestyy, kun napsautat tiedostoa tiedostoruudussa + hiiren oikealla näppäimellä:

      +

      +  

      +

      + Pikavalikko tyhjälle valinnalle

      +

      + Valikko ilmestyy, kun napsautat tiedostoruudussa, mutta + tiedostonimen vieressä (taustaa) hiiren oikealla näppäimellä:

      +

      +

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/013.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/013.html new file mode 100644 index 0000000..236e634 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/013.html @@ -0,0 +1,38 @@ + + + + CKFinder käyttöohje + + + + + +

      + Yhteensopivuus ja järjestelmävaatimukset +

      +

      + CKFinder on "nettisovellus", jota siis käytetään selaimella. + Siksi sitä on helppo käyttää koneella kuin koneella + käyttöjärjestelmästä riippumatta.

      +

      + Nykyisellään CKFinder toimii seuraavien selaimien kanssa: +

        +
      • Internet Explorer 6.0+
      • +
      • Firefox 2.0+
      • +
      • Safari 3+
      • +
      • Google Chrome
      • +
      • Opera 9.5+
      • +
      • Camino 1.0+
      • +
      +

      +

      + Eräät ominaisuudet riippuvat selaimesi asetuksista. Selaimesi pitäisi toimia oletusasetusilla + CKFinderin kanssa. Jos ongelmia ilmenee pikavalikon käyttämisessä + tai asetuksien tallentamisen kanssa, varmistu, että selaimesi + "sallii pikavalikon muokkaamisen skriptien avulla" + ("salli skriptien vastaanottaa hiiren oikean näppäimen napsautus"). Varmistu, että olet + sallinut "evästeiden käyttämisen".

      +

      + Ota yhteyttä pääkäyttäjään, jos epäilet asetusten toimivuutta.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/header.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/header.html new file mode 100644 index 0000000..e0aed77 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/header.html @@ -0,0 +1,34 @@ + + + + CKFinder käyttöohje + + + + + + + + + + +
      +

      + CKFinder käyttöohje

      +
      + Poikkea CKFinderin kotisivulla
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/001.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/001.gif new file mode 100644 index 0000000000000000000000000000000000000000..885e1f71eb6c7d6099b78ae3e16021f12c3569c0 GIT binary patch literal 25805 zcmV(`K-0fRNk%w1VPOK20o4EikC1ZQ&|hY6Qe};(1_lG5s-o7_)T31o^6>MXl^W-* zTupYEVUA0Vvd>{$7A;U_t<2$C83%To)%^OHFG(rM$heOt2l~%A->I9g%ANVMF~)Ec z@$ReC(ud~U)6a?s`_7j;W{Cg)&XjFX>F3|mk1q7A6W;3Y?Wfc5mM+-cyr=c z*s#O2H@R(<_1EpUyl5C9b=81e(xeY!C_~TVvFGQ;WO&E>>EMSuKkx6}V!Y z|MBtTA^8LV00000EC2ui0AT`>0RRU7K%Q_&EE41ejB|#Mkdcy;V+8^f zm=pp9l%0Q#prN9pcAloEsHtTJ0tA``6&02g1Of)CxMZZeyuH3w1qA@P#C*Y=#mPIZ z0xCYw(9bH&%GFoC*xA~6Wf|TX)d0iR1tdSnxCkdI>?$V+s63bk(e=;WX}UYU8HSggmV{HM@gw7sK8X z8qI*TELo*O(G>776_y8{LkR~pj0V9*6c~WkB4r>hDda1fk(-%pAeMotr;l?!gAsHC1mF=sXwYsf z^y6$|yH2}$wyL)R=I9(OzQc!UQ;mVmOm|$0-Rv1$RW>z47-!x_g1I|4+ zV1fi5NMVJjAqWNtAQW)_-G|s^cOg?GW~d;78g4;a0}Y&Too5Y%1%ZGD9=Mr}+jRi| z0clkLKmo0VM8G)i(FW68wXsBmZEzvULtOMJ`J|NhRapcW1$kpnVnj|jVP+Yg_Y;^~ z2-6%^ONkk#fneT<;)Wc8;DIbvDWzeXUs|~4nudkNB8vuqH(rYkShduR1NuZ}859&C zQY*BuCQ<=87D)(v@KIS;lSpzJS}C_T=@B?I)4(%YJw&1Dh2`0*rNgg6^t~bNY`3wBwd`& z1!}1Ag(}3j=*E=)Zl~fpIqH2_8U^4t5hB~FqQ>G`YZnR$MDJ;>=83GB(qhr;!3u~G zaIt&h>m_G0HY>3Tg#x^naF6id5xu&QE0^}LMVpp4ME|$+HCK`Ap6u2ggdLo&9wj^nTyLQTN zzpk>$Y|9=0Gu;5?HG%+L6mWNzdOHmW;YS4@i2_O|&2%J{T0yZ2nrm%<1h=HoJQrcF zw^~}NuMSD;N4On#?QOdY^V+uK4zC!&^v9U-=>6gQ`w+r^ywWW!Ur4TFQ2bSQ5TM=~ zu2-hgg+v7pXwCLgCoJy?0(?eTSL|38y9$14eB-;F`ubso-SO@V&9NUP20{!4Bn<@m zv&IR=BY_r%#S@aU2W$i|5(<#*H3V>ABp?_;+SLwj6r7vesI)=5=x`rQOW_e8(Wprg z;E5lZ6akmW1|IfsZshaSr^I(Y4Hi)wR1BjS*#H0ozNP{mOI^;!*oQB=QD$t6qa4A& z18lATM3{qMU@Bj)_z?s<0rZ$^-%Wh(0o8SzmILArO za+;Hw9-sxtoJau=ob#RVB&Ij#xr=z(^Pc$3r#`Vssan9|8M1&>0rp8ybJFvmp(vos7Os}NO!8#raJYhP>m`xnJU$) zTJ@^ROn_FkN&u`vG@_aSfB{ZQ)NRfp6Pv)QTGwjR1b{>YBA7q`x*Amvw4xROh=nj7 z;EI7-l&Z>Pg)26p*Gtr5tZYrJVjJ2?UM3&_kd15rwz^fNuBM5v*-<+k3Rq+^qgvKt z#$rcHT6_Y)m#5uj0^rKp*1}b;bk*e(XZwS$#&)K#Tn{y|)zHosGo2JjV_NXB+0q*K zxZzA~ZFQ;KT&{Kk(2cHiK`>Wd-d46XZG~`Mv!jZ}w5-Gg(RH91#XFM3n&M6WuX@+Z z-uAlpz3}}|Fyl+#`r7xt_=RsUWx(J5`uD#84zPd+OyB|=_`nDbus)R=+vfh@xzdF$ z2qrM$30(KOxx_F_ceLI0?8u$p9fC2pJ4jbP(v>Jqv5MD&*k5*d#W0Ssj8oiVU&^2d zIL@(-cg*7+`}oH|4ziGkOynKQV8OMWZC4!(;RsWh!qwg7g_oP;*gmnO9f6jf+g@I@|fqc-HZe^T}Z5IySD;ee#5( zEL++x*S6TDtA;n4k`bzFY_{umbQnF003HhQ2Nuz4vD69$?0S} zJI%|^<(x}R?P^;a$EUuhgH`?K=(<|a6NYu7scc=60^o)sId5971>$}BdehK&K(3(y zDRoW?-Oqk@w13d-eEWOF`=0i-2Tt%hXWO2QRjmlV&2SD8n%1#KG_4gqQp|>AW3DKh zU)>GfVW!d6)q1SsNP?c0 zT@ziz#q=07@Av?G*Tb4s$Mn?WPIt9jUF&!!IM|>|E*(05HfSNHatr&AO z;9mDO&%N=GzelL^PI+tZo$u%LyFCE^cV2TG?cp{2tuayTLS`%SXMQ~D8-Mr8yI$0n z$9y?KUiQOp-t+o=H?u|GF;^)5?WbRTj8!lExVQfG$Tzs`@oDkEYkcrLkn}TRsPtC4 z1~$c)G4Zn>_2Vc1`$CTW^2NDp?%F;YuxWShi#}gyG#?tP@wybb5996A-{js0zy5nH z{)JLD0gDz?NcVft06nz_Y0+1B&%k*F7z+*9Z;0TP&Ej|P3xr!5fZN*hCf7C2lL*n;?nff_i2*tTGtD_jf=;w=@uYjXv|T6WN+qU* zEcSwA=xj{bgx~js><3KS^#CD2012d9d=&x%FaQe>ik~=&60lf0fgo5~HX;_G_cZlG0 zT41+oa42YUsB^YuWjj}8idK!)cu}9#BedXMURH@NRu3T%iuT4HuE2|;xQnG|im8Z> zujq=nc#5}pi>cT`y2y*_=!?Pliy;sK!x)IgD0hU2jBAKwz2uCo_GHmWWfT{2tP3 z04zz0r-+ZC*pL5ci2=EU14)p`r;OVag$S9DuXcqEd5u?QW!Bh`9%TS!6e)v+hnxkD zzO-GdH~^{`0y5xrHbj%8sE?v}i@n&3F^QA^@92@QSd*$~lBhU~@;H+Vpp&4+lRfEa z#|V^pCzRSmly4|#;MRz-#*h$sXbj-{WzE7 zNSW$50P?7nwKxC;P>VPDi<-HU;TR2OQUG0HCVHU~1%MN~mRG{C3ALFLyEX#5;{Xm2 z0lpalya}AV=>Q4f0xm#V!^xXc`E_3x0R-TjPvo12GM!6-nl`p$%=vYgkeyEyQQXO# znBV|lMF9@L0K-{7-ua#C`9yrBWVEmp1Yl$~xJiG;aNu^7gPD}%CUJ%dk#ksDidhe; zD2ih_j|Li-zDSv8d717AmaLeWn+cZxEGYq_nTwzq47FGQ?nsxCXP5AI3>BaP!`2W0 zFaQD|nmZv54FLZhLhCvDj*!O)=o zSeL2Ubk`9K<0TBipjVW7sg#OF72pjo+5s^D05OmNI{KT*$(zNgRl2F0!I_;-`km1E zoJ3lrj(VLsrk>Tbo|%B9nqZ#);aQ&M>8lKIrC7?HnxLJK;t&}i0AQ+7SgK9`xu!o5 zpl>>sTG<1LN{^{{tu48&3<{Z=IjDsCt$E6es`#gL`iaMot{Qrh!Z@pL3V)hfsVZ=( zpFtY(_s#|5M39zceda%FwqlaRoa)zDXX;?}sti-yjJIb3> z>Z?&Iu?OpQDFL1lRX-H4tVcC#&?-#Q3Jnr4uFWzi*{YJKD5ou1s1tgMe=4WonwdE{ zsFW$8=31J&sIKeEt_%xr(eQu{D54;$0-iA*vQPnYlCLECsi69=16!)Z$(tj9s;%mk z%DJ)8`I`&tt_@qO54*Mh?zy8%DgYN-Kfo%bOX>=)pa}wi6yB+^BG{@ngb5IW2_jpv zYIU;Dkh1BxIV|*z*t0QSI~C9YrVFDlilbR;qgsWvUF)$?>HxD6rCv*;L27%)r=9|!rNoN1z00e>T0gwX zsuQ&mKQceHd8=J&w$$0TetT7b>jS#Tihtr2o5Qj!Vy&q-u8GU8Yx%9yDWFh4p|&&|@|4t5;}b0F+^`9>4>^5Ca)tx~9tkEr7Z)aGWkMoK-8MzR8_) zJ1bJVYi8S{LAt*GKY*mR3bDjW!P;4#RVutqda%X235k&qWwf_js|knVyw6)z(MzDA zh>O;Hy@orWD%_{x!az3=Imw+XW&jKmzRGBJ*1vNG!jU(LSEq zsU6S)rwhPXi>kx@feGo;}zK3jxh|Vtw_T)JdQXExmlT&xww|;nxL!*#KZWsEK0wW zLBHcQzYbU(u#f@z3#z5dzfH`)|7XAnO8_-60^*Pf5df7t9C!7kwoJCf+IGCloN&y=84MvA z?VcLz05STa4xpV=T0g#1Ka9bpB@I?4Oi~^AfzwRQ!xX*e>Y3Vn(-7dzWa*$TIm6?e zvk_X8GE9>!M9%kUxtA-pMB8+uTgezu0Z;w8@w=L61Phg_&@UPQ{;X9lu+_&o(qHEQ z3awTDpGwv-0LAz-=s%fC#^OnReTjkm!HA)pEX zym`u*;H#O?(jq0MlJ$QHAk)eey*TzKpqS0wyv;eSy>S_+fGntk?6`)^l5*0go(>?ukktWT?Ve?n*D=5xwr<|#{BHBU45M7>91TZsx-=*Q5pkUZPr~K13ch>o|?5E z?gCBh#Gm@z%n98%Cfyy&q!dh^zO1nun*cO$oRQT5#N3_XUD6OT-peuGC7syNtWr(3 zhzm(fPPu&1>zD)Db}xzF-h8f)n~tvd-!?qHHi@l&`irP&ty}4!aq5ci41cro0A#%ndtm_*0Ep%S$yc8>d8%P<4`nPIG&_) zJyFa{!NEJcwL4qe4OuQw}ZnS>%IT|poMJCky)n}s*CGrt;~Lp{T=7e0Ez+-;S=tgBM{Z;8r}sE zzp}8uP5i&Y%>kVnyA+_@l(p!g`meja;xXWWj{d2r%fG$?#V=X_ln%EUm)g>H%d8r= zx$3bJWwB`d=}!dGCZqtP9sm>YqNVYOQ0a~590=!lJ45Jy)=z#v`rrQEM;47yK+^l-(JvyELuzT>r3)kxz z0VCi7B|u#Z&+z^G%fZmG5~bu#D#91Pbu1O@_W9l-@1Hyuk;g^y04|{?-vj&Tk;jgi z#}3qi%)>7alghrboHGEJ_|3nFjyJCfx_RwrA1nBv>9hTUd$9g;- zb1CeijoJ%-mGyAoFF@zN2?V18pfCiCMve$&M9jnhG3hkcigjB5txOA$@OoXYsblmt zpA%szwj*A5Y`mMtz_WE?4t<2s_xF7Q0}Xx(4G(2{6czs(`zRnIAq5->1R@z2E(s_q zJv}25HbzruK0ZoHQZz0CVkj5@03aPH1Tt|Q1THBS6=e>Cg@=iYjgO5JL?)O)CY+(2 z34*7o4X3NKuaUXCy}!Z3yLrgTy$u8dL)O_B+~3~^Cm*H&<-j5X!^A9hiEQc#1fYSR!Aa9&zITBx%zhUa+dtg1Xf~iBTI) zg*`<>jROF&v^KJZi-E03zIp%?HcfIfpAE`fulxkjvRID(k;M> zNs~QO#t5+TMui(4z|2H>G>w!1ICG}qDO}AOIXBALfSDjkC#C6_4s*I_Yow`E)k4zc z{So`El_GcrD^@IxG`J|a_d~$}Tepzlk}I(Ry-8rE0}({fufYDe#*ZKT609%+DXfsf z#dtU;qIK$#Y_*2`>1VPKF_TOJfI91}paCAZ=tO=0P>a!?)moz{qS$21NQWA3TSAXX zGT^|9;DGZ9xZ-Z$K#TyGnc$@_Vh{tm=%Cz54J@$B&L=NM(C?2Ln}Vx6Nyv0-zeyZO z&&&7vh+qV-=%dezOlFa)5?G+fM3Mk4?2{Na7xYumK?xNGLk-h`OwkeLIq}2E{;`Zi z5Ak8tMMqcjY@rZPvnMikPNU#7N#y}^nAdz*AfVZFv@L=fLM11qAr0wp|{u5rUO6S(Ik#iGv$<2v+7MhjXRo&u{iZXZ392X(gb8-U$f-_;5sULy&&2M%l%-!QP53*Yp-i5fPo?Zvif?Fu+47X`R4~k8yUjcR?Rbk8PaqhydQ;_ z!+%y|^r3wemC8>6kphye)zMs0%V{7 z5oC|@e&Hwo&5(vQwBZeLm_r@zkcU0=;SYfrL?I4whtfL+ssJ~m1_HgKd9HVi%LBz8|1U0GD!KJ!S`h3#41h>Jm#Ad>j6fF(>}PW(&(MB(0mEAi`5EF}()>EYe^k6p5#5+CV$EFaq+Tw!1R~Zzq}Xrz{SMNFrPU0B4$) zg;=@6Genf46}9L^MPS5@r6V;LQy8W|)2J$f#+OAfsT6AoOqH(Gmj^@G7T=LfnI^ND z5!uB83?~qS;gg>$;lNM-eIgTG%>-CZTE>BZx<3Qzk&izzXH!krK$@H(DeoMFF$xJ4 z0eteF=cE7?r0|5}6#y2qfW#r$6bdxp#9aVglPwDH$X&>5lzqY|4HFO%W!#moef292 zHEN?o@$H!-T?lC!PykytfQ2VD=`UFt*`4zI z*_AFrGzBAH`7*2j+1;KhB9Lg2;b!BGk4f{7Q$SG75`@|&b$}T^-JBh77CK5cwVczj zt;){OC96sVtMh!%09Y8@;qoySXVF9kEnz$iW|9C8U=sz_ng9UgR;vZ5zzRG_*X5D& zuG-x$cLmXx8a6@%1PJeuk$l7P^4B86%pO6kxS|0l)`ti?g*>#BU z!9~RXzNE=GX%eCW75MT*kVQxZB#vcWC!_~-cl+NJD4G8QiC6JK0Lnfc zSPO{91M18`!20QHD|cI**e3wSI$#;nfah_t+zV4+T_Xrt?)NM}Aq8pSISu5304QK2 zKT693LR{~q!@_uISvt5fA%#hca>sV@MxOrG(Vl&^ z8v<1hi;Uon34s;Nef++(wErgHFs4oYt?+_ zaMorX?9P|u0kRCB2@RkEhG5Ff4|@>H{oDcL2uA+!tNuK0?b4xQgo_q90SoY@)wao!0XE}62_MRgq^vIpqF#;%%JamTw z8sG%zkscv{6UngzK7a-`@Xqec1EJw1)(u{KFKTYVoUmo9G!a}lvBch@t{_SjNwE|= zkL+$x6)$oXdocQ@FBZ{m`__kJ>Vf|L#=L3?AC?f9aLuF~1&uJqAVOq`#D^Z@Pvh`Q z1|$I*rEwa!>T%i#9JO&9nd*S902_Y_SHQ6io=p!dCs>?K+Lpu=L+1dvBMI81N8GUs zVTTX<@DJ{UQtX8|p+6Y^KnfnR_#)EZ z{%r=g?k~qqBYTkSs?P^KQq@3mj6_oK!psQqp+zX`ml8{trVOQQv2PYfGZZEnjj1Lh z1}7syCwFoxHi-v*5?8|U4JGg2C~4Zh@u$9VCCrd1V<4%_@d} zBd{_n^^mvVF&+!x1XQ3N8vuj!U;_@ocS@ivFF*m%5kWM}UGzj+ZU;~lk|A&5E_neI z6XUPgqYA1ZSWvSl-SiFcpahfvD=mN{+Jr=tMv^F?7nhSB$%+hIbUtFV12<3u$bu2S zr6HZ}4<NmP?shx0Zja6o?`tJ-y|#18`6LKJ}KT*&nwFQ5Zjr>xEb zh1fM72f%66gT;mvdW`mHk#-zrae5*`U-#8}-qRmAWd3W8MN3pAi?RvUu; z7`9Ao=PtpKLM4_)Yjh@J;yDoHSRr=KvH%2PU<7*q1SyU+3y#uRN_I=apaiNlW&Kpp zic>teQe13d03g5yW=s?gplWRP&P>1qC1{h7rxE5#TQvz@Y^N%UHfcTgbCVWd1HoyN zNpGO`Q#Q_4FJ^X9Ltzji1Oz||O$zXciBSY1q`;PCQ6=5mBUUQtc~!X zsyO0DTmYy5NJvtGa%^TN{uXdKB3m(6lj6#QXtri;mRvp1FWZF(CiQZ)b;Uf0Y5JgZ zLDvw@AW+u#eJwoye4vi{0)BxwewX%$n)ZusF|+JX?>b)#IJ}@_WoA3fphXu*I3yGt z-vByNVFp6DdRf+GwG|T>AOUlo%tS#adpKur=gZK~( zB*D<2k~MiQ6~<7 zS2p%dEA-hA#Iu_A)#m}vqxUrYHq z&(1#Qz;bhLBftVs+5!$>nrC1J=#~$zd5;TMQ2Ar!&V>cSqFnFH1wcRoiL0Src(@>m z0Wc})-u0;2BZog%8N9I>e)tgR*`DhepYvH?Pqkl|m`VLv1~|b*K7;jCx%GVQYrn6b z6FLO!&tpKQHflgOCRzj-^t2HFa7lcM!7z`P^XCfO7+KzknPsAyPx>}2KnHx&nqm5+ zQ5u^`xGrlNkhxi>WzT2L>O9IsP3FyOB!RM%+MP9-sjn_CCSaZ;#C@e2eyN&^J{gIV z_=rmv%)roJJOl37Z($h1pQjX5{?#4Q`fzYS0N8prGMf@Bz-^n&b5tT)UoJOYL09si zvCp7f(U@&-g7#9HPp?&FIU=PMd$CCenZ*L92iX*C#Y-URo;GnkpvGNt45|GV+d&*;w6&oRO1pXFm!IiZt0l&JoK|mEmn0R&lxO>(=fSqCCqMOJw^s!RLck+x z05aoeTO2PbfyNbprghuz#eX^Y&*v5uaV zyf7pLLO^{&p!{B>oP6AK>P}WP z()Xi3qCnp?d$Wi9otHt=^+Fl|W67I5-v46M@uk$K=!o;zJ)PK7!0#fwXlh$mGRHc> z%|}Ea1+8US5a8y)Sw$Ws!N!Qd2MS>ac7O+f<4Jf`NUZH8DksB>1ud=fwNQd+mOucg zU{9ev+7Ej~2mLq;eH!^FgpS!mas1rbxfb%z(J?K@qwCU<_AZV*8sz)k2}9nQeBSBZ zUQYYqIqrV>`=2{y%lTbW5=|0Tl$h+nuo%X+`(b?2C*cEO;Titc2f&XN#s_$~qIn=l zic%$n#Db&$@>yOh^m=mxTtETPk|rc*YBmW9rXAY-G-azjn=|_l+(dM0-sTkug;1je zA7MSD;^u|CQ|nT|^SROv1f(xwf|N zmnQRpLulQ7Smo9iAQGOKhb3OwTtb-Fz=AJNn_vPhleuO#AOa2`niW9!He&xW_@xmW z@Tqt3uUF}Q)+|oXvc;CUI3efdjhrQ)0DK;40p;_dTz(yOE5Jd zEcPjwuAV*#sM_)qXgyU#XR$gebSO|{Mr|t9s#dRJ&5HFJHf9Qqgpe4vLBEFo z42hUat1oT7cKYJ^`!|4IQ406k?L!;R-w+{l)e$s!Bqy=2KFm(Jaz#Qubpr}O_+bOU z91bl+&}p;AjT+4f7-&{7B7%hj5f02qJ%VOUo2)HKs)Q5S&QMHmKT_o&SI@e?9toI5 z%NK8^L7$Ea)30}IA5f&-D1w$cn1 zkfsAon2w^V zXWbLtc(Z_Z+;O)gS@P%?7kF&_qfU9`ERbF->(QqVU)=ns);C;ODHsyS7`D%T{8@3{ zHw+XIX9jI_CV~wD002M%01THK0|GeEAOjGFI0}}P z)>R6P!y#u&rMayFfR4rWIHakkqM9l+MS6AJUD`RxB$HA+Nsg`mtd$pdT5icDIP1Wt zU$Ek7i4Tg!80N*AQnbkpEwkj=AcHk#U_*^~2KO5UH9|-WBsIWf2qPnwh{=c;vWD)l z#HiQcP?^fPfDoh%i9_ z1b?0O!3isqW>{d#8h4WwPb>wN;RVZ02r}C9@!R~!!xpbHP;hb+*Lk^Yvl8$L%Paxw zEP!9~;k-)ZoPx{Yh$B(}p#zLWu(=LKTd;XdBcSf+O_3hc?z;rk=&fB#r9u?Hw%5}e z*1X-WFYWz?;-lKjBoKh{#|I#=z{4|7Bv(crk>z+H&${tA{=_=}_rw;LmlhHH%*A)F z?C4i(c!L+tdP16zx3WY0?8#~8+(tNgmG&SdoGM0#{<#jY>?Q&=*xb-Wq&i0B>420l z+!ETQoCiWMf)bn{1uJO53rAic)kUVLXAs zD`GK=THK=7PRPNsO(2Y76e9@E)`=00(2HthMhelyJ{ib>05Z@R3_}3NJHjyp*~1}| zqz4|flmm$3o8deBGDN-TgN5}t;t!HI#YaLil9H5U6`A1wKrUi3lbXDs2G^*B4vvwG z697RN)A$2ZdNP&BXd`|!@qke{28Q1tTrckUfRNo#ZceI_45pU_EQF&mW3tB&=`#=^ z0PY;=Frxa9HOXf}Gn&$@WCJ&8&1+)QU#esRC_@=WQkKz_s6^u_Pl?KH4v&@Vdx9co z7&6ARQx$j|3m+}Ur8(ZJFB2K&3ClH}v6G(c zrYONFLSmFq3FLf)M$u_PbvkpQA{{9-sfk3AqBNyaH0cj63DK9rRGS{9Xhlb9Mq{9D zqf0oaN7weeR;e_oLTzSYhHBKHvecz9UFt(6x<-osS`?h5QTEo zQkEXnt74^OLz!w;h&ok`9gONIM+t&(o^hugHK$dnnpIV86=h@HYc#>i*T0grb!Q!H zQ?pt;;+prb*d45LyX#)+d{?~kJt2A1 zTUqqlcdY9@YkS}8-}ufq!0G&{!t$%$>Ka)8to!Y(cK!Qa0HaEI39zexSzF%(>leWo zKI(#*+Fu8E7s93r+t|u>(+Z3C!W%xXhF2`q4lnh?Al|Nstuoq992T(>P5_F1t6~=q z6~91MDU4$(;~9JR38QEt0gMXXt2}uLQSKlJL3mLTlESLTpm2|Y^y48Dxy4{6X^~-i zWF%Wd$wz4N650GjH$OAVRRQk^rwm4Ke)Gh0g)B0-+~w&IxNT#8v6u(F&@#XD%xG5g zo1+NlNy?cjbe1xX?>t6}PC%S-O@^QU44p3>NtA>e-x()pSmQE$m@irPz}!1-2FX=ynsjl?i3{yP^4NS#x;VTm%LI zB8ci4Gtt$gp!UEYU2jNgn;P84H8(B&&0U9E)8a1op3jYL6b4#_?q0RKqn%-SBh=s< z$M?rmbj^PA#NW+!cADEv@@b1))p4$MF}(fos7`g$a>Z&@d46#~Ujus5jQPm-ifl;| zeW3@Bx5=%Ea@(lf2P}VfyIl?Qs$+fWQ%v|YZrpITN|o1q?x;?$I`*G`I^%^#I>%vc zb!-b<;7WYAwO>8(W3N4uF=zGv+v6_lgTuM*(Y`xEO?}0ui(*A6C&0f!ylRj0{qNNt ze6}N;*vm^CvRO9w+0pJCbt66U*Y11PUC!~*PaE$bAG+wT4)@ZV-u2W@ec|=JMIN~; z_lalx%2{4xA*t5$sRX^=Pk(i56MV__raSE6-PgQBQsk&dzTjiM{JA$@>yR`&1`(h8 zr}vxpQlEOuYs+=vqrVx%kG}EoP5s%+oc6Lu{>zoU`e;i3__I%X{pXK$)i>QHd0+TJ zo%oSo`O((-rQZUslG@#$y|v%#ksRt_Uj)*h^OY3zJyQNnVCqqz{HfUoYTqMq-vtez z?&)6RIoR(pU<)FQ1Flp5$hDo_(O%?L;Oh|{;n`md4&4k=-pkn_v?-ta+1Y*3L;rNlC7}}u=;vpYi)&m;iGnF7VHQ|HN z;UL;!AtvGz9o;07pzWEN9H!bMLLwPTq9rm>C4yoUE#fsbqI(HqC#K&gj-o-eq9S5q zqJg0b&>{rbq9dB0DtaOeB8vg|;x7VYFbd-^5@RtM<1r#*GAg4mqRBEk<1<2IG)f~g zwhkUy<27PqHfrPl9UU1hp1?PrfC@kWDsrMO5+W~}V>+&pjCo@?dgCo}7YJ_QQ9+?P zdRlbZV?G`XJANZA`lC38SpSWnO4Xx2q8L6JWI~>bj9J7#zGFZFAz&4xLe3XLQshNS z2Sd8!Kb}AXK;-}Vodgaf!eQjkS!79~WL9XTL(-y0#$ye-pXWdsWm-~Q{e|TJi4<4T zr5DL%V1{M?BjROM!dE#G=4z4GG&<&ELgq9!V`NfhWm+aMs?8~;hE?vRW&!46HV-Sl z;+Y`gXhIQ7Eu>vKo??P#R*B|lilS*Q5o(&sDGsG)wx)$KC1uIx6vbw5+Sb3==2a$O zZZhU>z7}x$<{m01L#54ds%0)3=TZh8P&FqdGN*FV=8!;VVoK+9_S9>>;%_$Rb_z*% zc4lUMCU_c*c(x*WYG-Du<_fYVdwP<4jv{;lr+EemdR{{++UG|hXK-ETW|d}vF3oe! zrxSi>fDYe)N*97Qk$(0je*($B5eR{hV}m;A8sR4>QmAZN=#OA%8DzkQ7H5Y(Xmu8t zgoa}OcJ8Nq0^)X6i-vxr8y4RNYQlP|sHuFYC5EVJj%Y^OWrhmnje=l~PSKgSCr zsg~(@o+)=(Y6dU>rbc9|N+7IeAEVZ4Xx{3nQmKgUDp%wQmexq28X*k|EBzIrn;Iei ztsX0}B`c)n>U%b;v-T>V+@^YNt5$VupMGn8hAUS<4Y`)9WohfVrdzu1>AHewySnSI zqG)W*E4^YIlxo})Yycs=L?sw(Y$(75Ff79cz`^c83a~&4P;9}z1Zf!T9=OEjY(NRH zfC+%C39x_$Xn=;G00xWzxNN`%m`kIGjt;a$1ULZdKuEwGfQ8I#0#IzE8bJm4?9T$N z&lY0~5UmIJq6c_@dm$|kBrVe-?bAXn(&m8CA}tB5zzXa@4v>HckigcGfC2D;0er0o zz<@6@tuY3z&-!U?E+{UhD8TxZz-pMGWGvk#4IebD!&>ahvH%ODKnhswYcLA`A(TK0 zfNbBIfCl_+32eX&ynrN7?1g|xBn;5c%q-5{tmi<;&5i)i`as&I?a;OW(jINoTEo&d zt?5SX>LP6g~`(cJ}n7YL)Vt>FOu#r3atU8?b>o@+x9DN!fo8o zXs#eQKn)BH_jYb@Cg&4?Zs-al(Hel!mM-g32LPWg)cP#ccJ0>Yz|`hIoFuK!Hc|zU zzz=*aFjjyt2Cx05ihm-YzaB60R)=*OK_g^r-Ev6uYQXgF?FO&__L_$O;8HHRbS%k& zEXk5A;~s2jlz<+fZ~8WZ{BBMUYp&<`F#URN{_1ZrQZ4H$u>eD@0E|EZ^e@uxKm`DR z>*fFk+=2%HKo*lg1t7o|(;@{^@C7F*r4nzvR@T3Ea5Q`wx|D_`_zc9Fzy*-(1%N;b z5bg=rFv3!ThfJ;oY`_Q9@d?wh46{JsZh#AnhATwEx3KT%xbKT-uFT4>=jcEY8*$M3 zq74k=H7xNbL#@+3Ee7O?Sr#w=Jh2B<0Gc&;qUSp63}8CkLRK_hfRD>Q-3YA^e8w~|IA7;GZUfN31UO3*RGYCs9R!~u+K!?J+EHt)f@ zM)j7!GZS(lOYz6h@&JHx zb=t}8{jJ0Xq<{i2Zs{}%hZw8_Y(QEQ@>z#39p|;*roe6A?C8XGORKdE-}MUr?e!Ke zM~{e07!dn5g69;r=U9j&Trxl#Mkbeb1ygke7%h3XKpEJ8HI(iEN9}e6wPdR@1_X8@ z9Q6yJfY|uJ2_OLQdZRdgBLXx)3$@T_S1=C*EiU(GR(t1GzxIuZ1!OqGp0!!;K?=Kd!TQX(l!o=T^vE8rTlcO1^+LA|qmEzGZ==Ys%%aW+c=I>M zMq-1mFWNHF677%w_y7|v58S{F9Pj{hMPyfP*Zu(4HaQHSzzfi~4%l}N;IC-kP*k3P z1h7y6p(I}0FOfEB|7>X^_=PHXddh2qcXhX}1Rfv2nqO>bm~S8CEyK?71z;}?uzB^i zG$9~2#(uzxukgsawO&uGNPj@Za&C>M4gtxmc4M>W#6|?@xDih_0GuV!f&h>M`3+dc zke{w7AMn;H@eVY(2joBt1olz;a21Ea=LSc2KmaXD03KCDc#C%hj5&#x`G3|Ynn%Z% z1@0bDtZmD6G;8#n2fzhTY=!UnOBhYW7WW58EMBwp{|JBh$_9+0*Er~yj!i=d%^Iu) zOnT6&@}6wL2)tDX1c17C02%;!r*A}&-@pKedc7Yo*21z-dqAoW4PXmMEE~WB)Ii9< zM+3w<1mJ)iwNMBY0BKWjt`jMshGDP!`g434O%Ot~ZvYLX^s#q*-Wm_!2C|3?5YUV; zZHw#*S8upmKv)w(0?;gk6pch@>?D6XNAJN)jC;^-aU?i^x+nVu7!L@vd(pRh900i| zbFIBE`PHt#6q@=`gHGrKcAgjj3=}|{_=myUA_Umc9W6kZ^Ekw(>aK6F@m748#x@W7 zfb-sPY0z+n*Re*={hT*!vSaVaa`X#h!U3d!{|30V4Ucg58Z6F!4*y`Ri4%h7B)}ic z_W15RkB^4>%Iv~+JYvCt(YJdADE+-F`Ms}z4O}hP0zl|&uV9Z30E~76CaFY-wStN;*r3bk4!V$tb}H5~xbz&%1ZNdsaq6e@*~EL1R5uvlNYZ1|x3IGfWpg;k@ ziV7o=97z_T#)}aEsz?YiMZ$mr9mS}Cut3IxF=ND4LfK}H4?QjQ{DEmm=FFLhQr^Uw zQ|C^el`b(VXQtQzPZkaYcy-~!Hd~y$nRta%+a_AWit13Mpwus0o}3x&bU=ZEWDd+e zvycr~wG?fueZaP9#3lvtPLd0h|4wh14l$NFNZ>1lH5O1^TnG@OLyHzRZal8DL!iJP zJOT_#+Gho=<0w{ zkeUFoZQ?lvzM_nX#ywKFL!zi{#@gVoZD{#mp0%9vhA164G4R0I;!u#m3LLyg!uHmx z5EjKWyupskJ_J!j5)fFSfCo<1On}aecoBvQWGrAK(Hg)=GzqG(;sgXvP$4!l9^KLn zBadupw<(o`GD;9IC$D&iOs`U z;GP_AN-2LHnkGJ=r8a4$myW|)NCUABK53HDU@2*c@@&3$55TIvsSJeblwUpwliYY- zNud^^z{)dF2X^sA1Ah7A2H;}E{Gh#@*+>|jg^}8d!t>S|ydH`#&RAoBc3>O<5_BbD zg%wW7;M503c1M>EVL0J((M01&H5EdLxr)_()U~9&qurV3JA9@x*`k|OR_NXgL7HjZ zcc<2Ay!Z$cKJ(($t~+l8l&>43M!;YOXUeS_uCcX~W-J9Zpy3s8+7v4kTi)(In8K(@ zbZu3dnnjpW|5jI{?|kmL0GMA`sKpvuP8r3X4*J=_GQ}5X+^8H!f*nW>0++ko$RZ#B z40K2Z1sKT!B(Q)S6+i_iz=%eCq=E~cKy|=MTI*a_2iPHpXvZQBvru?D-0{wZFASFN z5~K-kxXBfxXjizp0;Yg14+Af7MhQTGlx`5}To?FPH0TqGbJ0L;n;^w|MgYG0u**zp zvPv?*Vw4iluNH-3Um6njK64pLa78T4cmgm14%~nQ9ty}B7{|CYj4B5NWZVieAOKX2 zi~F?02;un2~y!!tEt%s%`haL(P4ymFj^)xStS^D(v!}SA;L5f z4|c`x{{s&bMO#uKuBI4e25Zy73tmtJA(BFg=5Y@=%mo?=>{pX;k>V8LwZT< z3b?jNu=#l-j6WD-rCcx%!U)4aaC?!JK1_i<8JnN$0!>BZk;tq3m~jp~-Wl5jqf ziit(m@s?X;aXo@*BcyR_PYGt4m-k7?QonE_4btR|4n$m0r3 zv`&&pZU{^cQBl zhTS+(6j0P98}Xn4UfHvq>s&<^uW+Kc4r>%OwS^jCis=Oy>y>OZDg~1@M-1c}1Dj5h zOrWxI8OvhzGIOq4R}STvvdz}E}~0RR~R=L#3V2ggkj(+2ztN67?uzyvPv4hld41#hOo zbw~)ZsOr@aEC2vF`zCHd!ds8=N=Rg7iCNDoVm|wT#3lx`CsEwKKmg-k8&H@0{B=!q zsX~<>)gFthVJD-k>xn&T{p}9B6LyZqQ@z(;}!j5syT7 z%M*C&VFXgWAipgve*q}L6dl0nZ72~0cO;-dZhK+V{y;M16wwZD&;bDe;6x<(!3ruf zvW|a2`bPb-)0y{=eXdms(qzvA1T{>-gdWjuC#AMv(Sc?+At9PA4OxMr{EQa zxaf7wb8Rng=xXd#Fx?bWyE{y75gVT%0v00-JRJtl9|*)=m${r;TcB{G3P?+Fl%dR= zjPZaub8v%JyC4PtZ~&QIYl9P+CIb&Ph@eG_^ipYi zQV@||IIrs<6s0-N(drnyq67YAObam3yb+w;8wzLvh~{`(aJIeejA6ChIk2#?#K1%a zh};hzOo0p(`v>j}JgEwA01_zPW|Fg+;aI;{z|Unq%-nKXC=Qv5@z8hY`>Qa2YS__?CPV zhP)XI$I1q*vB2Q59@YDVokAa0h`QjV?hvT9vEzaamqMyszDgQ!5qYZ z7LYp@#DK9_K30pn92m0-v$z2IpB3m3#B;w4i$dp^!eXgH;@UqfRK?}cLNlNrEPAO| zDhgLHfrr7bIaIwR^FY}>rkfr}Er#T~Le zhWr>A`8oUZ zwpoSu*aT--xR-=U;F3u*fV_gs2hnOmoXknz|1to5YyrF@vkDNAqGH5GlqDh{0u1N? z>)8M=oPig>fE#o>5-KyrrRpKprTFMWWoXkk_@}E z;QC5Ca7xkI#u*UE-V~_c49*K}1hafG@p8x-!!HF~GNyRR`M|5yE5`gXACf!*zbr;_ zS*hu2DNuXP1AxX9>PkZ6gYw*qlE6uf|EWy{C7`78rf{N9qy)_+cti|f2ZnSWbWBYY z_|J(egR0a@Q0$O^@Wg=N%9x}U5pqgNTt4NKP)r&Q8zlr5szM9J&^2uuxB`lwqXu`8 z%RE8BwXs0NQaU_Ellu7=V*J5d@Ct{>Hz5Ln_yLfO%%~WR2W`*+{D8)1AkPe7kU->7 z8wkXGw3&b)s&ceJSvp71#D%9Uf?{k^)KpCv7?mIRrq=?+bEwkFoQxmcQpN1j2K~}^ zd`B@Q)7U8lG!+^VQ&Tn-RyNSk=emxt(27?8Njo)y-++b*?2dBVk6*xs+bhkW(~p;6NRlh3pXp8UWNqSxz1bwR3CPa;t_LT1KZ} z+-Q(RPRJWBT#CWH8ZMdz_^6L08okZE+W!S$j9o218UP5utwl5d3@CscP&EM91x{Fo z%o#~1T{)(zFo0MAFbgM*!QI^brof9{yYv(%IL|0%b;X$4>M&K9{29x{*fAdEw6ibhGLnEeD7#4;O88(N6NC9_Lq z)ZguBm;U`)pW}l74q9{=1E|UX0sgpzSbz*LfT0Wn1t!NbfPt~4(Fk@2B5+a^5Go(& z2rZ3Q#{s800+kH&V8`L0g0{|U%`Uc zjGP9OoC+9YVbfR!(B(W%TJ}`ZU4To8m(${=xG&Qq1^qO&w0sA`l^(m~tC%tn>BO{NDg|nw z2U~c<`VbRrpvZA+Sx4zz<~o{O_K3>t$=Y0j3|lJq3%q&+-GmU`3h=}s{U-LLT78v> zSV~7IjnX>Wfk7%NqBN?O28fgcVd~3fLavS0fl6^chF$fI7w&0gNshG@gaROdNu~(| zAbZuTvrr2r`q00_un>H}$% z@c~A(KDV3CHU_7Y)8J~}73~&ewcB8Bj%=O)s6>8Bvz6F^BtIR~#b zEsEprqDnc)3G_j4Y%i;6Z??7uy`;+~fao=YshSBD*lZ$a(_+0Iun5ELL;|dE1`!Kcosz}diD@b;*N#ho9kX+TvN7(~PE_yM}K#Jvsp?YBNyCOl9r?cjgtAcFRwR+{&3bqWBvA|)D_?ke!W(dsP1y<3myG5Ex-<@JH6 z=oRp|0dP-`)}udi9CGv~5Ae8CDLEQ`fC@N)hz{gk>F#UJ?(B~Ct_7#|yKx33VY8yp z3ZQ^OfH2~aVKew6aUXZR^%A}{0Sd$u3DE`%%$z6p22zr`IkA@s1cd;wuKePx@$r{d zI#yM`6!}plEs~G&D05mR!H0HFbfw(}(?@P@Kb9Bqj(aMM-OQpKGa%25%VDq;;OJF* zS866OnU3-7{tym=oL@2XV8M2tK1G%c(MY#iFs{-A1rmLfa~fW5 zGBXhd*lPetV*?2B2Usm+GvgJ2faS&+m4oZL-)>y9dm9I2L0-@hx@_VC{F(Ui!asb( zxA|)cgk<798Z8-Tz0>1V9xr!6BNz*$Kgn)jNiazUrf4zU6I?*`G-Y%>-5UmoP$FL# zxQb|aAgELf#G=ulQW-tORfPh5JVFdAV_>Tk00PQm&?QjBP|Dyz5vWe2le>*Tz~l5d z8~!FKlPVJ8q~s$gXz*irh?uCj$k@mTFc>L0Nm*%mY57#C0x4KP|6oZ`;7D3(dWxE= zy2{$>`ijUSD~oC%S+Y@*GGh_p`|C>(q4TR_T=VO2uzawg@m%72pg=t{(hCf1!MySD z{JdeYy(}IfesG?madGjjky3&#zODW&S=eYBIRXGsASC37z<~ywFeoEMij@HX7;qWG zpuhtH1f+-|BkBZ#J|sHMk@Jy`9zSDIM-i))+I6ns;(%qNMTKY#!U8a7xaO2QBi{{%ReLLo$fEsn!bOjD4} zog^LUXawo!PscnaiExy|G7`R}tXrcJRq4}Zo|FnuaE&{+?%hY5@~9=rmxWv(*pmH4 z(cHYVzz&S4dZ0vr5)R4=Hbnj+DLp-^1neBBK{+)(qQJh~J&RWK1Gr`$Z&IY*WQBOFkj141gpOjc#ppu-5% zpu-+HP72gih08MXEyAIF_~EA?VMYX0|3L<3RscZ}83@3I6kSMBfC2p! z@R%4<@PQH@9_i`PXMK*QhY@k8uw{#evf=>&sbNA%1q66-Xrz)(ipq;m1*b!F@W6Fk z1T}ohm37*TKumH&DnleQ@d#PgG7)GR9$dXFrz1V+Jrf=aDX^fxF2l)FXd+$qlfjq9 z9$T20h1u3m6j1=+Uq6l|27w!Ugcir1ZIraFwtJprfJP()OKG`^birsPX_(7yyOCOI z3WwS-)71zg2oNfA!pwUkMZyee%raC3pnwbUh`NCS>uA6Nl=CoiKs_2vncg!ju+UyO zbCG+W`Mg`V?4}PUh!AO1i=AR$E zhl+5Be*5mbuYUL~dN4)-mwZA2r1J02|NkMMJHo#A32=bWiytBaNWcUtkP-&$ABb#Y zvVRD|KVle#11}i9|2c1g9PHpA8fXXvdT@mB!{DJR@VCpP!FwibVdpeB9}>!tfFPvX z3~yLM7wT|_JX{J4xrDG2+pRaipUk|2Qc- zhH#I3)FUCI*hfGra*-brqzw;=NJBzWh>2vRB`>KIM;39C9&{rogIGySigJ{$(Bvm6 zDaljHFqEWhr7KBcN>$#_ld>cs|0`dK%Uu2-mbJ8HDtpPnTk3L{qvRzpJ4nl8E>M`n zY$hX(sZ0eXGnzDXrZt@jO==Esn%aCHGp`9wG-k7#IgBAWs~OI8wsM^3JRdjPIYf2J zQmsa2mkRjQ&-rah%;R-p>ki+;7L zCB^DStE$zCmNThry&zA2|E5;4YBZ!_r7KuXYS**QRjgs%s!(l;)x6qOs(U3WU+=2d zvkJ7WjCJ5!(`D7f(lw-Nb*fhjt60Bo@O+U)>}1hu(VB8pu!lA36dQ|L`8}3Vot3L= z^V-*}YSp!fjcq(PJJQQa_O)KE#Ar(k+{LDLxG!Al(VD8;x+)g4lxQt!g=)qAmxGf80)(>RRl-7ykx4CJI}(lA6W zvXPIB9>Qk#a!l_=htGnCkSIZi;v7WW9 zlUnOr>l&rG-nFm$+3Q~mJDtHEwz08E=wmBer^Q~jv)7sIXG@!(&7QWk6@P|trDG{Hz#a&YIi))+}8Q-|aPtoy@i@XsbAGyh6 z(eRV2yfr0X`N&)D@{hwj<{O_m%`a~An@>FFI)6CNd%p0W1O4DaANs(HZuEa6J?Z;i zI@9m%^rz1|>Qa9<)vLblt7HA#THpG(gN?GlSW_q^}D z?|%>c;0u5F#4o<_kB|K1>plZFEg8BjL4XV>fBMv~zV)w<{p@Rh``quo_rDMR@QZ)^ z+_z086eXe)6@dKgZ@>HB5C8bffBy8Zzx}^&{+|5A2k8&R`tJ{b0Vse2NPq=sfCq?x z!lW7)XOJNPY__34g;Ni$@8fV1Y$wghz;k!k2>_$b!cg z|AI5ff*&Y_yf=kYxPmIEf>)@8FIa_C2!&S2gH2e1?6(t`(0}@uglVXTYgmCxsC_O- zd{4N9PuPULmw{j?f?=qKdw7RiD1vaJ7w!wyt=!lP4e{P6^ zW0;4NXoz%ZgBqBHUD$$dn1?6$iFoLVd-#Wbc!yb7hg)caR%nRbr-+mg21&FgQ-Y~rO1nIU4X zkNe1v$|#Jb*oX5dj{(Vy!5EFjxQx;`kWrY7dgzY-$cMTIh?l5~>?nRd^E_S9j~mI6 zw&;z8$dKr`j_62`57~|(X^{~rk}7GC&FFiCl<3Qkjb5mjPZNc|Cy!(#Mlu36^0g zh$-oi)z^yIc$VL11NC!1Vvv(!372uHlLSeFLMfNQmzLoNK_`+=37L@zfI$ENI}QEA0{{R3 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/002.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/002.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb22402217b32490981b080b655c534538767a5e GIT binary patch literal 67 zcmZ?wbhEHbT4g JC@;cb4FK3@53&FN literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/004.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/004.gif new file mode 100644 index 0000000000000000000000000000000000000000..e752fa749a234b8c341760d85e6acb2505f23431 GIT binary patch literal 965 zcmZ?wbhEHb%wX_lxXQq=bLZUWO@-gSz5B3x?eU7(mu+Pq7PQ~*Yd+tY^Sry}T3hL} znY|xYPd-(b@_EzTPe-@CS=Rr4+v-;fCg16-d9`Z(uPR z>%B|wW;DK9Hto};Bk!iv^!FD(etevPf#LuE|3H%JK=CIF*i0P|3Gx#I+kb}%1s*z5 z{U??boy@Uvzp$djYi-o}8*9pDix%yFu%SZcYoF7LEmddvCf@(Bey4B#@%I(4_MCHn z{=cHSwzQ!&zp1&btvjKkGrMPEbYFjFkka%NrP<*#g6GX&I9VZJYFEIV70C-0EDBsZ zb7Rz$Wz*NJj@qzc{kqsC>B}bUnYU);kyU%v&6s`c$gve?E}RSAGIi#0JyTsG>r%~3FBb!d`bkR)?@}3#E?5v*sv^{O#)IzOyd3TDddcohnV)dhoY+p2B^bI)1C}XBY38 z9Z=ZV#=Gps{KKdF`I~cJZ_#_!)yjE)@|nmr=?DIZt=3*?dErS^;d_-n*>tnF&g<9S zJr+CbQ=ZYb`q^iD{dUZFaBSxf)&qNXetv#ovG;txy;h|fCnld);tSp_^Ui9oHv9YF zKP&ESIJ^1iiDwP0+`>Jpjyt_(VC9vxv01Ue;Z@D_$+89q*!V3T9AJ>rxiCNMTZz&f zWv09b2UrCR4luC%Ry^>)ZEwMkM^luAQXU*=Wt)=0z|NfU;%cUB)VIW7CO!s7Mw4qN z4zhBaY)Fc#cD>SL;;mS8fSE@^;lM->wh0VuR*Oo{JGZqyQ}XxqHE`(kP}`}(XloQ^OwFmwkJ{K67M)j$~<` zXsWJk>%MR-&vb2PO0MsG@BhG{a7Zi~kI1BQ$!t2GP{m+6jaskR>~3)Ab_d$9I4mfe z%{(q(y*^N>~x*vPS?$B!WYVGs;SvZRCo2o4x95Xz)W7W2+j z7(lBgEl)3Vju3ExCxrnkg9=^Ql0pKVNHO@Vu=FI$NY?yRIGVKTgr-+#K7BIP3yMU^owqM^$ST#2gShiwIV3lxo>zaE-!Ok7rc530laS!9oD`Kx% ztYHA>iRUAu|P9%g*PabIg{(|I+l7_s2Y7Z!5{5z~xTz}M8VwOkst>D#JTub^qO zcg@+AE6b$|H*Rj-D;_F84uU!I=TqfEpH98H_3PNPYv0bjyZ7q>N`w#p9VGb?=gWUg zAA-Glj_w1 z0~}>y`bZXCTt?>Qnqf+3S7CSNSSDYP2@~3v#nE;eVuIGV=VNEec@3az5| zU!h?$8k>WHDd?EqCD|8j>8wRsrg+}AnUg;)=^LHG-RWwWs7ALOak18F>#exvs_U*N HL;wIgOuUpz literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/006.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/006.gif new file mode 100644 index 0000000000000000000000000000000000000000..79bdc38faa870c4cc6cdb077aa12911fd3731ca7 GIT binary patch literal 3451 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 QW5nQHVyGE99ss!bf8(#uQUCw| literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/007.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/007.gif new file mode 100644 index 0000000000000000000000000000000000000000..2154bf5ed97e8024040335cd1e17d6fbf354776b GIT binary patch literal 30436 zcmWhzWmwY>7yYeAj~+dG^gvo-quWsuA`Aqigb_-Jx{Vq=5NTvIC@3jmjSf)}Q9)4w zNks({72W%P?}z*SKKI;s&N;UBHikxlB_JozPXK6oQn`4odH!+i_Vx!=SF%Uu^&el` zpFYW+&*j)zp6j{c^5>ybMtaKMSslGoIbaC*`~Ky2B7$+Vvp0&PCd8*}cK-U@UPRs% z&0}hF58QtL{N3H#b=d*_e(P19CZxMF@^`PxvjP=|U-2uT0g#(&E+5Qmh*E!xdClXVKD!&k2_gwCx=p+|qcm^f|HR;mq{l{$lUF)1}r4 z6&)q2pPmjC|&eL*=bmmdyWOS51idXsdd@m%sxhq=DAr@B2ay{?kK$vHL=~tHHT`0`uSvLW`q|H)TMbq5 zR-UIm{QQt}c@Ax>;+Yj`7FqW4!JX|Ed7Jp`=!DK(ZN=+gq>GOHo0pAaK0MnkMw3fR zqIlG~n|)MvPC<`HZoAG3jff3W-hYZyri|g)@&*Tvq+~Vgq`fKY#xA&B~iM z3vZu4fA;3-^XG4#y;)gZSdl$x_VN1zx2E*ZpWm?A?EU?BvcI6f|3m%%>HjkUAlbkl z4oSOC=5QKPP}Og$vu-pCCGSve*Hu5Bi#`&uJk`}OS%|UBk+kn_oW6{8zvegH-SnUg zcWS2EzNh(Nm7&JHgKsJ=$MPj;|0ErHTWx`eV%}#BE!&yArTQz}dX!90afpT3>zO{8 z$2y!K?^A>ysQF6!%kS-9Ms7dlb!&Xtn|>DHMxP7h*`DeDj0dvlQr$M?<34F>NF}p@ zgTQxbfSlkh5iyE1F3&6MV&0vxYPF7G*lNdzaD@>cNRgrdkUtp z1o`k#O7wI{ZM0HEE1{2tQ_@>t1!XJtQ8*!bJnIaD*9fZ8>_#~G+#8kSS6_Dw zHPy!4`ppoh-MVtUtTZ${xGC=wd6egv?;xYgP%~nuj;>k~ie|c53hOzl6L`2CJF`Q2 z%S!*eALJfJR*V1i6shPOExmoc*~x!e4uF78h~3$|;d>@-NOfVmdnQLVGoi}AGW>4l zzp_x+(mAy*VO{36mXSBVa&BDjnwjyt{eDectM+NBx|ZdYwvC27QG~k2T_t(l&IXuc z1L`L3h?7R&$}re*{B?nIKTC#*~cr zvx#~2LM?XVs=oU<-m~>0{Zr$bDf_u3?gsRv-Gol%eqNYUgZPW73H_n{d~#lcxDH~}wT0vf;g0k4OZhk?+}HMsduN+86D#ab*r3Yp za5v+;b{vu5`0^>IX60O;(Nn5lD`tY5AvGKiBjE0pJdMqI{q~MgGsLQ8?$c^_2l3>b zuhmToTjsObkIvEDYP5n|j&A*Ou$%vSwa%l(WZ#H=ENO^bdl=PX26344AL(X-zMtj- zZayo7Zhm^6Pu*)$X*~7A-v~%Is-WdaY#ViJdR`BG9Dy zaGP-Inw#VNx5guP+nheOxkuj6&CvK5t{$km5V_ggI(n$WnU>=bB;D7hbwSnRY}~?3aZCL+Maa`bzf7ubIt3m%CoMEeeIzgP0mj%AKd8Hs|mZH<`<*#!e^-O#;-gz z|E~@&?iRS;ym(TH1bJZJSvps7XNmxlc1<&107Q8)07w$GG`)#IG+{G>xG*$HIul@y zkBeNy(Fsm#y@O#Ntft!<%JQ>#tS|yy(6xFH zPa%F(PkJ9I@3$gOJ~$K8zw%OD@y=Q+PVB+uRY%Mjg{-FbJQdUOqdpy7||71l6w?9X;Jy@1=Uu40UXU=e~q_63`KoZY=$`D+AwH^xM6&=8pXr)rQ z>_kUhn{lcZCTobCvp1D(x^ir{XP?XcWZ#ivw&%s}r%606n>@F%N7^j zp6o%^EG>fp@w=a!;%hFgq-)@{Sf>971!7Vw{_hM~#7`RHnk>Jd(ZIR7D>sWRt20my zBSWH#I!*cH@D*dw)7s3m7IWtf&BB+UkgJThwNQS0GZX}7W%X?wizd=Zff+ICRvd^U!o^IADL|0KuZ##Q{o^tUtCQeEW=$A8 z+9wBBzY}{w6Y(Z|(PbR22eV1m`6D$Coy}G@aD~4f+%C%0CHZY?iCUm=6j1dalPwDt zAi$tx*Na|2+sN2(I8f3J!&bM5g~6)zht&H4vzxbyj=J1^u+i>bN=F4W}@VauL+4QKtOPTH6O}+a@ zk1|k*tG1?_7IYX}hQZ2el>fUuicb*^l7+TLzTHB%7-4l{&$dqneuzbbfoA*#v~fI_ z5t)Os1^6(1_3)8;ok<*v=gcXjz45Smy@0?_s9$MF*>gWQJm@sjr^ot42`mYo2~Q*? zJvahkBujE2`W&cNFZA!0lLW(-;Hq2OpHiU=6Cg%YJ3(zNDea=7TEuiG z3?S2q=-rBOz>vMkFwPdT7lxPj1=JpuI@$t@#>L}a@W^e&PPfEPC&s@<@%o~8qe+>M zl`kk8q&-KRWs>6GzPMoe^8z0R>WNF(EW5a4kgz^^(Y)n?yYg8-yZ9XZCHEIR77RE6 zb&<#h04)^sujsL=UKli!D|idqqQ}uTe$H_Z;mDw{Jt5U00o54+y3c)K#3UPH7#-nP zI2R>*4$jN)DZ2t|S^>ZZQO{u^p3hG>0*HbYWHu_yy_se?M-vSV(caFi>;>@$!3eUj zuRwZ*G9QG@=Z5j?Bc|1LrAUw<5_>5!ENBlA&PjxabRy2PU=DaV5nYJyMA+kE@hdUG z%nYJ3^u+eXlgLc*tpgqE!B$t*{Mgbyz+rX%CM%Zm6I z^plG`1SZk~N6((3hoiXYb6j*3;_|_V;+@IP1&R)L6o}=hApGKAE zEa*}1!~CG|6TJh}ig9Z1HgK9mN;@7%wBZ@qM!FEgGZF(CWqH$KVbYm!ShoEtTGovO zbEEJH6Qc$2`AcE24NU%mp*X=c-DDp$L_+VrelNH}cL8jt3)dq{drMxE445=`Avp>F$X7;lvO5%_>8!i>HKL#m__Gx_=+CUP*~lvHX#|?th@Ptw>9ZeTdh>ciw0(R}3BZqY zUam^=<8ywpm*j_*54bk2^CgWXvhx>t)JaZk;0I-!`5nF3BSY;OwoH3^mk zl>06g{ym6`?u5T@Er^>IjND7$BcE3>rn_Zj=KZRJ3)dIzTx705D)uhqp%La;S$0IQ z-B$gM7dVv&^FEy=F-VW4G|+L-%d1=f0IR@r5?Khb-tO~(p(4L{=G;14(&L%jSDqX8+dq4vIWW^No5?X^ckZepSP0(2Fn}eV zhMup4>~P3_!SQ{?^L@nubw#!pFtYmOu259LHxk(TptXCl_U}&ZmG|ebTx+WqPaR4m zkC$bJC7thYDL7Ar%a8#RcAZ4c5!ETxvH~6`79^i=skz%jlKUh}Q<3cR1=-`|N*gP|V4`r{+0Cm?w06 ze4Ec!7i4hdl~%`Qk;2W_e991m)3y5Pu@x%hESg}_bJeGn?IpoESB#;2$F0s*qa{t!}m?v;Uz0aP_ z_B^fS;|trJ`g4|5Fg}%B)qg9)N0MIiD`z^~!C!dS_c}79l60 z7ULRDnQ%DWPI9`oxqSCE6KYJJKk9h;_=Si>+9^N`&3r@#GNZieL$_<$bG6GmXQTFV^cU6R=mGw z_&9QezsU?sndtnW9$l%Bzf#WqA3HM4SP)_XbI4LWHpZ!jClOzt(^+e4$ehZX<+_$W z?UZqTZ&bQJ$N||+-D%ePZ9Esuvy^Qhaf$B=YdN42EhsEkB(;rFDgRk=)6+LTz zouMVlRZf2FXi&5)5g%G!uagKaZA zp4oa7-|Y>cspEw7->DtW;LQxK!EHeC;pM)j`4ZuQt{R^jz0MyYk#{#v+&>wdSqig3 z!3}F5eMuZMrlCK_FJItHnIkU(`d184dVYutCI1D0bkBbunnBp_;ZJn3tL`I(Bmf0i!>HrWZm=g--x>p<5)+>?R zC{gjkOf(@J$7xX6ZYGNORTW>(c%0Gkn3@#px&?P;aU5Ynq8Oknzd715#RLpjDhle! zoP^fH?N*HMGU0Rz2i7OPPHN%Ex>NVx2stvx69z<&8F0PhCHZJh;T8Yp#hIOuSN$5p zeNFvxlx%B}5`vH4WOJg2G4kd|pp}{U>Ddhaog_5yom6bfXagU5q~Tr`#KlobE+ ze8H_#oErx_k~-S42hu$c$dFddoZ$E8o_Qdldu*xmn*-@S4+|#MA7$c(GFRSyD1U2^ zI?CYOmcbwr&)m=1UU_A}S%Ko(Yd>o~+2NoD74u&ls+iboS^T^OcVGf43{YVWScMG0 zDQjYF4T90d%HbF~KEaNXK%yXnZ@&wDbHBdL$uZ-`zXleM-L%9 z`*zEmN_g%`<{E?yOgg<^kUdZy$u5XO6_a?8PA8Gc2oOL-Foi55be7g;cuvPv)?mE z;Ld!7(@n^UjlScb*57C>keeQVMPigbet3CeIXPh87hvo_m^hxNEabsIXdZwBkyGqV z??rcl=NNo^A5ye1=Z#WFC-yidNM8&NWBw`edI2lnYes+7%!XcgzQzD?;<&C!d|69P z2cz0DQGYt{-Kv*fL|4PL_%3>ja(UvuQlusb6sWh?ZrGj2_&*oCS+KK2gi0rHlk!0Y z01ZY1Bve8K4yvD$b-Q-Sf^Csd!vp`2Sm7gc{KQS4Ro=w9?~tcAPMkm`wjQkC{_CT0 zq2}$I{)#(cPk6)XwxJwIl;g;uPqEr8lMpz9Ufp2Y@F<^)3-#@DL1T*gwD^SUuMj_OCut{J)vsHU?h567J@ zyK8GCl(Q)a0S`kM6(wgHa!aVb70hkQWZ@s`iRHrht8! z-}nC9IQn<{RXqj7MK8SlgDjbXPXNdBkKt2 z-XnAk)ghvwhf;lOeU4i`?;|%id&R4QCxR5pNzaq^FYA%7dA*S`pL?RARBl4y(1^i7 zD)r38J5t)5KidUE&EsyTpmqTv)g2 zLAm;47n!-dLUYIkOup`++&8TfLHSdK97-4v2%5A)4TB;p>awsGcVOJu`Ke&%+4ODp zZur^(5)7$!4E_G$=1J32yB~l2(USL*e&XpJsHKYekN#9=jga0Q74i8TVOqL0$d?e5 zZ53gsP;|eo?nj~Dzw%&)eW~}zXLX`1r7Wy|aJ^_?TI0p20ZeTrD`Bmo8Fi+&&O(B` z?tSVz<~Uz>9y4K?f9lc&h4;WI5wQc{rqC1yrVkx>f4Tv+84)B^88%X#eHT2^$~~}f z09djlpQ57c@dAZvor@oIZ}J@dMU?f(j5<=LJ@u66t_>vU${x3Cn5%L9_lwR!Hxm!9 zH!>oC*6|>Ii*j+2(^Iq=g+RUAI`VvI!l=`l;Yp@FyYVlrf8TowDVAJiv!2GzQD+j; zE96VNf4JBF#Hew(luJ;nafWDtPk3J{dygQa@yA2` zAgIr9fRE$;&I8VMugc$bPF#LOA+TMi`M-UZwE<^`m-Kz$7nIR6Q$4wm7#;mUT2thPJY|VYTXimpLxgB#sg#%y4 zk0UXGr>rt%9~qYD-H1i}{f#eaY=m@GQv_!sEd*|mGnB|6dpB1+-#y)CYvepLU>Kst zyQGA?8d=o1?PWJVg5i}3*QU)kXb(5XY#o8h_YOiCn5IxFkM@-JB* zL7?!@a=jDeOCuwkPO$(WdKS!`KRw2|x%0q(i1X;8PYa}*A`5Yyib05r4mPSha*9+DhLcJNS2ReJzzX8F1V`2>$ZU~x`f0%;ya={ejMR+7jds@U^ z+JB;!3L}kp&$#iD=CVH4aVI5(2k9Jr`ZQRMS1m1A;m;VN?0bneLBn%ann}m}$CmZ% zibY&?fd1vrhqkPPP!1HNo85?x(UFJh8J)&BOdWR!%2{ci^t`;@bNHLkY+#S23u1jG zgDP14HfY-*)>Q7M#3MCvO#or&$E;NJc)Xaoq^~O!#!<+Ow0b`z>%k1FIX!0;qD6Q_ zx^_A4O0JEOvtQ1K%5K#j z#z&&4e*OV~>FbThL&Z(=g6^ACDZ>4M%o8{2 zbfBqBe$m7C?~$P$2KTITVCON0PEcO$^g2O2cMxyP!3)_p$N{Hi>HcKL_?V6)6jyrH#6i;EK$>!)m7Y*p{Yeu}Bq=j~aUF#F-Uaq-s_b_CtC z7aB>?l%OyJd9Pah!hT-K2?>(EOJi5@xMZ#iWMF-MQ3@}95Yl8$^E|si>3^55gTEXk z^g5rrfxknK;8~{=m7)OGN2Pb{wB5~)O%o|#?))txxf*wB3D|XY-zeqli=@!R{h4r2 zb0tB`w;{B^n&ZR7^EH)8WABht$IfD`^9L&K2H7bsxBA>xlX+@vf=_=8fXX zgO9ub=;U_2Fp0OvBD9V|2;W_{I`$3-~}GORjseP)z0mrnbz!8qEJbY2_C!bDXc zDGt;P@rO^Vl5DsllZIshHi;)v*O%YOz~gasgzmb8v%1%SmW=pQJeE5Usa|REco=`6 zcaTYen|*lV2~%#W1zBcOM$<3V(D{_*It${{p$aQVTZYVsuZUQ=u{YUW=639tGqhLv zfQ68FsbnkNtF3+DC_ef`%UNT5?pKgAjz$*jR~*UwJOxfgay$sk`)g6;%)bd%VimL+L)4GMd6$M$#eQzr-Z98c{EUm0k?{kvI2;1pVT@)9}*x%98GXz-JpTd7h!eeW7&g)jkmaPVQ z4DHe59$4#GM?@lu%9gmJdH_?c)-XENkiJ6|Lk$as5kN%w*YzfWQ-EGh>+86IBk!Q6 zOl*R=O*2jyDzQvtKwwQfngV^`F3B|NP|-Z{rW5)8;RwY7GMRrl&l@vohzCnmz`9ha zKHC}h(kC(GCfmyu!eLqlth53L@WvCWG%5=_2f@+PCIQ78GkLNkP$XV8L*3Xb(vE{B z_-4 zI!S2n8tkfya@o3LpR3lZl#5S|fU+E6&H#+tZbFJ5kWSXfh?r^dYfa}Lrq64Msu9#j5>l@kvE&+OulR*ztgG&fGyX0`h_?QeFhN&6cV=Eo(!Q_W11mm! zq|Fgzlm=?2XM31O+9M;7T}uh+o!1|}8gnj6Ft^3p+oUpVgJ&y%7bt98WOT0#JSt44lvfM_Q(MM3(R^uO=9PcvD1g|aF>HFF0{UVPyOa}Ouzol zvhjcLYt_wtoWGVnZ8Z@va7<@~7U)r&`Smf|<7#1X+IyXmAH`4(Lj?Q+;=;kir}+o> z7QmUqX#_pt>IYCPBO{RkwW5F>*D8O^(~bHc{r5spc7BW1OuNIYoPg5I4KoQo>Zm{W?ZyrJI0!Df)zq@A*#k z4Q-7+Lk(|UF*}a4zu=*y%$NbV+9EW%TqC9G#a`;urePD~AdiJenzS9LV;N-fOhYM2 z{vhwM*b3CJ<64?LM3KSSRSuH*)qitpGJgonHc6t8DQ!BItdMm@0@ zwI_|10X!1JhRuCnhq#xJap6O_PGH&TxKzj(CnbY(5!g90FQ0$>FV~~+kZMI7-~F9Z z{>Z8+BlRF(wcP_NnU~tq?_hEHX&p~a5YaUjd$gEE;K+f?NMFyFS&Am*siqi8e) z>9^I-{}VmH+4SLvSN!p~!7Hz(`MqxE!*d-WVpw5rZ&1y43z=1K$uy8TbfHvn8rD$9 zJLD&=H5p*(nb$LQDCyY?$IL&1T?W9FYMN7HSiRiGf??7NX-*i%Y&+@o^RsC${vL5N z3}7@ZERF&fym>LKJ3{D1@q`}ZaBh2VqFWN;;#`(*hHj;ss>g>6e+up6wY4$k8y|5P zw)2hu9*>5%Z|3?NPwHhh9Sdv(S9Niq`t@ioVeoHF?<^F?ig$fe7t?>~&EK$gixj(E zqHtS$TLdfB&Lh?pVUh7CZ2eEU-jslsbkD#!FpPVwf;_cO_6A92zgW7qqPO92G4EKs z_YuB}ewUj3{J!xkA*DrU?+Btd#JsN-%*z{|xauv!)nI>Q;=*jnJ+$R!((gCZZDgOkJhIQRo3I>l+MTlfyIoR0l;=IgA>?xVVJ*42sp?H;Fwb50PKf{ z;4$`4gzQmeB#I3gL_O@f9`U~LWbC@zfVTY&$=t8tq90($XhkVkmUuEKn(j5<(^E{_ zIEeC_G}T-e$ZAigEYkp=;D+w?h83Foh7l;^71eYF%O;cy;>6j69)69+($Pgp&Cu%a zRHJCP@ef#xm66sOH6)A@au8wR4R;t04^9Hj=0O}3VQy%qA-+PD0)B%8E1-wXU44j1rRA>dcjTTR_D zJh}{URpzdPBP+JaztV=})NjvJ=i^HAHDSB0w`TZv&T)npJ%Y056*U-X$8eb!455(n zadyh6N$n%7G&98J`-)QMj^0d%zsKVY!3{ASLT9QQvPc!$2CXMAzOA6H{-|B2{`Z;$ z$~A)9Y{ZuOBG8od&{jZ<0>&MPN!eAx4dE8$F&5}ZN(fjT>jhw*c|}+nP3Jv`8oi-f z@@0ugq${#>@?e!PEK~4^nVjyXcOmI^#OO36>P!+1@>5>lnYbqF&P*jEx-=!ax?>e5KqFSqmp0|nG~T#5GaY;$`Fy5IWne@ z@4b>wZIl_`~ zz7Nb~MsXmu10U$!)!8qY7(KGxMfYo0_XbB`%y}XD&T~**lD6^zRb~;~+BbGf9!QKh zXOJZ*BV#Nq1+zwfDKSnIc>aU(b!J0lL+Qnfw}Vpk-p5}5K2zW6_uGSVKK{nidwFCz zwqX&}oFFe=4H>UZ6A7a#?H#O zk4|lp`EvKIZn^s2h8Ep}%CugLpC`BR-3nJl(dT}5c-{6H+;U_DpUyfrMNu$g6-~d( zRJm`mKT9&aa%`~h{N$CKs)-+QFEsq_l*_}Bu=5Gz3dKBoH3-7D&zNOJ!6A8tO@x%% zC#4m=eaWd`tZMWPC+uHQ}mAe znq#h3NY3WFZ{f~i0`}yEmqn2r0s7N8 z|9Rๆ*9O$zYlLB_Nq89PS6ZbLcn0%{Z$BCuBGJ8@u(%nEOOpX9EIxCQV3=bQJ zfRQK*dQMBb-INZikxB9J#MIk*(vuY3g>!b%?gjy{X<1*sMr~_xi*IAc6Jj`A{rp`W zj6xjHrHzXuA6|V)QiDcw_9+{aFYGB8S;0+Aypq|iR26mcoJ~NP-x@5UwXNB{qI(=J zq1X3}XsLP0SbIAfh92?}IUUTQ=zsk8Wxu$`ffOs@+422cf(S=E<-&5TC`Z!C*|`O7 zW!>0}l+A?U8sM`SGxuz#YVRm7Z){zWgx|_O)na0KE{DP+g?eI*lrvdE~6-{E^G!YGhg)xPPae((>W?g_n#xG}OqlY6fM< z=|HK&zIGTI$WPeK2sf;1quI z)2D)5u6{yJ<%P(0ZQtM>HZCNBXBk}$2t6ySOEudDYw z%1MYnSulS+FsqUDAy+!KBv6iHP5g$OY|B(@x|apCE=xQGs_l*<+~I0uoHE5+LFu0X z#_ypIC9Q-(Rl$M7Z3g0^BN^d?8za&IaW*1#C)X&|l3TE(?7OvSYv3`$1EQNMxX&^&Hnn5Rl&JbwYmkU85BSN4>1 zD_Bn09uMLKF#Pv%b3OB>_M~g)gL<97+E1{}IlkBGCsjj_dN4u4yja+0Nz6p{MnRs( zuH(2ah*O3on;hspqFCug{ujN05@m$%T-72^Ap}g){$$@7q{H&D?wIJoH}xL5`ZVrFP2c$)Ui}2bW8*QLHXH%1=4{`ZIf|u3I)b%uM?NLScH0x zN>A3vGK$Eye%GkOX>YeC^%wuqJ#R3-O-{KgBym z^TxFlFy(=`eFDBkfRdj9w2WIKtH?uO}X^G#A6bl=-}!bfmQ;Kaxj${ zR3eCDueLt*qg5BvM;re$s;OcEMPx`|7eTj~-6V(0wYzV*-59;x-6OJGN#Y2&Nvnde#!El+VfjH|d50Zaf!SY1zxn$wq{_>I6ekzC&1!<+?n zV&8**NFa8L3`V4c#M2XRXJ>bH#M;AT^j0APRa4i{&y;%3gaUDLSar36X%Sh@@_hqZC%JL~|cUWkD0CVk>6jLy zw{?YEQSSB++h~`Eism1>OuH)gDTf90<5rp4eYJzi1fTQSFNQ>JK@Iao?~t>iyjR5n zr^XdZnc3OLDRAMYj{*X9uKA(ESB>yO_*Gr&w??c%&0!nvPHO(qRC#neDMPY%M{+Yv z7U_ECL`Y((3eHK&7Plw}&GasKJHSBLn&QW?O7}Yul zK5J43i#McU+?+wM+_5y7g!oK3bp?&E;Vbygy^LwSt75x&uJ1V+wJmdoR)^dWtc~`$ z^CLkbmkz2^2cpEQOUAAuWltX6j4es!4&GeT>>bHIDLcsa-h3mQtcyAo7vQg^j7=Qn zdOKi)iQ~_-PbUa2U8BI%QSildBYqbgSUmImZMSM8SNl&=s+4%RcbNj5w~%1`3CClD zqX`ca$L>8}>X8*{5U$@{xR@K^;bOlR1}4V9rR$}>hkjpo-5^|e*cDmyH4*gA6eMWI z%u&t@A$h*fhYF}P1#O*G2V^;M99A^Nt)x@Lz@;c3GiF=2UeqDO3g z+1~JHBr1eaGc098w$PL=qNgU(z7%Zt3+k#KVIxqayjqoxurNgP!?2*8TS-aAZrb@4 z?IakJ2%YFUVa%OMlNe12X!-UEas|RLixLE^KQ+`qzOkrY1GJ`(YVqwqADjJFRI@H% z#n+y1{QZ8L^yK`TuT2J0>U}px7O$#43w?7%<>#|uM5=}rH#VqfR?IrS#4soM%ni!Wwzp9;E667NO!* zWbCvewuFzE2J^W3WmjUBd#3#FBea+hsQkFNsm&?%*P{eKRpzL!(q^9{;6~jY>xM zXxsji1p{PD_LIuuJ;!)%W|}Z&*f8hx?xPARF-SB=`1CaX;iI=FgGz<`VKbECE2T;( z3O8;^kzAzYXCbF+xk2!#J*e6gqsDcJMFeIltz*R3G2He3s$&r2|BN!Yw0EX7B|D3z zF`5WB2o;wG!a;R)hWUpcgMeX#`iPv+T&f?`^=_fA4b`yKw)r7|n& zy5FO00#{hANdeXPU^%Uq{qkErNW59r8UMOzh0w7|<*jBtXrdGG!XjZHwb}G+#Rdbh z6FazI_3bnx)2i%^0IgY?I6x6gC_u4Fd>aV{Oc=;w&17&)T9~EqzUa-#C#QLY22aYB zB}_-&Jq{Z={#hLp#sp#0*CLy2bp2>hI!QU5dOzgqtb$iH_v6Y&drg1fsvk@0Tm9&g zg|T0VY9sCFfF&r3%74IevWEeSqwqz%HtC%l#!}6jD1@{W+MSV=1nWR6HOcQj8IAFC zvN*~ozdWQ|G|H&Iz|sn%+A)TemlvG-fX5waCO1Y@7vF)yA#J9^W?ved5+DUWWj8zI zMe$cI*b5UD*>fTKjT3F-SfC!2@4hix?h*BS_f3ir&t09Hs)wUMlSa&iEX}{A$zsy~AV(2SS-2=?=1JRn zsxW^j@Vp|+BipaxJF9sGw&5pD~AsUZKHP*H#?YSj@O=HY-zENL;2q{(UQd#)HMZ?}l4TL_WU zE-6hxHDsZ8yf}C9k9J;g(6f>hKnO{~@f{#>T~ay^Dzfe)=G{u$U(Sr){w{VBk>46p zU@eXc5}rzzAb~`8sTZS^7#A?a zS6)jEUuZ){eNa$ha)Mh1HN=LV@b>%jX_}0bmxg11Q{<{u#EGMoBYB%=pX^q%m%aPGJ?WxXMes{B6?8H`g!5{#kU z=ky9((gdt}fKU2y{r*HnN)9FV7sZUeRx*qq5gAoRgAJf|YDfr8h%GGPmt`RdeFzGW zN>xQx1NB#~#z)xJ{8G_+lsX#Ib>Wozb;de)Hd_nlJ@a~Qp|@15oRj6zbzH4qooi3mK zrY?1~~ zPbWxyqfnm>^Us28G3Ca2X?%sF=!5wzhi2p6YX*}0r`*_YO@4oRE{-w(M-1o){P!9w zga`ssF6a9z2z;aMa}HzoKt`ZhzJ10*^RPI@{cPXK=WjMY$7wtouu=);`?NwkbC@ml zYX9%%K3{vxpH0?8FGtmaJ)ucK^Dx`%)7rl;pE(a=oJT~IL#gXVAaU}7$gcLP#V43e zNCmzVY7m`r?X)~;l#dA_sCa0kkH{{(kuy1U(m|az3kH&(c|8Q9RtT=E3on4zf~o%j zty5sP6OlJ;%pL#uZbXk==&AS70$SRFr=P!v-rNIE|L6a|9fb^mMaDB9Y~tOt?m$ja zV{-@{jP`xo2~YydLp*py{L)Q(Y3|9x*HT)b2kUGL<{?Y!1xxy9+jj-U$}^cV4YY)| z>5q($%Ob2=G(mIiBWEK)eD5<`Kkk#2lk7VShiC#%6m=;FZ_hKyR*l~2i^bht;`0c3 zSE;O@8YjOTV^0NNwPPuj4|8$nYT~akK~(3Z1+LT)Ee}xvIuF_k^7=8t^k64%FM~__ z=Zz;B>rqN!Aj=~OZ#4Oh6CW9;^-4f)3Uy#W>lDF5>Ya>X89?6@F+<`zXZkZ!aCt%< zEGbj;riS}lnMkkgbe62Mup*}NZDGLatL)-j+z@Le&h(Y2cT2=$YHyVH_O zzwH=B%Z~v^qlUE|z$)Css5>k!>=bBrM19*rtsO+ZJ}fja9-4m~~qJr^=72NuMq$<50H6gY@F?sMcQ1C|}ds^l& z+Z6J{`t*YO5JudOC9fd*F)7p5XlHO_ION@#P_ME#*G@p|N8X8jv%Yj@NrY0LL=d;~ z(e3;;Z$v>JvLYujwG%(=k1q51v4Jiaf!}#J5S%DR0U410SJ8RLQ~mvM{O;{eReA4H4l76;a6s6@PbciJvOdTkxX z=G9$|2wGE=FjKfB)W;d~GOh753qCxTYvh@i86iz&*-CLmjDM>x!gEEWS3J{TFD3ov zA7$p5em@5kEcijL20@uW?~MSR!5bQN-8cSgHLOm$p^biNvd4OQo>TJD@8*8rPB@3J zewjUHeh@H3{Q2~9PBcIw?9#D;Y>V=|@}|y!2l%{nqqE#QK_PdIeu zHSjpSi$86dCu5b9rAV-AwtaO+I6Pl*^0wTO5l?CSuuZc~;QxVCHuLIXvu=K`2!5q8 zYM{;;%_Q_S#69UG`6RG)T9&}s#&cd9Eqg(3j_kyO3CN4fS4AG5<0(_5kLEbtP>QOdh|_sHjjS6`+xub5k$ zk^ZZ#G(5bra{oQk53jQDRlnO{_>sH4I{aLtis7f~Ep$8HVlL1q_lYRM zg5O5=O7Ca+d~RbQLcK<@__-C|oaHg^QX4K;hUI!R4ZTEm`^nmQ*Fwe9piZjadMF1K&h8E(v7 z)i^jG{L20i^nv9|8s9|qsF{G=_RAx7p8R7t3zW{73F$%9vBTm5SDb8@+sB>FXnd}Y zb_cVwTr7^-3A}VY@ps$hsL=&ii|#>?l@W@T5K|E&W;Dxu3UIuZa-Dbnh3LedB4h!T>M|Z1DdaaF}*_e$p zI5&BUvp(D^6Se%{ns?R?ANg1~QetTDeH8Fe@g0`%P9N{m*3E0}sdA?j7c#Ae+&^Ry zzrI<>6#q*0i?e!H>}&5(I<;5`U79*$<(y{VpL#_8=Tgq$QoYj|61zVG{*zb_UAdg0 zt{src#Qs|8W$Gmim#cUrtW*k|_mIAyeM`8pv}{DgsP<&V&ja^c8BbQp_7^eKS%yVlv&|KA}YB1qei2oS>fp?^Bu+^uS4oYLT8V@Xy2KsBbfxv zM0(F{zjO7zusio(K#9zo@a0=kZ*L!**$erg9oEEHI#_cke$M2-U#l-3OqxWk=`Khl zeA5j`_&o4J($jlO+q84{S7*Rp+{$-_z3;1hxU7qxo!`Gjv~_;sUOChML}WZmf%A6b zC3CFg<{u3r_4h;_6JpGUTwCt6npcZ|MUsL^w$a}EeEW~tK!LxAHG!q!lfF68ece`` z3PxxoDX89t-}|UDScbh+@nLqsy|n{bSs#4Z*k{HuK(C*$5lNk!#}JbBDe4WE4-NWm z+)3wL+^E0Qb>q}WL(ATi*&8gaKkUZQVw!H!hGgR`NhCAfRC_EV=iwJgqFLclC3`|n zcW^q?<$m51SsX-tYCO8BlGorNE3Z`DWPeWeYSql?4t1*m zhYZ#Hv-vNSPfS}M?;sX66ns=Yd&1`AyUoHh?nm|bX&diM^!SqA<7vCFi=>2|;*#Q;>p+@vR0$^gnwbLX zScvtw7yodzMbqV1(Py{siuG0=9fpqOXKde)6~AV6Ji{rdhTl^)`<~5xiC&~Lbs^l`(9TsPagmDy)MzB z()$E-stcu8m||DxBa}I1sa)iem0jxxJ}WMrSSB*T?jb48191!g5iQO(CX*^3t%m*8h3x?<5K|)z{NC=sQUZKM^EzLv} z5dbLpRnmK37HYZ|B(tOeKT-{9=Wl~T-KF5_02sZ|J03_lvd*rnJ@Mam3zfM zyxfk*gFBG-QSo}Ezzvu~Vw>b&{D!DVt&iZSS@#9YBPO3W0u#jAaM~9)vVz1aMUypO zNc63SHefvVr0ys8p*1%3L;y($)$0&hDgb0j{iuB2ZE!S{8-!YsLhC`G|+vxM2gNqIoKmXUE z+Z!=-;+>Okzc-Jm?7{vpN91DpMt_2+)RcGf=ciqA^qNfo@4}P8V&D8z;2A;i{n~go z1_4A$1486h*l;TjNO1IRbiDSRk@eDp&%Qi>7%Y|$BKAXhmr!wYg&Upl0G(P~Fz=}L zUi&;>%x;Rf7zRcKcVoU@60W2t9~_ki)H*^;$n{CO#qOvwW{TX>#yNMPIY>iM(o#U} zW}!;3v|g;*P}$!ULBI)diFA&VNd4NxFQ0y?>J;%nNzk45Zi70LS~2&SsS5amkikGR zaL%zmA+7WL&W9fnb{`+`}zIVuj zn^vup{Ke;!;J3f?*mr<^yG1rYYz}hU9Zbp3!*ps>(Gpbj0te#`5Ty8Q!Z;GY=p^fh zi;g2(hpq&eh7CszwRlkRV_Bda>V5`_FlFx82LVsbBO)>(%4NX7Zvr*J{d5jFb7i(Tdmx_<%4fb@q`zq~w^Ca^{gpvT5NN)mu+bglw{YCzbkPvMG> z#A4ZEFt5|_aB%j6SV8uVKE2_LSuMeJl#=rqSf(=w`+ZD`37G}p5 z`H}kW(H9}o!WvKgEA}DB+8)iP3Y>BHw*3`-J$!+R5g8xl2T=eqK0*&)!Pd*xKbL`5 z%0SNvu%1__uXHG=OzfPLr0*~c!|nVt>i;f0v^JS=nS)FCiZG^Q6`4yH9f;R)WO)Et z+6RbW!J9*Nv5oy~Tc{~>U~KHENQA)NRlDgM_xZYPhwxNkPS$is7UJRXyCv%25{3Lu zjl49Bw9}H?;0evCjEsGi`zs~?Er_={2w5C~X?@dq9Y*M>$IXQ43TO4+XjHgPm>>r$ z4r%~GeS{bQ=q5*!0)(k@7ngvNbSCT^S6_;Yis(X9%LD`ITNp0c76{tIt2#e7q*5_d z3M8FlbcF)zf6$swhY9ldQyu^jK;R4$@7~aQBX}Cm95Ck0)MU=_oHee0;os3dq)A*M zYC)LypC;KL-+Ub*)84zY(1KCO|A4rM^xuGxFOOEW&9r&sVg4b`B9Y1s<&Zsq<^ow< zR4~EXrAI8MJJG3U&losi%+(8LD&EUG_?~xAiUuwRi0A>tA8vw17H!iZ*hzN6nDBf3zE)+Fl_`@ zUxO)|{WmedVwFRLG3ZUMfEEE5_yr;8;_#Th_Qa;GW^gqnh;N1`ORfo%w=@{zB$nCPVctQ{-$Hw^=n>|k|mfgC429fX!E?{1B$XP z2UQ6aAD9;|-2CuY94Aj)dKr!j7@rTw+_7j|oo8pQrSP`YgQ zNtEcG6PnDFf(o*Ysvh>=SVL2;66pBd9U}1bm;SF&0wpc>_vaCAn#d?Be1~5US0KAg zIrcO7x3$*jI-Ld$AqnZqf431KabN%+)ElP28@iJ-6+n)0N~MuiCjja#<|;+p#4%^r z0*Ump9z#wS00?JL#ofLuM!KLjDZ-UL(6KVHF&h5>_vmdYfhSybDoePrY|}c&JyXC@ zeqo^A_Pab!z?2D>=kZ76Og-X$^1!t?+NiVUo1Lh(CBXxgYMu>LfhVg|bQ>sO)BgOR zz~|=AiZpy1m3S3^*w$(L7i9|9LF!Ww@3Sy7_puiT9|82pzXvg79$yPnc29Jtd4Fie ziODxbhdTj$V*$Q0dgeCUz80!}G}Rt=jzl_(Oj+dva21aix_-jp$rRxXfQS?KjPv}N zpccVep6F_l|2GcmG#@9XC_u$uT9F$QGC82n6Icb15v<)AUSHr9tUsmnbcD zvSb*lECtc0Je^}cg&o^Ry=NDij99irAA9Or%d;f(`}&|S#dZA|J0Z&e1dH0yL$&?O zSzdS3`94S?yh#b?-E0A8I*pk9NON{KI&5yr~gn#w?<4PsQ5|K2ku@SG1IZNf0%V9dFLAjaf? zG*5ua+(~!1Bt)5$rb0)z`jX;A8w=r<^us?Jp`&VK&cuo|1!7M#dHTAEn%Sz)n}N&= z6mm|fQLFL3N5JF^MBYtM!5y&H$-AAmg9M}FREm1i0$0KyLDbYi%eH=K)G zt=Q&a=~*6`S%!W>fxbHdzyf^vH~>|>9v7GH&pzNv0IHHoJOTt)GNHj#H8pqfBRfd4 zRPr|pzLCbip9d~Ti9eLW>rp`?8~Vp%p%-3A@Ug61_(TawyQ8NeY2&e>Egc zh9kh^3S^PvuO2_Cz^SOpff!Q@Ocza%1R(D?xg;5|L|+fu6Nks=g_wfAryt7s_N!4jL35&*Hv4pOcL&0|-kMZeNe zV#9a6$>j%o4XfEuX?8~J75GAg=nNI=KP7OJi*q^O5^@k!Fi$x9tGVWD%WMHyktP5* zDPB7$sh~xTPQbd%H%YTaJbel)fLa@_NZAdbX1VAN5re6Ob&tBEG=wa-uIUT1 znjM)*5vIi779u|(OMwY5 zTH`M*8S-S?dmB!xs{}o@iH#Sc|3I_&+yNjm*&jeI@)0gVKO4M(y%P=7qLSy%6XaLT zuWOE*hX8(Yi7+~V!h*^I>h|LKw?Qa(+6Y7ppTS1dQej^yqM&&ZiFPq_E?4Q-nK~_H zAAqE~QH<`%?!EG+dmQjk6eyk3EJznE;$mx!T5ipwpW98gYlHsKje033uJEQtoTrZDzKQdQYWWm=33boCm#L7I0>VncB$9TitXvY08V}DCkpw{Wo4c;g7-fvV1!sf1@%GT}uDEM$^%syz4H~wS&TY)em816BH$h-pd?` ziAHE~4#IBm#JGUGoc1k^q=J zO0CE)A$Cx{d!m~(28HA5)z^61cW=$ivR1ADhpgDOA0imX>K>vQ;PGx?14frov3NRBUp+}b^{}PoDAt# zS!HL1&BwpzQMxt8l{O*8nlV&rnz~n!nkev1s@53+LRFXtLIYk_JW(|^#ok~i}NPjyyA6}(9$`sd8nA`mNyKhy^p z5Z9oZcAx#)=9fasaRH!JH~aid(`>!;J#U`l4k1!x*lO2J3)g9h}I#WXl6HNGc} z$hjO(|akcP&Q^-m%5h|W^6%5mp}***srWEGR&-=lY}gt>ZZzH@8k7~7su!I zUv+a&`lx$bjc^1iFbe3F_xqKxRDwN>3GWH}^;sFIZf*&87s<3hp3iyWl&ylznP*X= z8B~iJu|*-!QOfUEXGQhBsxk~~JU;{BvZ|vTy&zzBH^fSo3lvlmz14J~&-IS2^$3$; zPK+KWaHAzIIa*bH+PG0tcl_)`H>R7YA_+>V#+zD@);W5!Rqf&+l94Q)?4_yR`@m~q z$uiVuM=_~bcJ;Y*zx?{Iwtm!G)px_FQ&F$$gtShBk+T0dj$Cb@lvh@2h$i|=`4Wa& z_@~O-IfgF$4uM5`Ln7bqfmja{ZINXKS=|x@O8XtNZ*^pwvI~a2iPqNMrxPO4B_cn> zUZy~X^Ip{`=k*YF9xF@9$)5g;(onIhe>dz9M@>Q1ty;Twx5WSD!fm&6X)w+Z<@Rxv zXGHb|v)LDW1mC$_Ca~`#-}#1=N5#au#)~xYdsHg;GLWle3DV5GoQmT`>%+=f;kXr8 zr^W}GMPE1bA2TH|kf}lD&;i?yy{T0{sVs%f{6p4R_|BNg; zy~h&IG?$e~Pb@Wr9!-g8xBZv}&g<&4TD>cwijZ}UT(^WgQjng$jyP_=$RUmFLR=Fe zPL#N^y^wadGzSeDz+>LpsED9UU!jMDe30CC{9F|UI5Ndoj>4CKGNIu%toU8GkAeIs zUyKx%U#wU09h7!{$`5+B&m8`Ag9$%vN`Jo#1DDsUF)u#{wNyh7x#=_GHG=Wo&bbLE z?@DX1u56oAyl!?UJUUJ|gSUi6t&iX0OeSg9EX3^?m?Gxd4ow%&ll%iMF0Jb4ORTUH z%=|>H#ay4tAo4@iZ@`iJ=2hdk1*NieH^qMq=|Vj|eBm69;&uZtvVlp?;7~=H_c(1j ziXf2(wY?_g^tAutx`-MaINv#+)SGSqdJzYHC=5ByHXS-{=)!gPePJVz5`GDh&V-wC z^7G0qEYSK^2vaKL_-KanLIar9M`GE9Q)N}op0hTTc9Y|zfYH)PlBh+UiiDb5gr8RE zB}aVKq4}zs*Hyx{tU|*_exm3;jzk+9@_7ySkgyN@dCng`-QJfQ8D9;PMv)!J!~;c& zvRc^sG%X4coHA>!=+3)rMrYqu2^>@Uc8r?1+KbsPhMO$Dy77i{2PDdYb6}j~WvJM; zu8j%A=_NBTUoSY)sRq5XsMOpbOEkHwY`1C#$*I3&;`hM3`pFHwJxIH+OzsoqU41~~ zm$)98;0lm{v17J7A=PBoS=q~*`vw}$xv9oBW$exC-e*_>yaHd)o$Hgu(^<$%AG^fl z>6AE2_bzjM^66zMA+t9YC$9~g5f1(FIjveCC@Z)Dhs=SvP|=-n`we!W zsF#K>O0RKvr>Du}`Aw#sn-)ph?R$+fLgjq(jiv*^ubzDs@7pE!un*|PUQ)(4ZKgY3 zGHCnJ3DirLiWyB-556m&N3B;19nBCYCnKZREp_EFI3i&07wmv?c{Zk)gHwHxL5+swAvVP6^Zj|U0 zApaUBMDBNuaaCXw+;cuFmyoKM_rzJWJzr1;n~lT)xe0G%a-(J+LrK*R!~%el(J@HP zQ}BC8IsH->1UzOi&?(7xCt>jJYOu8PJLpKThPd)e~UhF;A90H%P6mf9<2u7?*)9!$)=qj zmF>Ftg_3WrnmCI4b|YB!&_*qzV*kO%lo}{lO&B-J^{q}e|JUd%Du=M-NWMdjXVVqV& zOQ9n3R$q{TQmgQ!f15_GYSl9|oS^2;Q9m&MFT+P$Khsv%5ij9Cf%}> zN=@H}Nw`5YC&k|q0I#KelcK<5_2+?{^Zo1L;sCxN4QP*sQ-Ot0N|fcJmPAJd+z%#h z3vglVQi_I)SyUHrgn^gPIApj%xfOwV;Y~)*6DFNtBj%5;K?4gzpE0oznamQWA%sRw{g3r=`^HUJ~qZYorI8zs+NgDEEJwPfK zqQQb%*DI;jhu!O9UJ8Vfgxulm@b6UlGzKCEVJP||ywVXCL4^g;VLj~2Sp}Gfiji+M zGgz@`TMne+cw7=EqZNRtbBC}R)I{)B*QXqxRcD&^Wj@=@WU4P1sjw&DWex@{I1$EN1+(;fPH+{D)R zvQtgP3pIdaePL?sE3fpkL)Wj^&NGPt7EtPLY`-^ zlJv>>5NRyF{s1 zeOztLHL>G)dJ=5q*j}hweNpg9?sZ5WzygV zPC2VF{0vcAYpv|YIbSL1l2|yHouWVxXpqPy8m*4oGr*~< z$M}3Mg`voIw-!kb0Ai4$#L;6RBLId^KgFAZ7@;aL`k>z)?RhU1ly~~VM0w2Pug*u$ zz@5&4Dk;!AGQfRh-e#^$=D1IT5a6{Vg6W8u$76Xs82@MnKL-)P&f({XpBp$Yxs2Oe zhZW%s_3DAdYgNTn596O`To|~{=aHVITt|`-m01@HVG>O>y>B{s&F1b8)w`|v6#a>T zoOz}7kf~dILsQGoPKpxnensM_Mh#l)Q0^w`;5k7A)75MLe8DVydZAc<6DGu-#JGQ8 z9rWbMebJPVep4LD-NkZ=4m%*z~jn*#p|#cB+QYhA-s z(qYaVz%Z<3X(ssdIe{+;Rci@}=cTS<4ePv&_QX0O>g2in%g+xqh0%YqK&H~2+tNThlH!y8c9gZ!pG3F61%q8($;T7ncZ z8*R?P@&_A58-W-A>Sh7*EOTG;iZBD93zH8HDktAUAok6D8Xo^0-Ph$Ju~wpy?X5uP zQ4dj#Dkp`6J3`S;lbM>2eKdXjI{I2p*|c}et1N_LUI4^T(-iAHNCUH3Ruue=h-wSx zfVdyF*OXhU=={Q5ZGw+2cEOFpgU`z%;6O_&?lY?ty8!b5il#VUSDT0tF!v}$Nt2K( z`uO+L&QSoLk`V+0(9a(|My7z_m_2COY(!Bm?tl=0nX4v}i(yiMtCj`U^ofel= zDDB>zD`M-mdQoD3!1fc1&y?#W#I+eu_T85I5Lly_Rg~-6gttS5#OH&j)RJ{S9cx4| z?*E4@&b!|TJPUTxkWced7uA3`0`y@R6xzpJFIQCIksK$d- z-tC|nTq&;;bB-z}wy%TfQp&O{Vjfh(RBNi%Y5!4rsR^oLNQ`i``&A^R>cd>9&vKOU zmn*bi_y`7mi1Uq>oY&kV7V_ZY+E_m}R`&J1O$!Tii1^WYkTSk^z|Y=F&Fhp@&ANl@QpdkHuGTdIV6ugpHEF--ME#3vw)K@Wbd$^KiFZQ{wQhC&BbokiM=c z!HvW`9Cq~?*9BRn@%;47M!ouL0*L5Gy10*btXc(Zh#E~dzZ@e|QD$`gZFbX_L~tdQ zn}v@P%i7z&9?vP+%DLk75#VkYQ>`d_U?h`^H?BF1LH)yBIr(K%oRq z1{v3|`H~gfp6BV=Ot-2r!}Ont34~LWO|U)z5r4FaL|?%url(63>Rqy=F~ik6 z#7E_`-k4Oj_~ly`@!pJLCX0=`C$}y5)>TdXCdVrXCst000T>eVB#&(pWy5Wf5F5bn zuya}x!Ba8_$A?z9$j9L_kcDf_je7z{97Hb#o2&I7N~0+U&~Xlb$XRvXRmGTa~_ zlODuX>ABtu^_hDA!)@@x)zDR-tCuU%CWR5g;Fo*=I$@#sDHcECh>Qj82@YhcJbkTb zpskX-0B;pJ`ro}$gKs@*o7|b8aS3de!kK==O8Pzw!_0u16Du4!E zmeM(IE~u~k!Ss84@e>uaY2STwSt6?=0(Igpv&7UbX1(xto400-@gEtxfHSe+aLD;d zm*YcT22CcnOtZw!*~&{#^9pQhtsZ&PDFb+^<#0^Yx?Z4+T?s13sO$?>jpuvnq{Ahj zl72sQh9$TjN!M~(UqGxh0;ltrMI43Nr{6wqf7%_n6bnScUguQ_Nnm`FbFcHH4oWi0DQxsmxv@D2y+r? zK#TYQE;{DIhtXoX{tH>w{5)8A#3V1koUzd!3U;*SJw3_ldY5@ADp(B$EeGr?*?|Ha zP=_N>O9R59p;65X#U+o~9DrLrQuicKL*uC^CAgrSpEtJr-`AgW5}PGwg&K8iXtzfX zKE@oWvGCM5#acRbLO(nDjYSET@@%nQs!1vJ(&3UjXNgioUxuq!`$xgo>&@*2aDs)& zMdPqEvHF}dT|*@5JSi^5Hu|MQEKbxZ0M{yzLVm>FaRf?K;Py4@ApGSRhXqCu#d7yFq`H7x#F69`$8JFU<{z(i#c%JA zC$mKxu43^#)g-ZT(1X6O?a zChixLOz{R01&DNK8#7x#10}WC@aX5LY^p2-Bos2_=0r;&RvZZFWCXrSQj;rlwoH??pq-97KdP3UrBj~hI`xeEzMaqMtD14KXBjsMwfr_ypYGe+ zefjvQ7o}dmW4=xcdEdm79@@%T<*cp>Z!ah8UDv)hWDs#WDPK^E+FnCCZtJG`+rU=; z&ZVttc3rALR|x=Uxa#hhitt!xKRBlteNQxwtLhgmT)0y+0k=Jcn4VLOX zN3`P?Z}pwZT3ER}WnU*C#DXtwRA za)lDx47<|zDLcA@rAKWFO-Jgrme#|KTfG# z#NErIs)k+}lMJ70VrN-3rVkx~BXopW+4Kusbek9C&DfEg?NLlyhOO$= zqWkV|#$c7B6I;Ib22sJjU==!t->n{G1+XGI=b8#8e*#OM_C0vE8t`~Qw=OB=mBE&g zj7S9qr`br%c@L?I#db?r+wo|JeJnH-@mVJSAWqbIt51ES4X-LLVFY@XSzX=9P$nB5 z&Ey%0?$Gv(bl80Aie>U98fn*_K?`ETrNljsUlw}8fy(yz=!Pn2U7x&RhrW>GE3lw3y)5O?4YJs*aU3)OH}N)M~~U zw(yFfH*rtZ(AHB-p$o~e5Xf>|)-mkM_`Yq9uBCJve}lYaP?eFM#mQonZAoi?3l%9I z0Prck)F7RUm1#SHcq6UscoyMS2mp#7(Eu4D?4TM^EG@k=ruI4AcPSwlqO*t7fT?_i z%!Q9I$AlgMV>ACu(t8ldpToO+MzPm6tgV9!2>#lJ{j7&?tYs(Wr1M1uW z)&*@tG?B3G$b{}l)RJU*%BfVS62X}3%M`0wLd92-6FpS(I zoz@^~HRmfbS&pKJ>O)N-8`eN-S)y27J2>Q+!-yIBfV#iY%x2<{Pi-mhr_V-zC7aq?bhj$y#NvI zTP5vhOs>Tb$HJnlHs_Y5wyuwQ{)=P_cr}~-{yCKWJmQX!$=UyCPX^N-HD8sp`(%ML ze699;yDGc=tUY|@^&R=myT`m%oLW6b?!RlQ@p<6q^z_MaRcZ7kvs*zTlQVC8p6k|W zss{NqO-*(_jHu7FoA)~KyXVD`NBM?l z>;1U;V(oK8)$fL{7k8eVd>a~9wL9_sO-s9t-M36*&ij8mFTn1qjB9w$zLnDTPGBel zr*d;1Q`OR8F#L@v30vUn+^v4#<&z%pr%U2+W1HN&SyF6bFW{P1mvC?dDcSRb%(uO$ zezkXD1*Ewpoz}I;bmP%)UBYmpB>)or{3%MUh8*j_2farnZZ*Vb$&*lGfICAJt&QS^84mTuLB9Q zRhVt;hg)m^)jfI3_h-H7i^=;ic+}kEuhE>lZ#S^siSJslF&&Xp-=f0)jG=9JA3MBT zOYdx25Dwd}i!J3`J8bkZKyItAVX|GUxKUa0O0t1*5n^ zDO_>^SGb%j(##d@;fjrO#TU5}+gwRV7lpq|O14W{r%T4XOV*`J?sS)YRF^_ZmtsMe sQhAqhbC*g_m+E+z+G3abcGm$&w+4T=rfj#CPPevsw~p*hCIDdcKlljqyZ`_I literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/008.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/008.gif new file mode 100644 index 0000000000000000000000000000000000000000..936f83b92b0956282657dce9943c38b8c1466905 GIT binary patch literal 1532 zcmdUs{Xf$Q0LQ{XhntErTppH(X&z_MZAenP>;8-T{P2Fge|*1QAD1)ECr$==0SUky0B|^@dCaZ8 z$+^Ml`StbX=Wl1nW*0ti>mTENf5TrCEiNvm$MwVqd?07!_hP2*r?$VD$>~lkVZZ86 zi6He7l9|!-*@<%xbNiX8)V86fo{{17*bj_?mq}M+sMi>Sq?Hzil$Iy^v*k`*goIom zZz6F7A}lvHo)+;`$e_L^iU}!_+6v~I%5hxscvj+Sf19+4+A>-#r57$2r%)O7bA!#3 zou$nq)V0aM)zMxFjksKxC>!j~%ZmX3KrHT2C=~z7|8z#5ApezHeB-xI0GI-8he=Jt zre|bk;j(kE_IY?henDXo@j>y!JWL6xyn>uxW{<3*RoBpwl)Ab{wXE9u=5l7^<0|&k z;+7|kTwY;Yds7F$)Gn|4Sr5Ofw>tmy5b^XYV!wccAI_U7n0hc>KPDuI3l|o-vx51> zzw9T5rdB5<74Lfo|CWt^UE8{&qfR+vCKF12vF129yuF$ENY^=#$v98)EsT4Lwu5S{` zOzD6^=l9z5O$?ujqxR*@`5=Co>^g| z>}?fzPt~C*@Ti8T43VtuY&Csu=RWzAv%X)v$ZpS#8iKiI;R4{VFA*c*W=`l}tT_#l zn%#bksuue$OV1r*B|?GynXfS7yY>q@AWh5jz*WV4iaMv*?f@G{U_1SBowTy_nseZT zb(_Iy&@ewD!*K78U;@XDy@X|K2^k)pk)fWA#(W5`sqgrbv{~T%eLb6Ihh;RXTrRah z3pdk(a9xu^BNkVNv&@`Gxa&o~MfhA^Fo!ib(AxcC>3UIU6Why;R36*VP|5jN8WFPH zjl{*(JLQtrbNE_ZxNu2WF{p2GT~YEivUi$G(S%PtbaLKeGF3l@`|@^$(^WggZsRw4 zjde;J{x}kzDD87MTDr+P5pzlYdI)N{Dj4uCjp;Wqz9;XONXFTNRi{K4wZnbFz?0ip zK&qx~CaV+L-=R091e-xPsG9Bux|9Q%*Tqh*wvKU{rhQsq*zPpZ8YD79`eWPIo9-A* z)0qk0w1xl$Olc8YHBYShxvYbXECN5x9_>Tf!*Xq?QFm48WrZ{QPyzr{Q@t0h`~%99 zGQX!ny0Gw~9mSibGhSOOkun~!P`@Wh!o1zuSW2){5b~A`ghzo^n4jDA_|Y=pRm60LOouU0uh+NabNJM@3E4kyFmxHmM{hC#O!LRt!0wIwav4He;wUW4Y|Y zXmefcafvh&Z8$ZYxnz+gghZV>`E{PBbNLs}_r>Sk=hf#+I!g3B6a|HB0~P_GK=OEW z_6-PrR88vG_lI9Bt}d*ur%SJQjcA)RHKoeTM1Hhnj91w;{^8^M8g*IQlz44pL#-Yr zv(DX+TxIp<6!%g^BL0A`D_KIRQx;`+rbr|raIjK3FimSsYHpUWhv}k6li*}$g6LAK zMj)N31_#POSw`*eT$!w;B>ys4^%GBBDA82js_5bMGeLDz#W0;I&j3eis3~Vus>k4i zoTVjQ$MZ(Ms!+g92CFa3&Q5pC)ep?I^M{$D?x)>T4V*#h18vL1#HeO@SgCu+8)1X; zqHA%%ppvh6)ebf#^lGJGPhN{+eB`xac3lIGx89ZKfKTf`)lpcCi(pq4H6=XeB5AXS zwcbXTRMXbi-+bt1*4NPZWl3^*H!ba~R8lyWkAfBA0{0Qr>~mz7PU=P+{fnE3^Tx9_luirFQc(lYMd@`}nT9$z4=t`XJN-4jdd z8yXwQkyn~p+p>4J%Q~y9@%YnSOeFGA{%+3*+kToc0`eOKVcd2;>I~D`ml#SUd0|!V z?%TH`Ei4RFi~-Ms%4O4M2snIG53x+MCPkm}_C8MB<-H@+FZZQ95MfGBVFA9zD6|>g z6CWig&qteh4WT6ArsN&ISjFeun%Wzim|RSzEdc`iM8x`&L&t7g9KcZIA%i5erPFc2 zyi>@cpgfM{6l#rwn4&O_-YEoOwXh(N6I%kSX3$s{Q-9{}a*mr0HeP{8QsigIs>DVA;2+9@K! z^;mI7duH~yvA;(maeA$`;*il>vJOYT-HRnV2&_Ohmt(*~q2n2Hs?SyEr&<7m&@BnR(k(-m?Hw@tpG2~Q z>jLd^PTGvkqwF2}0#fp6KVD{sm*&~wJ|4i>LxwT`oCanNP>aK^+(cVAa@AReSStw? z>KH@FDmE(ZS}4h*VHCEnoEbD4z3Avf4jXq?X|%H-1a9<$HgbSi6g0FTE;S3~Bjb7{ zu^7lgZlqX5gf7@&Bc=BYiN->?39>hKxn&PeqCP#(s?qw>TEn^Y`!?75(e~;@g_)Z` zo{js)CaA7`oBlB+peF;J3hRxj0917)X2}t|OwCNtHx#a#U=6)yQ_nE(@_I{M{b8mi z0UlxSX949A%!z;w7hE`D&sC%*V*6t1;N=p+ z+sHKVMG1Wn2j>nCAzphdhWE)l+y>12EYpWLcN|`rQEdFv(HaI>NW&J8utFY7%mHYnh`zX2A+g?<14 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/010.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/010.gif new file mode 100644 index 0000000000000000000000000000000000000000..13f9f0487346b78fd0f97bee47de42799fafe365 GIT binary patch literal 1561 zcmb7>>pznV0D#|Jnpw6`IS{)=w%B^BqwVw*5^p4GCn7IqF%~s~t z(iAJ&#{6D~YR4_)Cv;mX(JAH4InL?)2j}_le0x4UZXT}Nwud4SmcSbT2uoLL2PR?o ztMbX~{+H9t!nVpUSi8Y?>^ zXi0uQ{aqp{kC8F7<4sA8aW|ptoEA_flfc@-+)ggsUaC;suB(%A>Mz328qZ3?>-&WA z=VDlqz^U#lP&||N7Qwn&&)B-MR$gBENm*YhPnA&8$t}}m!Z(hR z7gcZHj(2pl!OCPX?r?cWrm!fcPv5D1aWB6eR1V*U#+%E!a?3k;{r!JD7^vn*p*;Ch zxTjw8@?O_#&2?2W{G=*6>Ojk|99Ct+57S_%9Iib(GTAqIm&>^lSUprWbCUr#C4zAQ zGBIcRp&&BMt-SE!M? z0G~dM{OkV8o!Lx};9By(-Y8o#+Ba@#c$j-@4VH6Y=T`w*vy-}1W z6p1S&(wjmCv#PqLw(hq4P8H);!@c{BO;TBXbIT)zQq$U|z4h=>$M4nZj1yrI?cF^> zVt;Qk)cL&mvD9kay8Q#$1_rNkh}%O*`lO+10tWE~fguccjPQbjLwQ#GxysMs?pgRr zf*Q;wwIXm!%%iyzy5}o4_mZ&2h7SlnA1%kSNq1v#qIU-fVw4IPlnU)DJl8KT7t=FmXn^?%R6o z;+)535yy0Qfbg1`sW_8?b=0XMQE~n>99rmIwmPCgWXosj8*MjLC{%6C1~YpQ=|B_N z%%5Adg(1%M${#2p5lE}DeJKa*Utcp1grsEOE4n>Px9C;u1(D|5p5py~ZzbiOse*7w zbYlPwf%5Z4AY)Cv!GPU=7lmhWK5t96{jjVXiJ7)MQi9w|X$n5a^c;NS$Mp1-CX$Zx z?4?IeP1un``Bdj6{-Ay-8xhTTSADRh6_<%0J_0%|000^S4Y0yRZ2pRxOEg|L-Ebvj z+=|IsEu~Q^Z_andmJ(ief!smZK+GhX|QQSr`#u?By_fGOa(xV{)FfW0y+jg2iqA z*w*WBw1&L%0u_m0w(pL{a5E)G2ATiL*yy{4pu1gnd15Dk#Lflw3z17bsrJ@iK=xG} zdW>pp?f$@m`Ji0UC7`CB=<+>}3 zG~`De0h(53bLy~004<;mGg2W;nvaXLT^}?}CzIC(I-BgxQz?2fPq^WX)F!7a7P#!U zgA7;23TF&Ag}k(ILIB1pz+KO415k1*;DNg9%d#V_FSHgR)zscKu)}d z1B0{7e|*n9=z`zmSpLX$=4JcG&u%K@8zhJbY6tL;3d2LP4SQ2itK8Mc=z^GqHA2kR xO7d@UQ%OVx+P0UbF)g0rQ1*#%haru*a*9jM5E(_dw^|KNC2w;IB?7?Ce*n{G%y<9* literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/011.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/011.gif new file mode 100644 index 0000000000000000000000000000000000000000..ac17873e07790dec2b66e88ad5ef971ef2af698f GIT binary patch literal 1563 zcmb7?{Xf$Q0LQ=InN5sF$wJ+iR+&;$DqX3OhdI%3E6QckgWZ+uRP3s&*^`(UnP;|X z9!6sp%2PKRZXPO?hm;ob)B}wkuD*GltNRb`{lojW_fMaXkFU4u_6P*H9GC!rWLfJ2 z-Afq$&@nK2t-9;k#OtxwGya)g_1!~hok^M6`0p>dcJDk{;Y#meZFl`^=VO1^1Lo?p(d%Y=V}K3Sh##YTo8I8uSwRIKRG$dWE|+| zXub8k9B$yj-Pgt0u{zzL=wX(q<0@PfE^KE?d-M9Hy88PcXh)kxT}jf$du`9_E;gTO zd|VOpO8~4D!SZO`Ods5oSfzdhKT@h+)ZH0U;)qVB<#qKlmzhwP4f7=8=FEFE7Yz~)~a3wK`&!VTK3ewWAWe78c$vL@s z`2~d{v7{)0ezK&rOjcfTLta@yzplJlQ(Jc{xwxvasky59c8glms%f~R?PyfB-Mv@1 zKQ!Y0&A&Pa9+!0Up=Z6%hk4dcPC+Bw{u^lY;I!;%BIFWfJDFpK0$~tk_K_WaFC$P2 z`eN6(^WLlU8w&_H;)XC+$X$(y!;P#+_tAJaUrvPdn<-+T14NNFJtQ8*2yM2Bk=p}D zd#pXSor>)obPy(>7uoBt2q1U1f#v?%(1u>BP53@4-37mo>}DQfA|Gr>EM1?5H|H3| zLnIJMs2%kjv&=}b+OmM9E1(Hp(sDdGDljB?T3mNI&O$k12MUZlukKYB=V@t7QQRD^GQSoxo9398N`3g&JM*wXrzmXL!v9A7F$%t>&7T{Ndh} zBJZfEUA4!CoUNd>#JAtTA4*9+3HN&Ba33q&K!q^wbItO_Az4J)5U% zw>$xMCNFV|jigDKt;wb{+&UoxG3PQIjy8+IU`%msLj+6LlBJFUXUoB0|LTYlZtpS1 za{FLL3ux$ZcHmjuFuhG^6IQFW=cCr#wzsdeQvn7QrZj7C)l#en(=cT#bWv18@``R; zO<*n{Hh6;K(;K}%kNTs^sl}|)z3+#-nu+5PTbhDR5})Ij2*!X7>5(5gl@A% zKkCD$(dh|-yw>mVi?E_dJ^5c2~a9q|m$k6NY(IlSlVGqDr^$c}C(a|$XW zu}s#}NHTGCV=SEbrPI# z?`hy=<9TegIgYa95Q|vppv&JB)Lgx9F#xtwyqwm=bH?{GUNwXl<;`pjshN*KZ+c{_ zOQya!|C>B?9Rj>yF#n3PL}gC|06N{~MZv*e=MYxD_#lMT5$nz|ruY>sx}NWfG>ExE zSOW&(j@`VA-cSnsjdspw*FzwHRRLbWA>{o{7^w4=B!i;HkReG6DlCxUjtQ<@j-#m-j_|AQiv!rr7_mNW){R$5Z1EjE6JLNi!PcK6?jWffJ3 zQQM+g{1|#RG!LPDrchh5^&E%265|6}^|A&%mzXTUoFHqgpXhn6-4e54oDs0&U&m0< AG5`Po literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/012.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/012.gif new file mode 100644 index 0000000000000000000000000000000000000000..20951db8e7ee8481c9c82e8b9c62ed497b695b94 GIT binary patch literal 3669 zcmV-b4yy4-Nk%w1VUz)x0OkMy-|_#{(8zOhR{#J2J3AlM)t!Wddq+n?KtMo%fPgV- z#f+)M(cbCF*W#10%iZSdKzuyeW0+^yB4aJX4;pJ$x8)ARN6snVXK(3kA+@MMr% zv)HJ2scq2E%aFc?LW?+uxN&Q$Sfr$%wB4$MxOlX*udc4Clgov$#o79_em8_KmeYy) z#+-)9da0?Tq`%jg%ZB>Jm-^SZR+vb9!)yA`t$eX(l#6A1o4j|tV2Z$g`kh&f%YpjL zqx!mrpxKq@=i-2PSD=`7-rm`_+N^!KYstyP`l4T?yUw)PrKZo8eY|F#%#+sE(aYw; zZ?#ys-LJabudm;xa%)cd$e;SHZmQIsufo&%z>)gSs@Lw)b*y3fyotWzw))eu?z4sQ zypXD+guuYN;PTvrd|LLVX`YsIpOGQjau&IrZhhnLsgxvAij?#l@Vn={@ zSjWeY@9*CK|NrCT$MNyw000000000000000000000000000000A^8LV00000EC2ui z0F(il000O7fOLX`bP9%th>41ejE#;cCDtqeZ771<(;ih6x;saF{RwLxc^J4rtYC>A)thpZ+-!_@Zp2tzT=kd?^72 z3<(VX9!Q{hmJnD;cW>%dHUx(diK;@7cmpIx4;C!oU?j?FDFDYumEwzpVuBP7Q>$jk z&;cu6yOi=`620jJ5f5d@5E%hl5NX%2ZC#kj;4K6Q4Jilk|tXL*`kkh z&M9Py{ZZ0I3o?X3#1SuyAZS){zIW%3ciNdJArd@rqyr8#pn(PwK>C0KXT^Ewk92lg z<)@wq2p9l2kboeU%u&Dum=daa=3}su$ziOtc2r55BI+2Mrggd&XMA&7vgZslWC2Ew zmk9amp(+}xBaC!3X#u1T5ahrD3pnt=0#N#jRW4`2LX2Ap{^+bOscThe6z3e;k& zaS{w*N?xy^1v~D@mxxN>Dk6}Ot`4a}L4gusiW%#x^}HW)gA7&JpaK$IJ?m_*iV_{JAPqFoF}9Ox+<*iU1g)sZB$s_jP9hjVLW2}Q z;j$7U#M{cO8&)W*hL72uH{P~7C504HQMK6zB?|nTloQKoFePauy>tssL!Io9C{kVV zlz3L6fqo5KivSwpdDtK zeQ?z_Dkv=j}dQP#^(8Cf-gaAVS?z(R@*(4>9 zc-F^{XyzXFLP? zRIY-wpEqSFSl4P)iL&*raQ)^+<4V`M?$NDw&8uFEy4Sw?RhM)9t6&F9*uon2u!v2p zVi#-5J2>{Skd3TlCrjDNTK2M-&8%iO%h}F)_OqZ3t!PI}+R~c#w5Uz3YFEqJ*1Gn! zu#K&3XG`1K+V-}%&8=>C%iG@i_P4+du5gD-+~OMdxX4Yea+k~8<~sMe(2cHir%T=H zTKBrx&8~L0%iZpJ_q*T?uXx8x-twCFyy#7@de_U|_PY1I@Qts0=S$!E+V{Tr&98p< z%isR`_rCxR@M3*yI?*u;^|aDq7;;sbZ~#3PQeY&A^aJ7kzbCdRRiABTr;RWo_d zrOtJJVXW(33z*lw4)$piK5+StxEwh?QyK;10LA$4%~XoBQ18PPe+(&2DxFfH?t(x4h>~?|R$&-uTYwa6?01vpp z2Tt&U1N_}}(6_=D&hUlvyWiFQx4|b)@rqkq+X!#C#y8&ZheLe262G{}M^5s9XPo0G zPdU9k{_*IByyP&CdC5}bzB(Z!zkzIR;bZf`E!TC!6EKJ_(+eBX7Sc&e+t z^{wBx=w(lN+S~s41kb$HmoIP06JNNMN51q?rF`Zu-}%o6ZuF%#pVG*Z=I{i(k0hk3YcMP5=7a|NZ#Szy9~n|Ni^`{{R?(0yuyKSbzq2fC!j? z3b=p_*nkfBfDjmg5;%brSb-LJff$&98n}Vaf+(1RD!76y z*n%$jf-o3^GB|@YSc5irgEq+jSUR|aJlKOi_=7+gghDukL|BAIc!Wrpgi5%C1Z7oD z_=Hdxg;F?$R9J;p2!()kg<80UOlVPa@P%L)hGIB|WLSn~c!p@0hHAKmY}kfoC{+UB zhH^NEV<=T!7*lkZhkCe&eAtI)2#0GZkfVhZ(NQi|nNQS~VigH+s$QXvlxQEZUi@aD&!03$CNQcQ- zjLO)C&p3?UxQ%VdjNfSgjfohI(};)QsEwd_i(g2Juy~5>*p8~0jiDHi?ii1;c#G`# zj`FyU<4BJ8sEU86OV>Dz_Lz^(XpaZ^hUa)klh};kD3Gz(jufem011!vNRP5ukrio* z{y32qDUSyEjvEP*965*tnU3VxktOMoCJB<}*pPMfkiQs_7x|I_DUdE%h7!4xCE1ZR z>60sYk|DX1WhjnAIg&aVl0*5EC@GVYSdcJzlS0XqFA0&axRm)wl0li3CrOV*>6Hu_ zPg41n9O;z(xQ_z~mAxdDPT7(-36$D6mvU*7H5r#p`Hw}(hDb@56j_y1sh32FiEP=H z*LaV6X_Y@Ikwp2jmUS7Je`%H`$(UCumqz)N$Fz!gxtL}Nn3!3ZJ(Y(1IFSpvl^&^& z{aBe|nU-@on*1n>_=uWGS(l^vnd>B)v5A`Q2#-Bknzjj=Y($f6*o~T4oR-*^#+ioF z2%5sVhQyhi(20o18J$N7oV_@Q&q`t{M?>B-mP-RA3)vCHJ^?tQRxxy;|D<7ncvqm9cAv|NmBxU`;=Q}rtJUbs z#oxBN+^?j&&dkirp3IZJ+_3+VKf>d-|EFbgYfk^jpv>jM|G<>5!qfk(aNh3KnZSns zxP|qlXQ`ru?wVhOd|Kr3-0tq~tJ41ejE#BCTnRv+pb!WpK!70gfrN%QbA~$6#LSi< zL#{kgLF14CLPw2uN{R>uh6){wbf{24!vqjU4QOSm)Dc%gC1LHG;%|moSa#ALvxCkh zOqmq_Qly~Z00M=Zg}8nlv{$F!UrK%?L3DxyogplCxNw06W6``w5%pCxxekm9Q94Ym ziUGq1tcLVThBP_sD-=RFn3W@B#4EO~V8?X2nP%j0s?5~F}2l(7h(vahev@Zh-qGkfdU6py!T#w^2w4GZEUF(Bmio~_M?%n2m~De z1siP8+XJ{oumS`rSg0b5Ey`Hnmb&z?1#`}Y*?NAw&=}j9{pbMH1O#eTo)2WNeB?+EO7DK+t3a5j+q=2ozun zK?HeasG)#&=E>!$o*Z~c4Y1mD9IE(9oF%@AYp!XETC1*o#`0$k zHF!Y=kG24LB%_Zu+M}ec2sGsem_|TQ1Pm|`0R#-tnkBHrqH1m_V6fl<4?dIts|6OY za6${>>RRf(w>AO;41;_$A{BGiisx6O_BE=h`5+-f4O|?d1rlx;!|1g2$ri2u#Yq-2 z#-CLfQsh8kd=Gx$%?3YNC_mc>jSJzSOCSDBOlDBy>1HJRA(K5G@@1Y=4>;` zCXa)J4K*BLLl`%_KtwGVOZsTVi&ibEk`IL3?WP_-Kmi3olbSEeWPefu5F|us0TVGp zQ3Ac8t@vTVFUnn~B2GmSg;Z2^<^hTVUs-U6R}Kr7D{mmJvbOXtkzic1bK;J^b?bSuRJ59IKGD7dGt{UJ2au!9p$oM3|g?YH|PLP*|y z2Y58DSfNE2#UGEn#7Ew8Nb_{zw}SPfWWPPCY{)_z7-53(kuMzKS%);NfP@=x!FcnF z;G_;A0SYi62N+zz=>EsS4*q2vL?8kVft7$h>1N&$!Gu z7PFYijHWcFxkhN3(VA|2<}Ino&2Aso9WGVx|5OO4CguT zkWOBjbDry*XFcD^&wd&bpZN?ZJ=JMWfj0A?1s$j^{mIaV?lPX%OsGWFxz36*lc3;q zs75!c%zNq+qYF)_MI%blcyjclD21a(#W~TCQdFT9jcGm?n$ntX6q_PNCrC&7(wt^A zqc#nyJK2fQlI|3yNF}LDLAq3#3iYW&-RDK|Sx$Q%HKz6dT&hW-%GGYBQ>X0YsV;rm z)345yrd>^|S_28xwYv4Kd~7RR=So+3P8F?n&8uGTy4AhC%iG@i_P4+du5gD-+~OMdxX4Yea+k~8<~sMe(2cHir%T=H zTKBrx&8~L0%iZpJ_q*T?uXx8x-twCFyy#7@de_U|_PY1I@Qts0=S$!E+V{Tr&98p< z%isR`_rCxRuy5@USppMyx|M_Mfi1gW-u`H_4Hj_!ej^;==q|Xz3?A@fF|1$-1Ng$% zZ7_!?JL1}wxWFF%FNpDQ;0LqVu`Pb_a77Gb7`NEPH;(a(Pi$HY|J$s3k&lyxjy7fU(GF-{AVYiwlqCRxZtelnAB>trf}ILBDNt(j$< zWzXhVy!9jN~^Lcg22|v!B^K=F%2=%WdAW zlm)HcGHbcdR1R)}@r-6JZyM3BwK9t@oo6J6nbN2}E|VKgTvn(0)h5R5rJuWLSljy6 zxX!h%cg^cw`+B_y2sQ$wE9_z$djQQX_OI>#8*BwQTLHm_E&`rS?Pn(d*~)G9v!lK2 z_)c2^0|@s3oQ>^dgInC_9>BG;O>S|MyW8-ccDmJFZsy8+-gcljyXU=bc(?c714xUw z`)y+!f0osCt}MXCEpUPx7vKU9x5JBExgeL=$^QQBy(=g2dI#FolZLQn<(=Q~S5kRv_o$pRhbQ>S^;jegpw54_%==6Q#6jAApBTFbK*_0!9K zZglVbwb0=Lt4QGSG1c$uJ=WQeD0P- zKmx8k@VieM(3MxTso}oo%-3D&9fv%rEx-1^rlhoX)lWbIM8o=iFny zw6x!RxG9Tq(R*6Yptm^L0nhk!E8Wc%XStkDt#!FmHu#*EtnFD2ed4Fw>Px2l?@^2H z3>zBDuQ&eQ{VsmT%6{|kkN@CX&*341|M(y;KhqiQ`0lHH)c2=*e>Z-yReUxUdRb?6 z35b4{HE#~ceRM{3--mqow|t;gYZcaaYzKi`mwtsufD)#GA1HwZ=YfjnT9*fcDrj9@ zw}LMCf-o3^GB|@YSc91-Y;&joY&O_k+U9KB=3K@Wgb3hq5BF_8IBYwZUEhXo?*@d` zR&Aa)TubO~;Fg5gwQ#BDgbtX6$c2SdXNAPpe2r&xDd<{WIEKe{hGCakz6XZ6rH0Qp zb2ul4X!vk+xQ0tNfO_bLss)GhXMRw3hhb-ZyXA)vD2EnUhJ3hLhDe472!MgOg?QM0 zl-OF0Sc1n#f+vW0i?~`|SbK)Ia8T;h=kaO!q<7K*oqvud+4`|uNYd`H+=o4fTu`WxA=#Y_j;9hTE|F)tEhI>Sd6Qs zf7%y{(HL9J7>t;RX3MDmS=!itH)f9KS9;xujj0uV=eUQm^?vauf8cnHzlDL?CwFOg zg6tSyl30$2R*mDxS_9dSA*hcA$B%YakOtY14*8G}8Ick>kpZTI6nT-bXoS#)gcu2H zLU?TK#&}KGk*TJUPZ)*5m5LqKcaES@1j?cK1#3+>8MU?xue@MxE{Pv5Fr+N}7lTfK$Qn`&e`C75) zi|CkXwCHJV*p*Q!h%h;f$*5#MR)*6EmX!yVYo?atMU;`JXIjZ~TuF}N7L@$QeR;>1 zc*%ooiIWzWmg*?~j-hsxBo=p0*@B1ZmGgL+in(Zrc$Z{WnfCRMf$4~nr;MLhi>pPM zo*7^wsE{KFWSp3quo;`OIh(Xuo3?qIxS5-}xtqM%o4)y*z!{vvIh@2ac@EM=-IiK`dpZ0m5_?e&jxu5*mpZ@uu?UYplI-mqvpa6QHcq9M;u%Haupbq+= z5E`Kp8liZFpceW@3Ob=0x}hBUpcQ(dAc{^MI-(>>p&@#rY?PrTx}qfdp(q-nDk`B1 zFry2=pf$?nq8#d?FM6Rd3ZXZ;pf~!XI69#^x}yl%qYf&hKpFr_I;0RZT6bsE%5n zkjkWfN~xX7sdM_NPnxL~x~WdeqL@mm@@cB4TB50{s_@CGtvaHw3ajoZtFxM;w)&q1 i+N-{5pt~BZ!aA(PTCB!;tjLI&0J8u9NOhPfOlWD7w2-#drpe?~gsYIQus>;weWu7~i=a1L zc36IxdY!Q*J4Mse)BpefA^8LV00000EC2ui0B`_s000F4(8)=wy*TU5yT?x`j$~<` zXsWJkOG<7m&vgAdcCPO=%>Tfk$R{isXT+m&c}g;$Oeb_&lv1xeD|Xw%albh&c&rkW z&m}W@{ZO;d?)Nw@|I+JQX8=$TAO;8m3IPEMhK2wD2M2rwiH!w)2m}NJlz@N?0tE|- zkDs3flLUbR3iLTn)4ArQs;;E{xu%@)Ov#Gh-MUhvQ6)JuolA!>9VPPWm6t_|stjcEdA4y{ zweaL61)zYD$UoQUvbsxCFSb4jJkCP=va44B8Y|m0+>=;PYvdZEeXMJ+QP*zFa-~5A9i`^2m%e@2m_t^2^&a^ zfJ)!_HOFEIXysPAtj7 zbI2lne90Xnei)-b0|1QD>8{aYn=L$twi!x6tf*4gWAR#I&mwA7mhHOsE`v*foB~%0 zNHvfDrvpomo%V z?btK|)GyOcSCShxvshG;f3u1p?8*zx1h&P_poUsZV~6^3etm@_bH>*AsVUC2D3X;! zJ3|Rg(UFw24TT`i7uqZeg`(I0-@G8lbjC9mh}S`s5z>GH>tQAGn%zcIQZxzCC}nM$ z51Q>OGYyXM9}I}(M*@Wof(#+Sq%OgRJpvDdbr6S)b616VT3E;)=JpQB54ePkQNfIK2QA5ruW=4xc zD&{P~F(ZG}xJWhvk0`^EktOTMN@M_ue{t~~iZEoQpZu|K1n5v>7*5Ljp&Qw^dA}i&2Np9wC z8xrJ-cC0iF3FI>WF=U#+GyN$|ls(0P6v~omeE3e`fsdgK4Zxo6fhez0XigP)CNDKA zo0FAupspcFjdsd1VVX{!9^_8Fm{Uo@tS6cVum!^^kksi^qKNie2QM|W0J5kMeuL2# zQ9F3jlm3Tqbfjcuyg`kf#08y{u;?@Q6V;-i4rrCoQJ7$nkwrnKVut!&R~ul=t_%~0 z%cR=VtQ|@N)$r2MZa4Vi$+t zgO6a#C`!&$B|X_l1Z>M|UREBW5HHOIYh7_PZDsd8BH=|)pvkmh^ zU{$5(fOXNHis>l=c(xd@`b{u`X}m!nS~xD(aw;HDht}C-r5kU0N{JAF4-cz!#drLx zf5-a78fKBC|9$dR5($U}pwj`o`PM`Ez&ut|;~;~`VR^$W=Hbaxe2O42pTnGtsC}}C ze?UP00@4cSO0YI@*bAmR*`B^6&`;CAc>kV;}= z-eCX8UGD#S#g39>_pVUP>J9F~eX;P8-@-a(TF080&j#^3B}Ga8E#P$Qt^@+r(q&># z4&l0ZCEXbQTw(f8n>!>PVZIVw58^Pw2Y_oPhQh&fA!K$7$YThc09|07+}6cL@Oe}J zj)+KE%ohIxY9Yoa5;iZU79_1$h4hmfowva)4`{WZu|_uivDm^yub9G2k@S-WkQ)O@ zMMhNJEGlUOwQ*T#Y4J+3du`R$cT5I)Hu03QdvJr)PPEzyoUlY#2Y3lS9yfV~i2L5x z?yO$2#{tq0S@<2O=#HBB*b@jEf@~^rVeKl`wFyHI!^Bgo<~8>x`A8RoD9Y_>2hYu| zb`6J5&`^1W7_d5cp#JxKUxo!IE2<XR z@XL-=?Nk>r1{2@Yaq;Ct+qAJ9zwJSSF2l%j8!2l$Npk7UrDWT&q4aPR!RTE2*3!wIYW(RbVf(r!rE3pSa3TQo{ z)Eh^_8H7_mJ&{7R(+vi(6PNdYRzy@q|UV;MHcP2~qZ z@xlt)^M5f%f3Pu22Cx82#|-=j8q)WHM%Y28WkP0RG?Y<>^%i>yzz}PQfrB_|D58Uk z1^^ut7m1P{Em3tpWrP_>JcRcVDl%TnS6;H`8fR#T#4tx~FpR`l1;BWWSYV9G2n5X7 zj9HM3(8!C@IE}w(ja=}I*w_WzxQx}bQ;<5CH%?fJS?( literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/015.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/015.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9ace9480d0b88f962936b4a5414ad33e84242cc GIT binary patch literal 3119 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 JlNS&H06U-fy}JMa literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/016.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/016.gif new file mode 100644 index 0000000000000000000000000000000000000000..dacdada00c5b9b62b456c2032228063ee49c6b52 GIT binary patch literal 3354 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 X1*(e&dW#>hpbXle4*H-N5CH%?v)?#g literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/018.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/018.gif new file mode 100644 index 0000000000000000000000000000000000000000..4daa29ef34ce3a199f323a75fa586e4178d593d9 GIT binary patch literal 341 zcmV-b0jmB-Nk%w1Vch@`0Du4hb8}bYf2(`WgFy{>i!^UEB38j_SWX85Ej)PU$nkH@j#vAHAeBYJV)|CYqcz8H>m2?(3 zC&Xl^_O@k(7#US4m}u51nF&f|GnNA>rYR!YN9Y(jmc({hghh+_`lsiKh!orN2Z#yx zwo=E|H>s0_*PE-m%E>3UTL&!tYl)rhdrA!3c5JCU%B(93y6enc-fTr)o?ZB?h*GT1 zJIJ`XZT>54IE}BGIcxavK;z_(4x?d-oV>ax>P)jr?Ib!=YoKvCR?y<`2nRxjWBC&cxf}I&Ye7a`uqtrK>+|eGKZr< literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/019.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/019.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b8cd225783bf2618f1ddcc3df44d24d40dacc85 GIT binary patch literal 157 zcmZ?wbhEHbyvrcS(7?b@Tpa%R@o~kUEDRu^10p~&3``|G{VPwugzL#OgPg{KX=c%`)2RKmo*>1$dxYJdObX&qGQI29Vc$Q_`xAL JGl+q~8URzfNZ|kg literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/020.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/images/020.gif new file mode 100644 index 0000000000000000000000000000000000000000..2c3f955ca68bf1d08201e491e0a6dd4fb40496a7 GIT binary patch literal 323 zcmV-J0lfZ4Nk%w1VQ>H(0FeLykB@WXSk#N*d_TX>X!zFxH;JRdFYusXi<7~TFa_x z#>RU`OSwBNnJT=}0_g?(dbhg=%dCnDOrc_|9%8yQZV6$gFF;EMD~aujfWH&N}>4BVh@ZI4s&q) VxWy63ksv0RJc%-;N(Kc006QZ0nkE1M literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/license.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/license.html new file mode 100644 index 0000000..5c34f84 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/license.html @@ -0,0 +1,16 @@ + + + + CKFinder käyttöohje + + + + + + +

      + CKFinderin käyttöoikeussopimus +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/suggestions.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/suggestions.html new file mode 100644 index 0000000..442ae40 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/suggestions.html @@ -0,0 +1,35 @@ + + + + CKFinder käyttöohje + + + + + + + +

      + Kehitysehdotuksesi +

      +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/toc.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/toc.html new file mode 100644 index 0000000..bdf018a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/files/toc.html @@ -0,0 +1,92 @@ + + + + CKFinder käyttöohje + + + + + + +

      +  Sisällysluettelo +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/index.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/index.html new file mode 100644 index 0000000..6373dc6 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/fi/index.html @@ -0,0 +1,18 @@ + + + + CKFinder käyttöohje + + + + + + + + + + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/002.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/002.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb22402217b32490981b080b655c534538767a5e GIT binary patch literal 67 zcmZ?wbhEHbT4g JC@;cb4FK3@53&FN literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_basket_clear.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_basket_clear.png new file mode 100644 index 0000000000000000000000000000000000000000..41d6cedfbd8483643afb0e5962ba94dfbb5f89b6 GIT binary patch literal 3208 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_basket_remove.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_basket_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..258a1a929ecbd8198915523d34550691c4a1e157 GIT binary patch literal 3351 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_already_exists.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_already_exists.png new file mode 100644 index 0000000000000000000000000000000000000000..639086bad0917274614342b59a08c07d21239bae GIT binary patch literal 6304 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_display_01.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_display_01.png new file mode 100644 index 0000000000000000000000000000000000000000..d77723d0c225fe33bca0fc1b931585c9b8db9208 GIT binary patch literal 8270 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 M07*qoM6N<$g5t~f5&!@I literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_display_02.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_display_02.png new file mode 100644 index 0000000000000000000000000000000000000000..96a9e3e2cd6b79524ff598683612a78288353be5 GIT binary patch literal 8194 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_display_04.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_display_04.png new file mode 100644 index 0000000000000000000000000000000000000000..cae9209158f54653dea9d8d976cfcd0d803b76c1 GIT binary patch literal 8074 zcmV;5A9dh~P)Px&08mU+MFRi@0RsRC0RRyJ0v7-T8vq3v0stNX02KrPAOHv=0Rbfd11JCmDgXc{ z0st-m0x|#uGywoP00S@s05<>&5)2AF0RTY&1U&%>L;wIW1qe6<04E9qKLZ0x00m6| z06_!*M*;�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 Y4O_v&+c2q>Gynhq07*qoM6N<$f*qPUg#Z8m literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_drag_copy.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_drag_copy.png new file mode 100644 index 0000000000000000000000000000000000000000..fb59fddc28295595326e89ad6ea2ac34f11c318e GIT binary patch literal 919 zcmV;I18Dq-P)EC`kB@Wz+mJdskN^Mx)3tXnFn8Pk|FzT8klX)vwbR?%kU9VWwY7Hu06H)L z0G89!001yB0985wW>uEcw*UXNcQDh_mfQc^09BTdIsj(2|5X4005EruIy(RV+jlSk zcQ7yjX13dqI@8m&0031w06Jy>0026WmQ?^SceOf@+pn*iwbQl#|F-=6`~U!En3#Xl zmQ|LucaXM_#Kg6>+mJ8-FjW9mFfdhBFaSC_I+~h*oScKg!n4D}wDIxo^78NV^YHZa z@h~tjIyz=%Isj%mkdQiNI%Z~;RWOidI<{s2wq`n2mbG`5cbS=hwzg*5wr2mfX2r#} z+yAyiOmz+b00KuzL_t(&-tC!*Qrj>PhSvpIPJAS7pdpEY5Sjx>0?k!ITdtO?7tnIO z|C6wiY{zzvVKBjyjx-ZR{#TYht$qtKhSpJMKE~2HZo$#^Da2S#ws)cP9bzrt4qzVO z&6uLRLIDJj2ohn25OS2#?8v*dcNl6YT0$R4tnC+G0wGt_mHg^R24}wXlo6^Q%&~Vn zQ%ySy?r@m&T1NZw73;dKDD_4l3m9E6{RmvZ?zNs9iHuNP&nh`v+cR0cn8|<6I9{mr z5Mc*XB|36@(4r91duG*(L`Gm=V%HI%p6%KJFQnPTe6g;?g}*!-baEP=>;)e}LhstY z%^<>JCge~qunqAdk)Mcbu@N|6&c@549zfW^sOHYfDk1a|dew_WKNm2gMO`~%wPQxV z9rLRpJ92?tc##)69UWr`Gsbg33xqCh$UjpOK_dM32y-?6H2ohnI5J;*FP+Hzf zj=Y_u@V|*B5OomdZNCs5VIM~$sc{HmK5M!N>K_B{eyI}>VA@$wZ<}!SNljwT+e>7_ z0Q_M4tr5&ZSP}v`zi9W}$ny~__2Gx57M53_QijVW)}=MWSts*CyN_K80g2KrAy^y6 zp!4$)3O{ekV!PSe*kpVbzA`Th){w*nkv%#w4NpKwR`ypsgwh%t_5D)Vj@FRG1>)}< z0Raag?nXcbpTQEgi93ZrD1;>;^by*NL_h%7UhK(ahJ=rsLv{>HLSPqOL>|x*K_W_+JdQb`RrxJ$88CdIZsXQ|g~Cc>DkW002ovPDHLkV1oJzq)h+- literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_drag_move.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_drag_move.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e849f669ccf12139b96810f4f9d863c7c0d485 GIT binary patch literal 915 zcmV;E18n?>P)EC`kB@WHwRbQucK`qY|J#r{I*_%~)7$_5ceT^CwRe!)|1bam+uM);05CcL z0Ji`C0025L0985wW@fhkmebSQkUF)~wg3ONcQ60|X0}z9(`Enw06LI&Ffh~8wE$I? zkU9X6Iy$v?F#rGC003q%05DYm001y|Fn6`KW&k>n+pn*i)6vg%=wqp^N_E8fZZk(bB%gM$zY9FIW%a89UhS1cA z@-YlCi69Xs2_Z`<%?!O)orX{Ysd23@v9?!u4}@$%L;0nl4EB7fF(XvIm?Q7Cry6$_ zoZ%qp)wH_*4eGjuP`%;H0z_v_F9H{!d$s38LL*dGGAL`QJ0`2=()r!A?S*O&5Vjyy zq9eBlEeIjCV^-WqXax2pb{zofnXcvYLW)hy7wbq|xaZlRFQws?Uhp8qwXXHg^dror z0}kZ^+YmPr`iZy`8vz4mEx0UbK7=iZs?Mye5<)MoRoqDUa{)41(9{c7+h+9IF~1bB zBNy0(8+oVG(Kd!KV>Ab}K>f*9)uakM9)qyTKpG4`p5R6s5-}&tb zxt~`hvE6KKY%)FzUzwW)V?g49$R2$r4X;8-l=l{0gyJ$Ab#^{zM`J+Z0`YbZfdGRL zXCrVKp1~rti8F;j$OR=KbO73ogh0TKz1Wk<42d__2J9G=gupJ`h&-Srf<%xAlZ0>` p{VS29=wA#qw-2IxJ$CTed;-z&Q`2*(*g^mR002ovPDHLkV1hI!p-kpKVNIsj(yih__j zI%WU>+mJf{wr17l_uK#506LJ{>iK2>W&i+YI*{9twvYg3w$bGGw%d^6?)kQ60Kl1Q z`NY0!nP<>}Zt{GJz#06O`pnCO<2o79uX-Syl5w$p}n*ol0IxP#x0hVYb)mCcQ! zyx#Akp4hjPrqiOW#^m|4q`J@PIsiImI*@y`_9Mw{QQ`he}S)k}EMesrd>wO=!+S=2jm$mnO{`cJ@ zk%YuoElF0Nv%hTI$1|TdGuh0S8J1f+T5o1J)}O9%N3$O|hU5M09d7*{$8@}X!ZmYT z(;34VhGswjgsX(Ww+MoVewcT;Ss?iPy&T^rnjlyO^iKrsjTj*WeR0JdtzL9fGIRb; zLHOYlqHbqmA?QOl4R#=RxB{*&GI#kr$UzCGtbj*28bC2Av?g5Y>~_)-BqVS2kbp#X zP-aIFLfzO3*z|l`kBiQG4m+Y(5Mm+@KoX8*CgJGucg956paB680O2|!I593i0>lC! zutSI>lllA#ON5A&%jM)`Rfpj3#7aulGBzV5rJO8DQZ8TB=Z;uLgudD$fXExbVYUL$@A#Y&0w4eaAk-t=M1wWLy?bMI^$47>nP*AH6!O24N&~|2 zn6V^+^AyJr#*SayHmS;(|7)8NUfdlvK|tC8IV2{kG9ux6Adp<1tm1FVk*~1JqKzZm zzH5pQ>{vj)2z3V)84+ml&>{_4RZ@MNRa$|txHw~Kg&s7aOGQTTduyL)7-42-XWI0M2vUVHEGD1ag)76lG0})++Y}g7j(_`iGOeVu}cbpzBmp3wOH|Wg9Muzp9GLwOqH6Q>2 zAOHd&oD+fM3xbC!f+2~wy3Oo-2skxkZw1=cg;F$}K9d$3y5dwU#6(&d8A6h#4d?Sz zQ&{7Zb6Ei;t%Rg?!6(FN?%F2O6|Yl{2zQ^>=z3$w3PD;Ka5fzGXnWU`msCiwh_eji zdZXhvCD^DKv!Uc1_VF=gzJX@-CYn1fB*UPHxJsm!l#7tauMb|cKaUaHIwpmCTk zn)bMz9zC$&qdi2H)B-dJgX#2q9~pz3v9!Be%4V6qrV51`0OSjR ua4iwOvp+=bDf^@3*6!@HJWy}{_u60K_mSqMhVF&{0000`mxGhYkhm~SqWx$^*Pyu*Z=?kr=fu^ z5&&Sjb}Hup&z!DiTGtT(07tr^?rqD^nav{h0MN4NC*DkZ9_?x(=3dE7Az+xcBt+8r zZ05GiBkqw>qFT|68efIQ+unu_PwzgHBFyuN)v2mfUj-K3Whsi=i6IeOsDwQ1*=ywUjBJ&tLEVmmZp`_I_BIw&cnVNem1EaJHF9K2BKznmS=zZR*ryo z&dm}em#@`eAvZ=`@{{wWU)sx47nYmTFn!XP`2q91xwp0bV^Nl6M;}a%7##Zv>b*(l zW#U6*9nZthsHOV%vEvVU51X4zR;O*@+tPdtsW|${E&!>!8FICI!5?fs#&WZL8 zR(7fJLzoIT#6tY(gQ9P&-My)IJewWLtei>}+AQrf@8H&zHu2R&f2ZmR@~fIJV`3#0 zF!R@K)V4LMxMYm7YOya(GoV^YL8mCA+$z=5BMrHdGQporD+oL2nkl_b#$8=+-@1ZO zV+7!7SxWn>q@3=L^jjqxHeXDOWlb++Yf%lORW?YmnjzV6MTMKA6uFSE`5!qcb|%%@MW98KuXOXJ^f&)Y5BH72Y0n7uuUXFH6D zpU-yuo~t+GiSlAtWqax3_+z51AA`!>T+ty>m`a%e0g=YR{MR9@`$asqFHKPa{%BfeKerD<|QB;En>H`=b<^soB7S7GlQZ4x}`)n2f7<-SU( z1G~1CoCeHkGTB>$P)P$Nb1NGmt2{ulb8hauhnIRjzk1iWq_pys=qTBwBHTE$AGYBW!_xmg9(!`Km1 zOX?5o;X+*8>L*EIT(aP^kcBogQ?d27n!gpUVks5G!CBCV6Xwp^&-3wra`x_Gw4Aqqr5iXR&F?yV z3M_?Aj8_dH0!29?Ogtl2Y#O(+c~kIjN@VAXn12r4;^w)us%-#>WjV#^uBHXCV{$fo z70=@Qg$)2?jY$Wb0?7Km#auZ0@#7oJF>b)FMefXlvtMug-@4ail~8swJXNX0{lee7lO0xu1Vw>fHQVBk#J3yo=={ z>615UNB@q4s#b8=dZ#j)Bx}<5RgTAg4LO$DTna7VMV5TsaRJ6Ax4RViQx4$!>4pjq z-X5?OMk1y}UCa>(@iiU#3r%PlOs276;@%aok;Y)YP@hYUp#fB{LBj2sW^L*_-}yl) z@3qP7i~4iBp3A+@ng?t=B1_FYm!Q{GEXJgCi5UEy645=Wf}uwks}I^X2pHSL01R%u zA0)b$y=@&Dt01bnxK_q%NC~8bDWv*Dux2zWMRVm}9k8z+PI+G}U@(`rFn#vM`*z_9 z9+I@)pCkg?rDq;XPCfAr|8g`C$maRtY#dCYG)+=MRo+7Uej8(LjiPRjZFfgED$(Or z!7kkq`1xU~{>!;lfqNF&X3 zShLtYp-IsJ4<+}aq4aTU1Ikgo*n1)Ga+|I_Chn2Q&6|-EpH&{HXvww`mJVhl+BjTx z9+gS4jj`zk96_xiO+w$54V>bFM=<_FOzO^j(k+V*o}BPk(%B!F7g*NJuZDW z?`)?Jhf4BQP6z|{?mv+Ee^C4ni-8IMiSqy7S^{P1fNMX8buQNmES&Am)sm1@yQ||p zN5;+ryTxQ_MlLpDeX!2U&96}^@TZgwXv9`AHtC?$D((CrnU5>-90i76?od5{S<;9*k>m{@R zRAAQcg$4=wx)zc?Wu_6aKt%j|_nUR=oSeVmb{J*ocN8rZo3#;f{WuUZ42$5n(Oj$1 zTzh-QgQQFE4T^TvF&zIVGesdsI67yYUpN7_1qk|mejBO@6jt&&-kz+flQ!hBmhpV{ zO2~qSI=$01Iw929$I_Jicg^r-^vj>rJ4>*pw!i1?V_67c^gRU~VXJYybxtXZA0glB z_=MvVF>vL+gJw0yl<_`xUETR}kd8pI=an%^1FDT=SsNcJm>9cc-AbM4m5skl%Mr=H zw=72Q{A+p3uP4~X^nS_r(*U)O#U}(&sYSX>3y?LHYHd+3R=F(0N+2OD%4Ase;XyW5 z-`;6RF8lSM>Rv1jK`qT}9kvs-ymv8PAFm54GV#-pQ>G!=k5PhPv5*lB8O8 z3=@RaUr#Tlq=^9e#4b9SLywn-VOQ&LBb$SaayQglJJkg`iT%yiU#CqYnJ(S$PR$DU z$)kK`k$qK=aY?m#9kC%&(CnP4$e7!DAhhW- zPp4D}Vdu$dai>wP3+seh&Ms8ANDf?4OEIok?Jzi`XvrxehI)uwZ5&8(;_UX;-=C6? za|l!0fq#Jp{YqhB4_oOMoB_X>j^3>-5UK<1teMLS)d30avW|SXIM*yt=PmlDo|3L0 z={VOw;Pk}A9SXBCOr!C5^G&c`Wqs9-oONIeD4fxKvg(rcvuki}Hgx|MVI}g3mrioC zxeR}Nx?^2l?zyib@cN%oP3MXvV{{stn+bF*lm&x9qtQ(b4FLxLo;Yr!M^a0Pb_M{0 q+>)rXfBwBckAky;BtVk&ej-YpZ*uGZ7cx* literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_pane.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_pane.png new file mode 100644 index 0000000000000000000000000000000000000000..e1d0e26b5bc4bd7f7d1bf43c799648dec6f29924 GIT binary patch literal 63558 zcmYg%Wl&wu@Ark`ZpA6?6nA%bx5C9P?(XhZ;1+jxcc-|!7j1F5NOAl3`yF|!(s=6?W^e}l8ex4MA$z-8alIxgwo|ZQ=SfXlk z;rnj;pN<5Eql1_xgt4f^a@`_`-xsOG)cU{iijLzoD$$8z=1YoGJYrq%UINxur)CsA zb+is2wn+817C8jE45Ru@p;pjiqc6`ZFRQDkjQt_SKYo06JDw|$h=hFlg(?<_M#Arx z=LA}b7yplSW4HeQiQ>jTIkX&)o&N}l5pf1*m}+W?YeH0K(&?2;SjI3uZHnBt)h#PG zFU0ib9ms=E&$`>WbmicrdyD`NG1}7qeuiv^6Ianb^AUa`>=mxHM44!HtX>d-r~H5O)ZJR=(>}dFCVuetJyzsB zS2%Do!);YxI>}}HHO;=udy4g?Re~iOIqdt0-Zb{mc{liY5B%gbD)Ks=c9Qe*dL$A! zh{}T_bzK(tT*i{N8^gb`?kw2ST44$?K!_E>`$c^kI9g0%L^XGFbJJ1t@&M`U=gWJW z6lpho*cwJ7SgYp4X}S=S>axJUsrkEIPk0R6nX6eRLY^|XDq$oK78`pAE&*1 zrtN!a?6MEMp$&BTrxW0HT2YojB5=Pb^0t^3n8(8)04a@==WOmsUF~y$S=r4 z;L{Lg;4RP2`(4}X?c^0j;764whB zv=Fa;>AQAi_moVvCL>!dmDB3K7gy6fjswa$4s}P+c^k;?B?fA%cV2?EXPwrWv;LQ^ z|2*Wkn62_fIB4;g2(+mQI6k8_xks-RxcWEheKFo&iDq*QbGqNJ z_Kk&{ZTyp&IaQB{+VD&T1>7EmuU~I2Bayq%P!nJ8GWx3b%?C#y?T3Azt|}Z~HyIM% zecTR@3(k69&TkIxtMP#iN4{Fs+^6##w0U{~4jqI#0Ni_&Gdb7Oj78G75|wkm!7sL_j0`97yaHO2?&)4lqx{g{| zUf)z+_Z&%~Qz3y6`v*Z62imlMoXk~K-uira- z$(x?vdR~ZTs{`*Ue(?0{^)K{>o0V1BqV=?^P37b?55|V&WVnrv%my6nbU$CUs5lCG zd$@7yYt*z6P?qKTmJ&xuXJIclt#)5-1ip9dJWdDx-MlqkLGl;q+j`;i`o^kCIN1zD+=Si27v$uXA%|x9_JFB5MO)V@Ib_TT|v6 z%4&sfR*sf0`nG-?cHLc(DrP<>t{UHMtoCwSisDKoiTIp1jBdZ*w>bu!-Tag8xvo(F z!7**Qty+3^Ry5^K8U4q9V-eiRHY9=UEE@>7a92m*S|)@3$S?hzC4$Q{31qv0RY*_E|l5&8u+!kYx3>t!Xge1oFWj^zkyk zBh>Q#%Qm7;;OK9~qrk`gBWcgWCB!Hmp45-H-{A7`+@2>rV_?ee>HVSSWqXv(9{$VI z&}P8d!2O?A>s$QY4bN}D&sx7v8-DabtE!yZ816hF_i+f^Uk2V^BY&;Y3oIS_`)8if zaeJZ1cE^2oHt=EV~-qHU#!8gILv!}4_m-B3risKj8)mf5_b4UxM^QgAZ67+cM zyX^xBb=7fWYdbAa(GN7<8w`{hRr&h5g-xq0cs+#8Hu8G1xqaXIb+yrLP-U%4 zEuOm={r!|rkE71h-wL*%Yjc+!yxzCpGU&Y?)&-S|8Fz#cWy;mx9x{6@wO88=f3_Ob z52B2}v2vWV7V*c}P^;I%$4E?Y00xX--5_euM+qMLRuBJVId2S|?^nFkow_pEL z=Z&Bnub0}wI{GVc@LS{u>x1W0@Wb1UC27YV zgYWBhS>Su`i$l)0d8HkVtoy+Gz=A$>-vq$1(97Lc;N3~2HhSNMy`#WK$=5BnqtWYL zKUkTayX!6o{^r;I)S1AO`^}xZ@Gj?<93B#V;hX>T&Sa&glCp*p%$)4~N@o$d>g_VQ zA4`qxJZU|f-Fb5U+{D11tLQR`{;kE=9Y^G4uC1}8 zk;7>7tbyfHxX)6-paN|QH(Rcu0kim;uJIdB;M3l?zW-U^bsymIO~%0A+wr6SW}KE* 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�QSRvtq&(y37$Lg#~ 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 XB_2`YHCksZ;8Io8RH%`A^ZtJU$%&Dh literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_rename.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_rename.png new file mode 100644 index 0000000000000000000000000000000000000000..b39169859638c7a99cce206a0a950ba994313d20 GIT binary patch literal 4240 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 DO7|hC literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize.png new file mode 100644 index 0000000000000000000000000000000000000000..07c163481794e44c8ee06fad371f2808fa936f3d GIT binary patch literal 21356 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize_new.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize_new.png new file mode 100644 index 0000000000000000000000000000000000000000..486c81d94bf0722d7fd7805f7a08866116bb0c90 GIT binary patch literal 12055 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 ByDIBVh*ym9+yPzH zW#0fQ$0&CJ0Av76NmB*@1fTPIVJHY_q(g#;#E0_%zA+N&h>6L* zffxyf)Ut!Jx#@p0Vhw;%B7}rO`Hd4_BTK`0m%xA@+^E-dNMl?8fN=B)XKmoWfk7xhh!rPYB+A^bChi)B){Z|>V45K?xLpq0H?rI|) zY7jM90@wAPNscQGiZdMyzR>WacYr6|7q3GLuMDWTLx*QAIF~J`ZVZX;j6hfK_&2T5 zZp=|rJiKnqNzUJ++*q*kBraWB${jl)UD}b|*>gVG3O;Cd0-_99;1g^=w=@!W^9FU1SrL{pg{hEg-eZelnM z5PPAB(1JpZyquz(+^-F#EOqd_`%ISmWT(P!T=$uL?YV7c4Nq6uTK8Wem6gN$2))7b z(u%sK;hMbMmWiD9vBxUKprMiQ-x9Z#2?ax8&10+~Lx)cdrma1Fhb@Ko4aFsEfT5xA z$99jE-jcEn>Ze}Aj6K1I@vXh#;QN06Z-1Cl79PK@wKeVvw(km0%>3>=kSX8IKbmUm zI)V)xspanD$kD>VX&Ia+X|A;v-*rR zAMXzLt)5`l`l+t!wHyz|t;9cxY%hBrH)qB-DWgyNx&rJ`=?8L^L!_Ng9SoW${S9!)YeONbI#8TOHKYy8>+28piE_L z4R^~v#}!Ml6w|PCCFYQL-6gH|1`Ic{qM%V*Xrv(1Y8kVY{LFv=_f_q651rMBwBL5BI1^O#|T(ZAeiI zOa}&61c(KLjFQuNYlpRyW)6H)z+e6R($K{iUxWNQWf8xuMLGiZgY1$DGNd)PLV> zAi&f-ddLsD<+hvu`B=Vq2JEwZpxGk3Fik7scj0w;64<>9Gv@ zICLJMXdI?;;{T3Jd_U`AE?ketCD2EF|7nfWGMnp14y8#a>ZTo+j@r`?C{A6@QR_aJ zhzgI7hbHXwA!OkW=jPK8+(Lzvo<%Zwr3>qN+&tw5+V=qiw*SP~V?pXFfq%Eu17Sl= zJ!?!Kx?LU9Fhgs+9<-jhik0)%6(Prgr6_X?iO_>nY?NlMbkEJkSQ`2jGtK0C+g?{q zzfhmLFdX~XpF%0+-9RAFt9$5s`Gz+DN%EF~sr^HA!tJi7#}T8pr-;Az+RMO~;{$8E zL2nd#L~!CYBp=2ash684Z#ev&KOcBJdUm{)e8Yz(0F4P=hc|tIQ4%#;pk1&w76?>= zk8b~E2;oLip!GsOZ2af_Gr8~?@&(UTQQ>tCAZjJiLg0UG`##M1AN&4SKK5B((oEQ? zv+@!-F5BSYqLs2|lY&MmEX&>HprHTpndxiUD01U;tEsJN^8-0e+lD_z6RSc@q9hxz zGQb4^YTN8tVqC6eXaE|cN(ZYIg%KZkEovW=M<;K)kR=Gp5G2at$Xa;ssVzyT8ao9t ztJWw+z$u-{#Z-w@#1QfghG@4j_yM8eGM+#`1So%aqV`Z;$(>8^}INbORsw*Zy2 z^WsA4l!*{`%H3jeP+eW!YAic3Q`G13;Cw9&n3j=9*MX!crKlR-b1+v@!e=!i9ekXK zv=ZgFu+RTetn@7F+{SSv;eirahV`u?2jcr2Xf3y%yoUeQqKR{y_j6(a(2)a9R!Sbi zhCfM}F-GYd`!?j4RWUwd3LShyQG!(p;s@%sH)c>~uiu897G31a<-wm<)45_}>?MNC z&0F<*Nfv&~-6dK4j&}`Om{9a!ESf?GmQZ*Gnkfv^NWsscmH)z=|5&zp}dfDAQFf~ZBluzdgX z%WI*m40_IxFj8(U(*(1lS4>?O{|Et6>Di;sQ=oExhSHFk>xPO@Gl*^_)2{K$$z5hh z=|VpQYQTgtXq9-fVal%CW6@-_L(sR^VYx#?>by`!CKh5oa{@OUw8F}~&Fc_ynv1y3 z-9%@XKU-tNUw&erZ2pmM9xUh9r7Qd978Z4HEXJw=<%IEgNwf8&WH7O#0k(R{c?_ye z9`D~xk%e)IkSnRiN3o?%xl^WO!Z-PYykRkfPCS?|IRcHqgG)j9_rImm#)uz zD7x5ME%a8ftr6ik`s#nfJX0&D%0 z)A{OKO~<4H#ew}EOcg17AF$A~^9`_dp59raTQeLf0tqy<~d^&da1XQ7f&gs z^s{+I-=Qa#Fg=`)p> z^Px@w(%qO%G1}HrLe}_poeT;dZS5{je^H61&0Y|@mB5b`HQ2asvb?t7V-82S;RaS; zu<^DgCNEBCRSd`%-K;R#*u-DL0|*Q7Z$g>8v84dg7PfCx(1#!eN$v8fc-CS+nGuP#cXzea==}4lA2(_=VF3P# zYxqk0%||wT?nXim62e`1H3CXN8g`UQSJ_MJ28{xJl?-nc55c6oO;sG2-~LbRrQ4-j zXJZ>(?I~#hNSJG;{r%7GP@is}K2$b=RPiwx=%{fu%4x(FJ8dj?6v+q~2XBD_yEJ<= zIhjZx(IlZ+(0#Y2HtKPqD1Cj3bZRnkAZCsqEW2gh*lXuD*{?9T5Y7P)PQGkE)f&Au z&w5npVSdTP%5wePSz7#1#BJxr+Dk03uS!H61Fxk@00xp~?u`D%-;a!HwCQMnO9*aT z9UCnK$#5V8Ce=H3uiPwBJ#a2bHGXoD zeOfJ2r8T*zkd?7?V{y-JAw%4eATh7jKWDcguGn4coI-uT{W$1*zMhcS;FDsZ=>_5*ywv4_vq@`>iQt>;;lBD z{sVp_Wgv`H66%ASSWUv!>dygJ=Xv#Wq#*q0tn1iR-$?h}(Kj*8{Xl6Tp?L8mVsh^S zmEo83cPNbHqXQ5|`wCsf-I+f+X?SY^uYlf=?d5$BRG%1fvE;X(;XKSxxE2YrT?4~c zdvj|7x&s+P2`_RmF=<~lD#Dp5qfOxD-W4jvljfeJF79bniX<;yZW1FE9x$t&dOJuM zyAOtusV5*dUL2-A%}99_3Mbb}jJz`*zQq8t-RHbTst*Ugw43QiN&OPbKrq1S?`~Q% zc0|H7z=(|m17I^!f6*@E`z)PLCE9A0KL^f030_7|N8h9#r4OjR@p~h03WbJfdXV52 z8{atjIl79E-$p-jD>6GSy0JOU3=iVkt_{F(Ia~4M{QQ6VnIorGI-3Oz^+R>PThui_ zTN(fmJ&3diJVwj=MSkFsPx~2EH^;e7j2f&*bbxqWx9L9j&dAeJ%@o@HD>rYgKxD1N zdgtn`o1dxD=+&a=@%IR&;|_iy>FXsFiGCKv*ZT!YWeNh1T90e3l$V z{xmS4l{&`+6~@dWHw=cKA;VPsCc+SB`Hxe?Prp=EQNG_BhkL7GWOLy}Q9EqXf(IB+ z&#)S`X1pFgbqq5H7{vrZ&sQVLr)|e|M7wbIXscfA(W+emS*zxvd+OW+rT`gXq!K$9 zbM-s-c}YVftu8P^IO94QBor?YJOJM=L|QK}ngClAaP{zefJRHGzdO8Nu7g&|N<$s)EaFx?(f5{(r7>Hu$z(tz9eeaZa8dd1WYBIHn2_qj#x6W_Avq2OEyd*;f1gF$Sp#|R@M zhKqzlBFU4DAi6iwMPzSn_i(Ws(=f6x_U;S))d)n@%_=Ex4C{_jfD) zzUza*qjVDm>|F5nlv4Ot-vgw3%l;Bng*ccJtoOFB!Rp)CrFObb5cZq%+cv@UpZ3$F zJTOa9!wh0MdGsNc-!gThc%SDDvVc<KeOW7CohHZW< z5H%V+N_$8547SFKcGG4tfiJ=8Kq46gND0Q|ZBSiN*4S85(%e=ruo-FrynXv=hf_W; zF_4XI{_>{<*aGHd80RWRFup55fsb!Aj6` zZ^?78ltGjZDST0R|Lx5mM?v&d{V$c>TUR}3FEep*TOT*Oii#iuc2gw8f2!WKr=-FD zetNd?P4bb=8wjl8%NJRn+{yX4q;6TN00p;Zu{@dL*}b7}qJjaHlN&^m(H6fb+~$)o z({YmB{0%0%f(;Evfe}t`)F$@si8t>~Pp=0;Y~j|Lc?B!P zF#r~OOMueL*b6N|j{1|iO-hok+2|?QC?w!1=TnVzRi@5N8D|~a=F|o3x zqOPv4t+_52c)sbZsiRn=U$%-RYA-n9z`lMvlw(hhyC?TM!kM zq2ZUqz%U3rH#fJUBDZU;lO;@;cu*?pG#FSM7`TiY9v7_cUapE7%DzJJ+8Y-VW9x_; z5O!a2hy(1HRo5_YphN6EM@v;5RlG2sf%U9RS^@j{#;WdvWM`Z_*^n`!0L*$SvD4c~ zLfK5pFbA1y7-ozH%n~M;q-0(8tdIfWfi%55x4eg^XDiJIX4^#IHki&YW5Hi&&jx<| z`W0Cj2RCacG%jt2Cz`8jbPG?A%Ijfc#b0=wmq5i*3X8YUu&RZaaq~@xN=4?aR1NM;)efC}@S$;JK^R zw3#fIUo5}}K-m99}iu<9Ew&LM&m6EEE6M#kre3tt4(dSOg; zM$YDl{bnW?0c#l=r->E6qJdJ8?}YxSM9Vgi;$ve2v=zZu)DBNJMha-%+#R@pN#9|z z27pu7oyU3K&wnw@&?j91#MZ~VRKniX7;mNosq-~aQZsrnH4~2)7Ep0bmz8V;@D*TbgyMkt@k1{>!2I!t%Q#tiEngF$x&IGJjag%*0;y@qJ20pOmC=)D6 z$n#41&&HUY-LAD%;-+K&N0cQ6jFZl2K<1i9zr`TkC`+-FZn-e#(a8vhmc1 zOt3G9Ts1B8VLcVJ#3w;P%O`J~+F+ zp>xm2fGC}*6eLi=_!TiyiQjXk0qpH`1-G@KWg=N6Z=O!I*ol7{VlKr&4W!H=s)m2{t_~}91PXLHg*45JpBTwZDgKm^1nsc>7At8yJsxb5|K1t0o(or}| zgn`w_tvyjoE442*Hqe%7G_CD)TP>K}{wewOt<4t!u8q(t&GyybnrcK`*o9zF`>T%X zrq*2YoZc%ps+}MBj8(ITb!4$`<%nCkf~`F;J&-J4EK20ywX`rNzDcogU4!MMpGLwL zO8awNODz)8(;Fe2GE`DVlV78_Vsg~s&X$PUW#fk&?2i|NMPiCZ!TOwD*y?D4G@C{*jk5PKrMi zQus3w%Gp)o7b-)H<3Qy=rHnH=?u2<`n8Zl_InpZFI?jOB!RjEQ)Ice9&2pzXoHDHFSjV4Ic;XhkGrHK!`GkroL3xZEFq1@Vh+OBM zGm@4aiJ=jmx8yr_oaJ9MMBh?mrA4+*wEmU`Wb&8`mc8oBUO7z_A|l#5JetqcPe>j# zsev^c!&2nnWK>GL*jA;HKZd5IPQ&5%U805`=r+CytG5LNt0NPor6}j{g%fL!7zDZd zV?|wP7h7H(@kS4VqjdLh9`!k%eS>3lUx{P@RHM#1b4=(ELnJp$j6KgDwZ-dKG7#ILR;*a1hh{)(Jyj3B&Rbj+s! z$%uq*rqOzkPhijs9H^TfAi+G!OPXA^YPS-7RUKd&UNslzyF`V~QuH%f`a$F%73T&d z@F0^ZvGA|tjBI!pV+N;Y3iYXH9R@GvcPeojF85&m^{~|8blF=~GC1!v8*)FiaKs|3 zhrMUVt7$?R3Qb(b-TUApjYl%a11;wbIOf}-;}nWS!EB?6W1O=q$jlTiYv87tog1g` zK`%ZS!Nyf!g4s(od}b7P;xS;Xs&Jc`iV_rxjW=iPc8EZEM+6r#DLi|LwNN}@<}Uh0 zUtw5>!+_BVCX()OC$o@pMpj4wcJr6UlSj4x&`jwH zOx@J!+gz&!U?}=db~<295J|TWe!3PuJf{&$Y+ofMB5KK+J@s2YAYMsYNU2C%wEA@_ z200*hyjFQm&>lRYBXk=?myu%a`DRZ?JFLF`!rRZwOGJFsQWe8Su>rjpJM7tKurx!6 z+sPx}G@!UdAk7`B=~*c-Bxt-1i;)ji))WSN zRbB7r6`&I@?7^1Th_4j6xL8*V3=MN9Qv+%qJ`P9o{7i0aE^?4MtMVqcC6JwHx74q%zPgsRS`ygqcgd>O^GY73{YL99}9tL|ZJ2HPKC zf8lT;P&3UTjRM8))+R0Me56=cUcf0y!07wWy03(~Sz}Gt;hLaOg!<+L>C;9xiGDusCQi!R{KzKBbN_*;OI51{j}Zpm%|%^V8|vT`J|PML=@0UP ztBhAJ#4z6;3jtzcCILPsCYj~TbPtJBemwa7Vp{H3c*YX|9Qf$x?AIjkCnY zZuZfWHX#!i%=`A6$ln;NpH}(!9MLA(!eA|ka)TE>De(_KUS!3wCO{b%Vu)cpE9yh5SAqVoYgr&M;f?KfhZp9xFO+_eEjTm%DZ| z_HB+EBNYq9sw+)a!)dX65H&j< z*i|A+yvUy^Pzv{T=o_`+n=PtPR#xs|p;a>jr5407scMF9S}Nc-nv?D<}8Q5aDI zEG^7Z`0bXX2xfPy@o=0)nSy;q4VdaFYxlNrExEKadrC0T&{p$%`2yz?h+C`h`u)e( ztzX@FT~678MQPq^kP=bvdp@5RmJBB;?Z{xT0oRkYj+LF*Wo zRDXRBG8!5z!`<7i{URZr3e|ECcG=W*JBlmTr9y;wsB3O+)+4#!x?OK;kP%tn?*FVl zI9jwqmrB{{ZPbYIW^p;q3=qX3!S(0Yf*KYj8nkNb(FD>f<$Uta3|4T2MPLYjNr%>3 z!{hs*OzE+JQjpjQ%m}HZCdFQ*;dCq+ov8ixycK&d?h(WJte6q}VyYO<0wR*)y-uwf z^Cq{m4=>|)ad2R3j@>S`SP_n}Y_t)!*Y{s3PnMd^p}dX$#HM_gT4hVUR9=!^RZyEb z5zm5$kYH1*SeNX|O)LvDD!9ozWC)IOjzYT#eRS0{&zdfk^u-tFdxi{L|APf+*i|~O z$g763eIHf$&{Ly2SusWM_(sy#=!Sz`^G^PtKN(pw2la@MO5zD8=4o6P0^PVX2VU&i zxcFGF>B7p}IkYoVhew8-dQA1`V$#&3zIT-R%xV;t8^`OS&E;4}&YLI3v)~{`N$*yg z+2DPp2p!{x8`)yjx;RaxnC|aN&s9)Xjlq-5O;&9h7(BClHBeFP_~7VCiO?8&pP$Y| z2)+@7=4j_P<3CZQs`r&;Tma(Q)$7Fm$X2kV+N~M0zQ&+hJ7QDzBQ`{Jq-K0mT;k{w z{RiKh)TUBLVv$}bPFbx7)lzTf3jJENwC3UQVwD<3e8B0uL1!BoU{=_)b`_Mszi%N1 zZc+E}8|qI+(?rEmy%yeBw2JDxz#e9BMm9IlwG;nN!f>2_Dj)P$ph&3*EczgaLWFXq z?pw7>J(P8c`*#P5kG6j&dvCLj0SMv>sp&JutG_Nm6-9r)a<)7;P;;aya+`;fq~`XBoR?-5JaB3)6>a4^OgFQZ@IdwUSR`A0$>#Qux?|NeaX_VtWYinU z=6v;;Aj*i8B&F(S?H5CX63VP*DenD8V%b(S5x`KV@8JYLU0}&h7D4|)Ha6h@KsJb; z@4f$ze0Eh$-638Ph;m>dM>5LPrtuK39z^-}nZTafG#uj1fGF=h6X;W$Mnk+_5GD@G zTo=&aocDZ$J^ZSbQDfSyKX-Nu7X#{cnhZH%{LTEPm!>G1ik>UCe4XYAqsMQf9h%bk zDvFT6zQlS%yuS`Uf{0$&l(4*m6hsYjHLNWfyUNGXAVLZ`wgo2-ZkndSnBdNd@O`iS zNL*!(!#Ep+&gusWG+3mfp7XC+e*Gu{!&nz3)KKA4{>jIzk;1)+(WMVKZotM5KmmJJ ztmxN~WomhFZohvHANZJVMC+ZG(Avw<0zzpz<__u);Q6mk^S zM2Rw0Sw#K-3oi*pGkHDvxO!^&*-J^rt8Jj#hV)Z54ef54EZU}+Pn5r!cetJZ^NYKJ zKgy&0{2iH}s(BzdUr}Y!;JQ=FB22f@f$^8%VZP+7}}c z$nN%xnw(8J)Y|Usy*6?@$=TsTXR_ye0o^)08kwHw;de*NZmcqiN<Y zN9NECFyeFM82_v~^RL=Rr31!o(@|fuKhGIku#kN9{z5X9ZRyYwwRn+~LO~Z1KRIScX{LJX-?Qilxfz|_J)!3{saXHf_)|}d^8q-E|O6;8rk%qh7o+YY+leWaXh$e z8Bjkq$p}e*i4iE12)J*zyO>hbB{)gs156%Qq3;>8BmxE{Bkdi;tHxhej6I%_-%@|}mqrkiS@a<2^EMY=V>!45D(;)Y?Q)r@+ zoR;$(MSo&1MZbA3$>g(0Q$ZhS>V^!q`u(fKr%RTfPuB-{ozY*yHs}a&OHiHz-s&*L z=AV=Mzow)8`RL6hNPFGr@SWZ{n)_S4pETj5JIfXU{S39YK)AW|@^$*QtnDB86v*9_ z5yr^)G4gmUsr+*RJzST}OnOY>>dnUxtAEOuCTYmg`CBOTO@J>woF3yH3XyqN(8L@~ ztF!k%0?M%G0Bi|+PfM9A_IbaDp)2YK!nieHTMqL6t0eUr>Eyi~u7V7#hsHG_%LkYo zNh+tpk?~PQg_&M2XE8WvqeJZJ&Gmt6KVg`&*bNG zW%Q@_YT0LNtZ~`LssBqy>%q_Gfc*6MfWhgbQ=wnKVKytUd_OuNq3A$4#b>wdeVkhV ziU84ZcS|NghG**^)Z2LY@Js0GxWlGjrV<&J@0&)BR=*)raN!QPIO6laJK9F7e@gPW ztDG2P4thEG{NJZ6laJ=Fel=Wj3b)o?R_Gkv(^>DY&nAk$m?U|yiB12O)gf=}2u1t- z@$B%UeQRW#oleDEVK((>5jsNcV9ayvgeyS*yY2Lf@!mQbbwv9kCA@RbarwIk8fAyq z>)LtuyUMrQqdu}I?mxwcObLR$h5Am4+Ote}9PCztklAbxqkrBXW|4Np9R$)yys){W zglC_`uPORCEt3XnpyAN6T9Zdk1;^q^{1$eH7`IMY`?jT>*)B=i+BG* zZt!`k?&;qaJSWn#Jf`XL{7!2s$C@vpV!!s+Jbnh_y){x*hdCLyLual85xWipw>$d? zR5*QAKT_$vV!(P4m5{jZ_WiHrSICH0$KULmEpe+hCN; z2*n%5HkKkI#_~RpVT`1Go={VzN6_?$3@XGLL@7CU+^w>47tNpvMa4_`5 z^5e3-EB%c5V>Pu4IU(864K}1<+pe(Ut-m?&?^f{piil3wZMp2$nX~J$Mr$5Cyn3VL z;CN*0ig5b{TStv+?T5S-ix(=WcfE+h5@e;QrGrisRzR% zR(xTc3Qc%`;Vu#+}|^?~gJfIqFL4x+j3(c5S*o3TCa!Dg(%@oGpGY*lPT# z${3e|wU=hLxdfZsk=qJ|dwZGJa%c^9T_I1%OldOh5&HWhl1hu!t+4Svq$^lO? z7z8{rX60LxhK)^R=CD?wj^#~n51So0qupOh?ubbzU);)^x?NcP1(APuHV1ETaS$9* zp;TMmK!x#cU3R*MQrTnAy?Gm_-gDj+=x2e?%Bit2wq5;^xiAsJ%f^P`2MFt&LH>F=Hc{65Ya=gIcY$@d~~26Y*|R@Y&|)Ijz?0nvop{M{vc?jz4-@ z^_bztJc2{Epks$U>a>3MsRWazMJcYOVWIP~nu0?7!QiukgEiw%@Z*Qx4;*BZvThaI z6irV!5}fhT4cuV+y(eo;@wRR;(AN#&jixniEFM7!L8Uh{{% z?d`*t`oczt_;+oIB8bb-eTQ#RD?4wGw@59&I;#VLkjmq+)2|8_ZC`!@?sNhY5ijQN zu%GK9Xe-BQMkl|@3eA=|+a@h`5!~t{6KCTobk2 zE*ua1>uQ!sV(5^joxs~^6tpHtQYx*Kr!esQb26!}yyyBi&yG%UeRy&Apz*w7i2NVN^rnS~lMU*-DN73c|9NzC! zJ1KW&*em2Ld31AKd{L*QktaXxHFH0~@V8&S(qQtW#;W3!sFpc&f2N~7=yS_1$`Z7q zp0Ii7`hFKRWy#GelNhsKzC$gFv&N8fBLj?z9OP3lKA*RE*OF4Hb5iKk96_OSORX#A zR|csCl!bUvO;@PV_iXj4Xp`eh1Aq*xL+XofB^bJDAx~PSjav_++`hRW2i;&9Z3JX< zfl(gbQpuQ=cm2xSVM{G!)|xbPf2&gFh(@pkgZRTN#=}-uxR6{oTK5t$b20Sp2LbB? z3ljSe10HmS2*F%PL-sKoVIwM<=6OAl>FJw3>~T^33c2U?-J!SbhmM1c+q}#!-rnz# zrgiFP;+CmuwCU+Hj$j^MaSg7>1!e7Z+)a^#qtzZFo8pkFqO`puYqwg9B$5Yoq=lvL1HB0n62lB!IYwI zvDSw311mRPi7C5`Lm$tpRld(>6Js2Bhyo6>YV{HrBzW!~K()I`#Qb8M^7dlihzCoG zj`M|69sxb>6SQD|S!^$D)jFj<;3s9??@m{^>#KqlBcE-t$@uUQ_z`1NKpE%e&4~ji zXld2N&`4N`)$xj&Yw@Alw!0kENW7e){ZaIni>8MXL39;M30bGvAdJ{P^mk5%q%YlA zE_v5|RTZ~cArhl^JcXW1P?8u`{j4aFG(OB1gJc8#<>n*sT@NRDvSVwmB@#*2eW;Dv zy-+Sfia>%I|GKlnxL#and6v!=9@zH1+7n{T$t_}bMC7^yc03ATkpXvXSslRvr@25Vw(p@yhL4x5k=3h5kHgMj& z7O&HmoM_^_IRpe{=|_*!QV3ru_#TLQ3Zb65@GNqu*dVr`2)8>|9k_X<3cbJ4Le&sn zqa`b_sA;`~HBn9WuNO{{W=w&g*C9=tU5v4{ePgwY@49e0mX{)TK_rM$0M||&pM-t{ zb$4cEFr`yLXHv}aT!T|0)7QOcOPr?umnRzsS@c7KiIP&w1lOqC+7-@R0sodm4_h3~ zZeFOe-}!4&y)+S9Vd{Y;W=xz;$4Z-`i!b7TzkukD_CqOt^z_S4tqhOo`uOy?gYqgY z4tu`&d00ym_SNg~Bf>}O(nX(cIxZxQkcTdvsG|M|({lgAsk0eL2&(blYC~Z8b=-!hBsm|G?b|mM z#e7MJY8v%Jf}pP~bj!@FD_VwV+?k;$+Mc=jnlEeWY8k!IT5#BK7(#!M_t@vk$nBbd zUmz_6B6m6<*g}%mVQ_|H42LBW_3TnmgkX(UZTe(Zgf>#`d^B&?RJyt!IK$7sP&JLR zU4-q&CjVd02Y<>Gtpm^0|pxU?Kcvddq6M=(bv= zE?FB=;OO2#MwgWpXB5c$U+<=biXo|I&KFNy;s`K}_Z{Q|{lmL>5OR!A9f@s=+%7Zz zl5V_cJ3buU`*kU&{vtTtuX}u5_%zA;s7qQlRE+*xek%jOr#e-{7T-@#st12o2ReYe z1nK&Rhm|8R&U}Hi2J3=QCPJ?TU9V$S1b#dQFC-&NT+^FdB;ik*$YP=4X zZH!oAR+m-#*jhSfs8n=>rI~Fv>gdHEecg+)rrF;>93~dXnBK=mvnnS~wKfO!ISiDP zh&JecU;4gMx&iNYTEOxZw78OCSu%~Ow>Q?tJ)wGNw2Ah6$YnYz0h@q^@g^eQcy6#dpO$B%@X;Jy-aSe}VN(aUjd zEJ&#YGj?`%!(E&X6GqXwp0u%X8v;pikVxcp0=2&o$qw)tolgPnO?&KU{}lx8=!9Y{{y}%ve*Cs literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize_thumbnails.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_resize_thumbnails.png new file mode 100644 index 0000000000000000000000000000000000000000..6d14ee4c5ed77e223d71443eb86d350747879fc4 GIT binary patch literal 14917 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 RUQcrYl;qT9Yowt;{|C3{8S(%C literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_select_hovered.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_select_hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..7a5a17346cfe6d9e2a107bf83449eee1497ff7cf GIT binary patch literal 18529 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_select_unselected.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_select_unselected.png new file mode 100644 index 0000000000000000000000000000000000000000..cab403ab07d7ab78147de78465cd916a63174eb3 GIT binary patch literal 18285 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 om+O|^FVg<+!1sfeQOg`Zr#0NHq)$ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_view_thumbnails.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_file_view_thumbnails.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6c353271457ade9a72f6fdc3304ebc5e0a0f60 GIT binary patch literal 17883 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 T;?OWE00000NkvXXu0mjfxz?5= literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_copied_from_basket.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_copied_from_basket.png new file mode 100644 index 0000000000000000000000000000000000000000..ed189f9ece54bc0325b487a33e51d623857fd210 GIT binary patch literal 2870 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_delete.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..146ef38220c9f32058f2ab44349afda57af78e2b GIT binary patch literal 4345 zcma)A2T)U6w+_XNh=L-D0#bwYq6i292}nsms&u3Yh=dY)O(+*Z0cjDC9zi-6kS-;F z6e$V_QY17%2rVQ+2$7l>@BQb!_rG~>=FNPw=giq_ef#Wn*0=VW9cN^qbKxA1m^p+AVzm;9?h4Q{6NeyPe14&oS*7d*;Pt&v&M9lmi1pXlE)T zBvM_2-a~+q9e!r)o3_{aMurdck_c>xw}D?aqto;@^Y`2$pOA0ga7#u^{hqqAcfU=* z^gI{^N|#+`LZcca+!{f0nEHA-Ki5FsHmt3c-O1tsW&z_zZ3!Zbs8L2F6^tzafaqA! zT{bqrHAemv01W^}_TPvE)5}JBGiIzFwko;G%uat&y3x&@p~X*k?dP3+|Jp>?x&DaH zgmM>qt3k}8z7F$Gr-vf=gSQ^D7ud}h*(0MOKS$vkwFB*MGz%mg*$Fm>-)b&i0h090;Jc;$U;AxYK6(rL96JU5Tzz{G-*(VP`Kj0c^Aq96G$J8v z_fmDBVCStw>e6|Fj^E6y8ecC?nq%c1DQXwV$L%z*(qusi~&UqWTEdLrr(iT!&ytO6zxR zKjxn8Sn}sw_>p_NTQ!ey{3B=o&tf0K_VV9n8dUPq8%v+4R@SS}70wuiX-vkBF26T_c+t$#rV|vRPH%tHQ9Ug-Oh>v>H(_Q2Py1RO7e8h2WA0DKp9DU;zcj9*NZw= ztLJd%KdFg3T!ADE8nq#cD?Y6?h(E0$+1_B$=a-jo9(@ubL{^7pDdd@ZlIux;lt(l5 z%c0}XmHf2d_nEmHd)OP}OTT)+U9}@JU4=+Mt2Pt@RV+#UCF;0jeR7fd;Lp|kXqF

      + Sveiki atvykę į CKFinder +

      +

      + CKFinder yra bendra programinė įranga kas padeda ją lengvai prižiūrėti + ir dalintis failais esančiais pagrindiniame kompiuteryje (serveryje).

      +

      + Nesvarbu jei Jūs esate CKFinder naujokas ar patyręs vartotojas, visuomet yra naudinga peržiūrėti + CKFinder dokumentaciją ir įgyti daugiau žinių apie šią paprastą tačiau + labai funkcionalią programą. +

      +

      + Teisinė informacija +

      +

      + Atkreipkite dėmesį į teisinę informaciją. +

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/002.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/002.html new file mode 100644 index 0000000..dced96a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/002.html @@ -0,0 +1,37 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + CKFinder vartotojo sąsaja +

      +

      + CKFinder sąsaja buvo sukurta paprastam, švariam, suprantamam ir paprastam valdymui. + Dauguma savybių yra valdomos keliais pelės paspaudimai ir per kontekstinius meniu. +

      +

      + Žemiau yra CKFinder atvaizdas: +

      +

      + CKFinder atvaizdas +

      +
        +
      1. Segtuvų valdymas: susideda iš "išsišakojančio meniu" segtuvų + po kuriuos galima naršyti. Segtuvų pagalba yra lengviau organizuoti failus.
      2. +
      3. Failų valdymas: rodomi visi failai esančiame segtuve. +
      4. +
      5. Įankių juosta: eilė mygtukų kuriuos nuspaudus yra įvykdomos + tam tikros funkcijos.
      6. +
      7. Būsenos juosta: tai vieta kurioje rodoma informacija apie + pasirinktą failą, jų kiekis segtuve ir t.t
      8. +
      9. Kontekstinis meniu: eilė mygtukų kurie gali būti naudojami paleisti + tam tikroms operacijoms pasirinktam objektui. Galimi pasirinkimai dinamiškai keičiasi + priklausomai nuo to, koks objektas pasirinktas.
      10. +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/003.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/003.html new file mode 100644 index 0000000..7c659a5 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/003.html @@ -0,0 +1,135 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + Segtuvų valdymas +

      +

      + Segtuvų valdymas susideda iš "išsišakojančio meniu" segtuvų +

      +

      + Tai vadinama "išsišakojantis meniu" nes Jūs matote segtuvų hierarchiją atrodančią kaip + išsišakojančios šaknys. Tai naudojama kaip grafinis atvaizdavimas, kuris šiuo metu yra +

      +

      + Pagrindinės operacijos +

      +

      + Segtuvo atvėrimas +

      +

      + Kad atvertumėte segtuvą, atverti jo "vaikus" segtuvus, paspauskite pliuso ženklą + () segtuvo priekyje. Jei pliuso + ženklo nėra, tuomet segtuvas neturi po savimi kitų segtuvų. +

      +

      + Peržiūrėkite "Įkrovimas pagal užklausą" žemiau šiame puslapyje, kad geriau + suprastumėte kaip yra įkraunami segtuvai. +

      +

      + Segtuvo užvėrimas +

      +

      + Tam, kad uždarytumėte segtuvą, paslepiant po juo esančius segtuvus, paspauskite ant + minuso () ženklo priekyje. +

      +

      + Segtuvo pasirinkimas +

      +

      + Tam, kad pasirinktumėte segtuvą, paspauskite ant segtuvo pavadinimo arba ant jo ikono. + Pasirinktas segtuvas turės kitokią spalvą arba foną. +

      +

      + Išplėstinės operacijos +

      +

      + Išplėstines operacijas galima pasiekti iš "Kontekstinio + Meniu". Galimi šie pasirinkimai: +

      +

      +  

      +

      + Dėmesio: Kai kurie kontekstinio meniu mygtukai gali būti išjungti + CKFinder nustatymuose. +

      +
      +

      + Naujų segtuvų sukūrimas +

      +
      +

      + Kad sukurtumėte segtuvą segtuve, paspaukite "Naujas segtuvas" + pasirinkimą kontekstiniame meniu. Atsivers dialogas, klausiantis apie naują pavadinimą. + Įrašykite pavadinimą ir patvirtinkite tai. +

      +

      + Ne visi simboliai gali būti naudojami pavadinimuose, dėl tam tikrų apribojimų kurie yra + sistemose kuriose paleistas CKFinder. Pvz.: šie simboliai negali būti naudojami papkėse + ir failų pavadinimuose:
      \ / : + * ? " < + > |

      +
      +

      + Segtuvų pervadinimas +

      +
      +

      + Kad pervadintumėte segtuvą, paspaukite "Pervadinti" + pasirinkimą kontekstiniame meniu. Atsivers dialogas, klausiantis apie naują pervadinimą. + Įrašykite pavadinimą ir patvirtinkite tai. +

      +

      + Ne visi simboliai gali būti naudojami pavadinimuose, dėl tam tikrų apribojimų kurie yra + sistemose kuriose paleistas CKFinder. Pvz.: šie simboliai negali būti naudojami papkėse + ir failų pavadinimuose:
      \ / : + * ? " < + > |

      +

      + Dėmesio: pervadindami segtuvą, nuorodos į juos, esančios + kituose puslapiuose, bus pažeistos todėl failai buvę tame segtuve bus nepasiekiami iš + išorinių, prieš tai nustatytų nuorodų. Todėl, atsakingai naudokitės šia funkcija. +

      +
      +

      + Segtuvų ištrynimas +

      +
      +

      + Kad ištrintumėte segtuvą, paspaukite "Ištrinti" pasirinkimą kontekstiniame meniu. + Atsivers dialogas, klausiantis apie ištrynimą. Patvirtinkite ištrynimą. +

      +

      + Dėmesio: ištrynus segtuvą, nuorodos į failus, esančios + kituose puslapiuose, bus pažeistos todėl failai buvę tame segtuve bus nepasiekiami iš + išorinių, prieš tai nustatytų nuorodų. Todėl, atsakingai naudokitės šia funkcija.

      +
      +

      + Įkrovimas pagal užklausą +

      +
      +

      + Pats didžiausias skirtumas tarp CKFinder ir segtuvų išsišakojimo lyginant su tais kurie + yra operacinėse sistemose, yra tas, kad CKFinder, segtuvus įkrauna "pagal užklausą". Tai + reiškia, kad visi segtuvai paleidimo metu iškart neįkraunami, bet įkraunama maža jų dalis + kai yra atveriamas pats segtuvas. Tai yra reikalavimas pažangesnėse web programose kaip + CKFinder.

      +

      + Įkraunamų segtuvų indikatorius yea užrašas "Prašau palaukite..." kuris atsiranda atidarius + naują segtuvą: +

      +

      +  

      +

      + Įkrovimo pavadinimas iš kart išnyks, kai tik segtuvai bus įkrauti. Įkrovus segtuvus, + šis užrašas daugiau nebepasirodys. +

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/004.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/004.html new file mode 100644 index 0000000..810c9ae --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/004.html @@ -0,0 +1,101 @@ + + + + CKFinder vartotojo instrukcija + + + + + + +

      + Failų valdymas +

      +

        +

      +

        +

      +

      + Failus peržiūrėti galima dviem skirtingais būdais, priklausomai nuo CKFinder nustatymų (žiūrėti + "Nustatymus"). Žemiau yra parodyti skirtumai tarp "Miniatiūrų" +"Sąrašų"vaizdavimo tame pačiame segtuve:

      +

      + +

      +

      + +

      +

        +

      +

        +

      +

      + Tam, kad pasirinktumėte failą, padarytumėte jį "aktyviu" CKFinder'yje, tiesiog spustelėkite ant jo. + Kas kart užvedus pelytę ant failo, jis nusidažo kita spalva. + Pasirinktas failas nusidažo kita spalva, kuri dažniausiai būna mėlyna. +

      +

      + Išplėstinės operacijos +

      +

      + Išplėstinės operacijos yra pasiekiamos per "Kontekstinį meniu + ". Galimi šie pasirinkimai: +

      +

      + +

      +

      + Dėmesio: Kai kurie kontekstinio meniu mygtukai gali būti išjungti, + priklausomai nuo CKFinder nustatymų. +

      +
      +

      + Failų pasirinkimas +

      +
      +

      + Failui pasirinkti, nuspauskite mygtuką "Pasirinkti" +

      +

        +

      +

      + Failo peržiūrai naršyklėje, spustelėkite "Peržiūrėti" mygtuką. Ne visų rūšių failai + gali būti matomi naršyklėse, tačiau ši galimybė yra labai patogi paveiksliukams, tekstui + ir PDF failams. Kituose atvejuose, naršyklė paprašys Jūsų atverti failą su tam tikra programa. +

      +
      +

      +Failų atsisiuntimas

      +

      + Failui atsisiųsti, spustelėkite "Atsisiųsti mygtuką. Naršyklė paprašys Jūsų pasirinkti +vietą į kurią išsaugoti atsiųstą failą į kompiuterį.

      +

      + Failų pervadinimas +

      +
      +

      + Failui pervadinti, tiesiog nuspauskite "Pervadinti" mygtuką kontekstiniame meniu. Dialogo lentelė, + kurioje bus failo pavadinimas, atsiras, klausianti naujo pavadinimo. Tiesiog įrašykite ir + patvirtinkite. +

      +

      Ne visi simboliai gali būti naudojami pavadinimuose, dėl tam tikrų apribojimų kurie yra + sistemose kuriose paleistas CKFinder. Pvz.: šie simboliai negali būti naudojami papkėse + ir failų pavadinimuose:
      + \ / : * ? " < > |

      +

      Dėmesio: pervadindami failus, nuorodos į juos, esančios + kituose puslapiuose, bus pažeistos todėl failai buvę tame segtuve bus nepasiekiami iš + išorinių, prieš tai nustatytų nuorodų. Todėl, atsakingai naudokitės šia funkcija.

      +
      +

      + Failų ištrynimas +

      +
      +

      + Failui ištrinti, spauskite "Ištrinti" mygtuką kontekstiniame meniu. Patvirtinimo pranešimas + atsiras, tam, kad būtų patvirtinta operacija. +

      +

      Dėmesio: ištrynus failus, nuorodos į juos, esančios + kituose puslapiuose, bus pažeistos todėl failai buvę tame segtuve bus nepasiekiami iš + išorinių, prieš tai nustatytų nuorodų. Todėl, atsakingai naudokitės šia funkcija.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/005.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/005.html new file mode 100644 index 0000000..e0b6b84 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/005.html @@ -0,0 +1,35 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + Įrankių juosta +

      +

      + Įrankių juosta tai yra vieta kuri randasi CKFinder viršuje. Joje yra daugybė mygtukų + ant kurių paspaudus galima greitai paleisti tam tikras funkcijas.  + Žemiau yra pateiktas jos atvaizdas: +

      +

      + +

      +

      + Įrankių juostos mygtukai

      +

      + Žemiau yra mygtukų sąrašas, esantis standartinėje įrankių juostoje:

      +
        +
      • Įkelti: Atidaro "Įkėlimo valdymą", kuris gali būti naudojamas pridėti + naujiems failams į esamą segtuvą.
      • +
      • Atnaujinti: Perkrauną failų sąrašą esantį + failų valdyme.
      • +
      • Nustatymai: Atveria "Nustatymus", kuriuose galima susikonfigūruoti + CKFinder.
      • +
      • Pagalba: Atidario šią vartotojo instrukciją.
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/006.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/006.html new file mode 100644 index 0000000..49be16c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/006.html @@ -0,0 +1,65 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + Failų įkėlimo mygtukas +

      +

      + Įkėlimo* mygtukas, esantis įrankių juostoje, atidaro "Failų įkėlimą", + kuris skirtas naujų failų įkėlimui į segtuvą. Žemiau pateiktas šio įrankio atvaizdas:

      +

      +  

      +

      + Kad uždarytumėte failų įkėlimą, spustelėkitee "Atšaukti" mygtuką, arba spauskite "Įkelti" iš naujo + įrankių juostoje.

      +

      + * "Įkelti/Upload" tai yra techninis terminas. Tai reiškia failo perdavimą + iš savo kompiuterio į serverį.

      +

      + Įkėlimo etapai

      +
        +
      1. Pasirinkite failą iš savo kompiuterio paspausdami "Browse/Pasirinkti..." mygtuką. Tekstas + mygtuke skiriasi priklausomai nuo naršyklės, bet jis visada bus po mygtuku + "Pasirinkite, kokį failą norėtumėte įkelti"
      2. +
      3. Tada paspauskite "Įkelti pasirinktą failą" mygtuką. Atsiras pranešimas, pranešantis apie + įkeliamo failo progresą.
      4. +
      5. Palaukite kol įkėlimas pasibaigs. Tuomet failų įkėlimko skydelis iš kart užsidarys, + ir įkeltas failas bus iš kart pasirinktas Failų valdyme.
      6. +
      +

      + Įkėlimo pranešimai

      +

      + Žemiau pateikti pranešimai gali atsirasti įkeliant failus:

      +

      + Failas, su tuo pačiu pavadinimu jau egzistuoja. Įkeltas failas buvo pervadintas + į "failopavadinimas(1).plėtinys"

      +

      + Tai parodo jof failas su tokiu pačiu pavadinimu jau egzistuoja tame pačiame segtuve. + Konfliktui išvengti, prie jo pavadinimo pridedamas "(1)". +

      +

      + Neteisingas failas

      +

      + Įkeliamas failas buvo nepriimtas. +

      +

      + Dažniausia šių pranešimų priežastis yra ta, kad CKFinder buvo sukonfigūruotas + nepriimtų tokios rūšies failų, atsižvelgiant į plėtinius. Tai saugumo apribojimas. + Kita priežastis gali būti ta, kad failo apimtis yra per didelė. + Tokiu atveju, reikia pakeisti pačio serverio nustatymus, kurie leistų įkelti + didesnės apimties failus. +

      +

      Įkeliamas failas buvo atšauktas. Faile yra HTML duomenys.

      +

      Įkeliamame faile yra html duomenys. Saugumo sumetimais, įkelti galima tik tuos failus, + kurių plėtiniai yra nurodyti konfigūracijoje ir kurie neturi html plėtinio.

      + +

      + Dėl detalesnių pakeitimų prašau susisiekite su savo sistemų administratoriais.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/007.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/007.html new file mode 100644 index 0000000..d7f6ec4 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/007.html @@ -0,0 +1,30 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + Atnaujinimo mygtukas +

      +

      + Dirbant bendro naudojimo aplinkoje su CKFinder, kur daugelį failų adminstruoja + kiti vartotojai, failai gali būti pakeisti tuo pačiu metu. + Šių failų sąrašui atnaujinti, naudokite mygtuką "Atnaujinti" +

      +

      +  

      +

      + Pavyzdžiui, Jums reikia sukurti naują prekę puslapiui. + Jūs atidarote CKFinder, kad surastumėte tinkamą nuotrauką, bet kai atidarote + "Prekės" segtuvą, to paveiksliuko nerandate. Tada skambinate "Beatai" ir sakote: + "Labas Beata, prekės paveiksliuko nėra CKFinder programoje!". + Beata atsako, "Oi... luktelkit". Ji atveria CKFinder savo kompiuteryje, įkelia + paveiksliuką iš savo desktop'o ir sako jums: "Jau yra, tik atnaujinkite puslapį". + Jūs nuspaudžiate "Atnaujinti" ir viskas užveikia! Failas tampa matomas. + Štai kodėl CKFinder dar kitaip yra vadinamas kaip bendro naudojimo programa.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/008.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/008.html new file mode 100644 index 0000000..1c91088 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/008.html @@ -0,0 +1,67 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + Nustatymų mygtukas +

      +

      "Nustatymų" mygtukas, esantis įrankių juostoje, atveria "Nustatymų +", kur galite konfigūruoti CKFinder. Štai pavyzdys:

      +

      +

      +

      + Visi nustatymai yra automatiškai išsaugojami naudojant naršyklės "sausainėlius". Sausainėliai +

      +

      + Jei norite užverti nustatymų skydelį, tiesiog spustelėkite "Uždaryti" mygtuką, arba "Nustatymai" +

      +

      + Visi parametrai yra susiję su Failų skydeliu. + Jie yra naudojami informacijos vaizdavimui skydelyje kontroliuoti. Failų valdymo skydelis +

      +

        +

      +

      +Failų Skydelyje:

      +
        +
      • "Miniatiūrų" režimas kiekvieną failą rodys kaip "dėžutę". Paveiksliukams, + bus rodomas sumažintas paveiksliukas (vadinama miniatiūra) kuri bus rodoma dėžutėje. + Kitiems failams, vietoj to bus rodomas ikonas.
      • +
      +
        +
      • "Sąrašo" režimas atvaizduos visus failus kaip sąrašą, vieną po kito. + Šiame režime nebus galima matyti miniatiūrų.
      • +
      +

      + Rodymas

      +

      + Nustato informacijos kiekį failų skydelyje. Štai pateiktas pavyzdys nuo minimalaus + galimų pasirinkimų iki maksimalaus: +

      +

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

      +

      + Rūšiavimas

      +

      + Nustato, kokia tvarka yra rūšiuojami failai. Rūšiavimas gali būti nustatomas pagal + abėcėlę, failo pavadinimą, datą pagal failų naujumą, arba netgi pagal failo apimtį. +

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/009.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/009.html new file mode 100644 index 0000000..5ffef50 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/009.html @@ -0,0 +1,16 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + Pagalbos mygtukas +

      +

      + Atveria "Vartotojo instrukciją" naujame lange.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/010.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/010.html new file mode 100644 index 0000000..d44a062 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/010.html @@ -0,0 +1,30 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + Statuso būsena +

      +

      + "Statuso būsena" tai yra nedidelė vieta naršyklėje, kuri yra naudojama informacijai + atvaizduoti. Tai gali būti failo apimtis, jų kiekis segtuve ir t.t Ją galima pamatyti CKFinder + vartotojo sąsajos apačioje. +

      +

      + Jeigu failas yra pasirinktas CKFinder'yje, statuso būsena parodys + detalią informaciją apie failą, įskaitant failo pavadinimą, apimtį ir paskutinio atnaujinimo + datą. Pvz:

      +

      +  

      +

      + Jeigu nepasirinktas joks failas, bus rodomas visų failų kiekis + esančiame segtuve. Pavyzdžiui:

      +

      +  

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/011.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/011.html new file mode 100644 index 0000000..aae96b0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/011.html @@ -0,0 +1,28 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + Tesinės nuostatos +

      +

      + CKFinder, įskaitant šią dokumentaciją, yra saugoma įstatymų © 2007-2013 CKSource - Frederico Knabben. All rights + reserved. Prašau įsitikinti jos supratote CKFinder + Licenciją. +

      +

      + Ikonai, naudojami įrankių juostoje ir kontekstiniai meniu yra sukurti Mark James. + Pažiūrėkite žemiau pateiktą nuorodą dėl detalesnės informacijos:
      + http://www.famfamfam.com/lab/icons/silk/

      +

      + Prekiniai ženklai +

      +

      + CKFinder, the CKFinder Logo, CKSource, CKEditor and FCKeditor yra CKSource prekiniai ženklai - Frederico Knabben.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/012.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/012.html new file mode 100644 index 0000000..230b312 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/012.html @@ -0,0 +1,44 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + Kontekstinis meniu +

      +

      + Kontekstinis meniu tai yra eilė mygtukų (vadinamų "meniu") kurie gali paleisti + tam tikras užduotis ar operacijas. Galimi pasirinkimas keičiasi dinamiškai, prikalusomai + nuoto, koks objektas buvo nuspaustas.

      +

      + Galimi meniu

      +

      + Žemiau yra meniu, kuriuos atrasite dirbant su standartine CKFinder + instaliacija.

      +

      + Segtuvo kontekstinis meniu

      +

      + Jis atsiranda, kai segtuve paspaudžiate Segtuvų skydelyje + dešiniu pelės klavišu:

      +

      +  

      +

      + Failo kontekstinis meniu

      +

      + Jis atsiranda, kai nuspaudžiate failą Failų skydelyje + dešiniu pelės klavišu:

      +

      +  

      +

      + Tuščios vietos kontekstinis meniu

      +

      + Jis atsiranda, kai nuspaudžiate Failų skydelyje, bet failo + išorėje (fone) pelės dešiniu klavišu:

      +

      +

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/013.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/013.html new file mode 100644 index 0000000..22d2be7 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/013.html @@ -0,0 +1,36 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      + Suderinamumo ir sistemos reikalavimai +

      +

      + CKFinder yra "puslapių aplikacija". Tai reiškia, kad ji skirta veikti interneto naršyklėse, + kas yra labai patogu naudoti iš bet kurio kompiuterio.

      +

      + Šiuo metu, tam tinka šios interneto naršyklės:

      +
        +
      • Internet Explorer 6.0+
      • +
      • Firefox 2.0+
      • +
      • Safari 3+
      • +
      • Google Chrome
      • +
      • Opera 9.5+
      • +
      • Camino 1.0+
      • +
      +

      + Kai kurios galimybės yra priklausomos nuo naršyklės nustatymų. Standartiškai, jos turėtų iš + kart veikti su CKFinder, bet jei vis tiek turite bėdų su Kontekstiniu + Meniu arba Jūsų Nustatymai nėra išsaugoti, įsitikinkite, kad + naršyklė "leidžia naudoti skriptus kontekstiniuose meniu" ir + "palaiko sausainėlius".

      +

      + Dėl nustatymų teiraukitės pas sistemų administratorių. +

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/header.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/header.html new file mode 100644 index 0000000..54d4407 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/header.html @@ -0,0 +1,33 @@ + + + + CKFinder vartotojo instrukcija + + + + + + + + + +
      +

      + CKFinder vartotojo instrukcija

      +
      + Apsilankykite CKFinder tinklapyje
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/001.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/001.gif new file mode 100644 index 0000000000000000000000000000000000000000..e37216231221a2e171e32ceb77522b0721285e3f GIT binary patch literal 27737 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/002.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/002.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb22402217b32490981b080b655c534538767a5e GIT binary patch literal 67 zcmZ?wbhEHbT4g JC@;cb4FK3@53&FN literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/004.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/004.gif new file mode 100644 index 0000000000000000000000000000000000000000..77924d96ee6e07a2545421df7645ea1b31543865 GIT binary patch literal 1306 zcmdUsi$Bu|0Kk76-DJ5_e9#@8P@mJsqol{^Bcm{><8$PLIEQK;*CDbPhs`sO*=Dz; zv9fu@ddO>})+%P^aS}Tt(`IA#S<5^&VR!u*_x*hTf$!(*i|{!O`wa-x3;#veEG7uxvAA^H5$#@+S>ZMQmt0Yd9vsk24hMpd-YRV@S-izp<;_)KWOvY1YQaqDpEWi4ONF;)O3H`o!2RM9<`1%BZ=yE;sG1!8_qT-U$ zJ7wh+0Imv8AXbz9B2(_xQ1b89(e6K}uc`$snwlTBv|7*~KdEbAwlkl0brYX;Ja1yX z?C$OBV84CLdEMDRMB@&&@c*uHcgKyk<9ERc!uy~(5*$1Zz&s|WT4!c)3KkqBIVEdc z8p8_}%4H>dN23KaP{E~W`VBphvfdO^+m{8=ThvoAKb}IFLle#wt76WhOpf{U1tT$M z5YCn!0dI%JTz{LhK19?LyW#S0Sn(6YeY5_dnuLB=m`d!4J+TYVM+8Q5ZtVoP1Z#h} z4o6XN;a7W1;|CZB$M>|J)RuRIhz^$mdFsbYWjb9dkBP-7yb*fq>1F5G@h_Wv{s4Qp zsbf6qz3o4X=ASvRsFhi(Nc5@i=LZ;y>DPSN@r7Y3%w5lF^YdaF<5=Ab(scW^2_}P? zV-~TVIN3oNK45mRODP;Ypo!}24aLm&m#Sl|5l2>nc!@BPxj8x9f6DuO~O-ckbxKk~%2VcJG=QVi|r| zbp1(o##m6~{6;WF12UM+?ej~`ML`SV2+@e<_jAWAS8N8s)(24UinWe@Hn|^DylP$c zU0O7Y)6rye5rMk|0i|!wYz&plEhtbO-q?OWl<@HM{ykL!KdoK$>2QQ0(ILLX20K-3 zEhWd1;-wU1L$ma5f)|J39Cf4QDn4Zda`^Z3>9C(eZhLe$#%A-tSD;5t!{cZtUrcfg zeu$%iAPxfDp$Amtq!+{_S@jBHm4wTuUo^93HxcDAQw$Tdr`PU-*g!Dd&Goiv*0-6V zvB(h`?iJ)wt!R1oku>8(qM#%-F@bw!8ot}bb-C5hj;_*sDl3jfnmS4 lrB9L3MxB#4Pr^Fw8tz2~Oeg%f#1$qFIBv`o=z{_Ge*u&kPhM)j$~<` zXsWJk>%MR-&vb2PO0MsG@BhG{a7Zi~kI1BQ$!t2GP{m+6jaskR>~3)Ab_d$9I4mfe z%{(q(y*^N>~x*vPS?$B!WYVGs;SvZRCo2o4x95Xz)W7W2+j z7(lBgEl)3Vju3ExCxrnkg9=^Ql0pKVNHO@Vu=FI$NY?yRIGVKTgr-+#K7BIP3yMU^owqM^$ST#2gShiwIV3lxo>zaE-!Ok7rc530laS!9oD`Kx% ztYHA>iRUAu|P9%g*PabIg{(|I+l7_s2Y7Z!5{5z~xTz}M8VwOkst>D#JTub^qO zcg@+AE6b$|H*Rj-D;_F84uU!I=TqfEpH98H_3PNPYv0bjyZ7q>N`w#p9VGb?=gWUg zAA-Glj_w1 z0~}>y`bZXCTt?>Qnqf+3S7CSNSSDYP2@~3v#nE;eVuIGV=VNEec@3az5| zU!h?$8k>WHDd?EqCD|8j>8wRsrg+}AnUg;)=^LHG-RWwWs7ALOak18F>#exvs_U*N HL;wIgOuUpz literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/006.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/006.gif new file mode 100644 index 0000000000000000000000000000000000000000..dad3867499e8f2e2b2f83f47ff9bf8b1bc909b6c GIT binary patch literal 3115 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 F06WkPVch@# literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/007.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/007.gif new file mode 100644 index 0000000000000000000000000000000000000000..68603a29f3f51eaac070d14e6d4cbfe049a2e1fd GIT binary patch literal 30255 zcmWifgFCh|ky3PY2sn_D#*i+hL9A_z4kryFj&1}+O4QLI>OdMn zKtvQ&FtL7neb0aJT-Q10x}W=VA8T7HLnH4zkUi)J@c;VsX(h7UOU)@f3ki*@eTubK zy;j}1u>Hw_7koV(<&jhvedoN6t=+4!`9TjpJ|&*$-2E?&d<%2qNsNTC(XMw_c`T!g zPuL-+o=417qFs|6VoQ3iJF84(piW@azU}3H&!c3Y;A4t?Y(|6 znZ}(c9`aOC=Yc%GVb?@L6!a`|xmH@N@^~U0p-t^+O=o6%DL)V#X)m%Hcf3bgi zC`#K_b*ok(Tw7&otLtuSNLwavaox~Km$Wo|VO_<~+4CnVtUf zUYC*v{|rkvl$fd7iDl?04Nok;d&&9xhyDFa)3Yemy zS+!db>)qDy?>d8^m>d~1_m!v8Gb=9&YCPUHpZYnw8=RS+-E}c2IxIBHp>1O7p#Q=0 zv6+UOjrJi9zw71S_84yGV?NH_7=Cb}$`F>)JhwOBP9JS~_x2SzS>fUGy&pf`o{w&w zN+1`P@mAi9`n_)NA9T8?{`Z_wp)6hy_%g}J0 z`HTLav|W4M$YGmL=q$m?x<>&F*oQykx zMSU9eHgn~lDzQl%Ch~-Cy$BGkT4W@N(oR2E!bC4WiDS(Jk>KkO6%5v-Xer{#XV5zJ zK2d zOyO$MccXy0xJ&GHIgQkv2y(cHycO;WvZl7eqU)V2)BWM{n(Vb?3HS0WnC^zVF9ZZx zWf+R#Sxn{i(U<&(w}jVnguu4GOhiG~a{Q$o8j-R5VNX(C(JW|{uAbb@jL_`~Pg z%a^#SbhLiK>=$9E(%k8pf$y#J@(jhCy1{P?rZFoE)p@)RUH$Tx;;|L^mj(+Cq?xCy zs+ws^TGSK=q*p7mls)(HWnx2PdBEFuZ|nVOLL~~OHu^6n_;W_N2Dj@CViz|ElMTW94MT|kUbwtU}w!u4kGJ=pz*4_X6l#Xdpto57rd zM+F%tD(@Af2e<7cQv+V|yi-s?cItLjbnEj_Jv`JZC# z7n{2H=kGpNdI8T!U2^Fz;g}A%HbiQdi|sq)WFm$&SAQ{IgFcXvmpMa^m|pC$Rp0R zn8$-Ijt@A!iBB!%Fzd(i9_#PFDZ1cC*eH(s`136*MeEmARpI$x@9Jt>e!Xw%d}Iu3 z9nt!|(>{0p_lK^xEx$kZ{`mO&6C0uZXLnHi!k@iSmFt)JCk#IQ`NFZ*{`+;>?ZV%0 z^8t7Met#MF>Fe`{(Q21@7Pdw|BVz{rT~U z%LULZ0Aa%hOYTyU_AIdYC>w6POT%Qcpei;wyLFxtnTu$zcOmm{rh`h`k% z8F>409=Fkcv7X%|LS{KSz-B;laW`4gH-|rNbU^mkZVC}yf#Ig$E#3?6rP|n62o;W+ zE9mZ}kuv3lzjgB2d+epVPgIC?jt*%h>}8yKnJn06Gpt*(ml@bzfvt5L((BpF3P18% za&K1Ix?^B0xN(;r=dAL})f)HR$6cRIC_dhcf0 zA7w)wl*9LksM5SaW#h5>XEAnnOScc#9)68~cG39mt?#{W^}iT##}Yojxc=WC71_1= zqZfImGeIVJlf8P*VIjRM@USg$VYNv;=k^NLOBJgZW5ZdIE(wC)0>uubKVqhTO&2$* z7eCoBMR0DbF7d_N_l-^!%YUxcxAbv{O0U25+2y+7Az@K13M5=)RT>5iiNOg}O^y5Y z;$2ju2~!s-=sK9zN^>=pOR{P5k;z4>AIu&{^Hb@VGl5B-UJ)Q|i*LBU1UFUI3@^>H(bIcj@;2PLra&f$v}}&j z7P$|=m}a;M9YBrb4Q!4!@DckKXBUCS#?xVLbEb25xQ^@6U3|?VRfKt1>kKcOj}gB7 z9>x!Vkk{T2&j_&H9;y{Wcz63L4ix%;vs+v2Lv=aulV#pa3N#NEhPf2xsYt~<7pXEEA3RfuT zL9n+e4=MCBq|UzS50=_kuhR(YPSIC<+6P9CpPb0)s=dkA?*WrqBpQBu$V!D?@w)j+ z!s}4u>E$r`Q?(>8ey)!nZXHwk0DxSY<@I=@Mw_#P$}4vCq%3~~*;CvGe$7C?5FsL8 zCA|l)8V=%HcG6C(ZR)(x9ZI=xdfoEoBKCOv5d4b_Z5r@`M~wWa+1jxHT0L#gNzs`RR?9Eklf_QB0%l{yQh zn!o2`%~{xWjP=7GVHc385FsWzkq!IEpdAKDa;O%fzu2FWAN+=@u=<2*_-N@F5U?K0 z6e0=GqF-ERO1GM-r%Ss@B!1r*=b9J=ez@$@+*0r;f&VV`Q0P3r0k*5`P`Hbz3EdUb z$J^mfyj^Mk211k*F78qgu-5sIgG$B!g!MYA{=r`0^VwzRh+o~H&1D^{F9&Yo|)HZ&9{*cTTW`I!M*xprWoLS%TJt$J|@|WLb zvAw*ekaV|R9_$^u@+lg0JZdW4xeHKAcm&gC-Uq_9fGH!^<$P5eiK~Y4W=)#a&oRF&|_>gO;9|byA1Gr)06Xy^n zz=aR7;N^m_G`Fxc>kBGu)D=@kiHHzTq3?a?y^n}c0YLdAbj2LJg#sU+-Bs#4{=!#X|Q0kOTli zAo5g^z_+L%G4~8hB9Gf@s3kK53()xxAi4bng+ThuW_->ZA}3Y#P8?XBgkrhD%0?2o zV&V1T3?w4F>1~27HbK-a0$61z#Dj-+c`;OmBQ`027b=AVq)0ILy5p{cAo7rB7Yv#U zxQ^yW`=omPiRXX*Zwgttc>7x0_m*Dpg+;`he>Wbt8si z<6&L%D7V%OB`T=TJxpyYL4^tB7)G#a=|l7J>$73`WQTF!Z6sK8VFYH5ahwYMRYQ;RK>k$z_ck&uORH@~$y4D$BWW8%{&E}i;4Vy{g3619-DN?HS?I`G^tF*tOLnds z3%E^!KAR1_=bopG1Z*+9MN|+OfXuGyb;Vt5jSI_G$tQCS&W-OUB$1G;+I%u_>Emo7 z6W}{5!DyVz0!R@ODi@Bog4;;wAq;OAC$(jjr-TYMBcb7#2t5|6%Pqpuu#kgCuLI@l zK+&YHC5!07aRa{ZlSg1sY0v9tv98bK&T3lwSjB=ulPbcJTzS%pi_*x3;x}%ox)*bJ z?Nv(Lh5``;etAlX9)jO9hTNzMzR6bHr{1i^pbPNev#Y=chaZIpJ5XVDtyF&utiK*| zmjx?hp$CIXTk8;h#0;hI3_mK$97XTLX70>F+E&wB3=v1X`P$gwKzQ6v8bjbM{e)^+ zUzH=-1F24g6pAO2*%v;d_+Tox8@LF*eiF~hd>+Xi_O}~Ug5fJtL$+|>dN^np4!u0j zI)UdO0?LK#$~S#2f8>|vh8Jyf$~#0Wypvoi$Ygzve^Y*P_z*MfP|U^o6s;0ZE9FXA zWp@M-nv9Kf7e!9`RXV0X^{kPm382OWXjvCuXBupSlUA`0b70?Gk%U#J!i0Bk8sp;J zcuM=;RbPEu?c-TPtBvb-jo03y$Hm39*zgbt2xCGmfeKPg1%X3qcWbiN>cX-+OA6-z zbzBmEK;7@zL}X{(Y*F|+iBaeluQ(s?V_VOC$1};QZ(#$ER(Zhys`)MBv?{tR0JvsU z_TAj36?WwY#&v{y2;B&BJuBLHFWrU3^v!%1*)K{qzgc`TDFywrv8b5Lgr&&BJnl4#8^EG~_m3z;c^wjFG}!cMPZrVmJT&QeiV2#}td5VSS@f^Dn&MaK2o);lAu zx)k7)2YPv-j9XKeSrXn)ZTt3}kxxQ$u)MxZ=oKo6zz!FkL#*QkululvHhx29>h0l53Wyp;BY~F2MtED5^B<>~2YAe5?%%m7oDG;Ko<;7Nzse z!xAXaC!29&@PAt!{=+j&u4`cUXSx6~=;Hr|E9RTw!)ANbv~} zk3*x`fH?0^{Hnr$`Vh>|@<*!I#O}RA8ADBLz1}d_&ij#C%1xBs6lcrfli$vvJ=#|a z$@Kj|qH;8EE4aB8Ve`$?8Fs^=AjmS-XWH&beu`>ASFHRhkQ0syB2BsyLC&5z0dv9F z(}<4nvd5HazQEEO(qqq1w45ed6^p$fMo+v6I*A#>AT#Q@^XUK7c?Z)%)J{Wx8^d~5 zU$kJuKE*N$LKs?&;Qh_;((TNh@6dQ)0vVT8wS8V=wCs~BTw@nyje*B!jBOewRUyz; zrBC~bPr+<}O+|24pXPIbRkRb^4LGOd>4lq%&VS}L@$4_mlf_B#VtK~>as9UAVz)ha zGKTzw$15_{Eq-VotnYh?u1@CBTh7s#mUtTkFV3>J(*9AH9STW<=Q@&D76 z?jzT}P|ovZRvQ!9R;zI*TSMCom!1@aDuv&@g< z|78LTa*~BUNr3gM)~4`W;QN(jDbu!2LczK0+c!Kfka4}=lM(&WGXtTFk(c2nEFd!+ zdYi?kxmrETgl@W{f8fwVBp!#huUfEByh*6C*Rx>W1}Q{_%A<%HHSyliOx5oV69Q8 zLzu+^CJ;ed^lKccoDY^*hW@n%*{nVW@1UYu@4Pi$MrDEyGN&Znp$}!^8n84az6@sX z_}|u!zpXFt1il1oussr5qKI(wzYk7yEtduWdb`l>%MpL98s_*wn=&(3j0V~QW?JVU zw^#^o4%kZu?#+TUkX|kC-(KZ5XK%;PN@2p8q;PgCNbBb6wFW2uoRn;dvyDTbx5Tx$ z(_XpZk)u+~tczsZHol}vu&V#I{wQm0`EqpH@Dyr)rA+h(w3_|N{??}<044fkOV@tl06O6+ z34C-F;>|?d!EJd1;KUXl_UeU4EYxq0+ev3xfgi@HOKMlx z8m(MS7VkJv3ar_Vlp2lK_;P63uE#Wle~mfoBdltVngDj*m!vCaH8W`(Z+i#tGT5 z#Tw%LYNJD&orc>Z1~dplI1yDT<`4Ik z;mR)(doxLzFlo8)2Sz(*aGrWzoiPji^9E0EOCDEscJF3D(DS5cpDz+LtvlSDQ zhXTe$OcL@`zf{>5sGM**azpK$;?WGP(-YgpP8CR1XRAM4?qKSPErn{F%#^}VZz6wH zQbF>sch(3KLLVdZsMa`MX?^SN6NO6BdxgP*b0ziIa#Fu-k@EykqX=?vj8t85)V}`u ziI*&&RMXX63g3Y>rdp<|9VnTmKiG{K$S<3xB(^5dtBTYb0x9M_ErYsGq>Xn18Jc2G zcJ4gVZ?xx`n#jw%Gi)QZLx*W$pJoi}Mr9s6th9vIowR|Bv`)L2XC>M{166Qhxcs*? zh0UsPjLzlM!0OIr$*^g=*Y>&rB|$sh&$D+^b?rpSM|L-fHpRcANt6O z_O3EAUOryKJ6*7LIrM&2(R!FQd;W>$zWhDM(fv%cqoMUZ({@<=JzA%MQsWE9$Hvd@ zZRC-Kzf!^chD44%+$5zqO4%bI=T^}7ihNLA*BdcAwo&nvor9XAR|hvV)k5Tw2x>^^ zxKQgx;z^&hYHaI^L>g;%&|F~lvo7(Uk_w#ZONDwN&2OUfXtXn5qG!yBKB6R+q|Y0z z{$4SmQ2p7fl8n{^(KSqgT-`sdqjhPo7CXF5Es`@F{*3S}m$A z#(orJw6`&FcVy=)Ju%PWH4yM6%2iVsXUI~Vf*=L8bnWVhCFyXu``Sj$?eF;Du8u<% zP%axI7@P<-C|7q4pw|+-&02h)-&CS+P%lODt3!jqn<@b5$Q3GJ(YFJoaJ|gPJ)9s<*H?VK6i5OH2|zn0jAeS{HRZ^_(hh3x&$5y&!&s z1dkmu)%*%!B#Z(m+ak2vQ`#}EAcnVU49QmIuJZWd6Tx=41F-29UNjw}8NGGF^bD zCDK8NE$qm&LboxL*x@kaXb`%9LqRpR`^ab~i}z+m@}9vB2K_e(`aBuxoabC6e`%7} z>LV)0K$GuyTtQkXsMcwf#AoPvqfM}#j;xq|a*m)+_2N*WE-Z$MoUjS=e27>@DquiS z<$hCKB3$I!?{I76}txG!SjjARLS)6vh=nMnUwJv*z;4DlJpde% zH|K=u;hBFEf;?MgF34&F$&IpGh~sc!@pm%|PQyPGh4=~N9>`GU8r zQu-iv3wp;$IV5MJ%A6`_lY-yW;q#g=$NX*`;%Oj2l1Al38<@;169cB5u_RvHG)+zR zvYU)AG3om|b%mpSNbz&R5EZKkiB!?XPM$&B>vvLXc9;ysdf&&gQ>ExZngtR|lwQwC zv-bsBoKqFVs&~0>?Vf$hpq6#8mOq<2&k|GSF79Q3exV@f@TK@>Cux6RSjxv#cv^w`z+dU^W6%p_mM(uR?h zy7bS1pZ^Lu8`;8sZte}sc+fO0`m(rScaazK)^$I0X4SULkh7@iJd%ELHNysFX!29r-gSWF7q24xcxKp-qA}m4N&3FXQ^ zXPmOp7;^Z9;XOFoCpwv$eB+wjCyB9b)^G5iM^zrl3p|NR10jjZdU7&~^HSI&*Dc+m zRZcO%(#OFg?k*=20AWM%=ZMjdpxB;!5kwHrYb@fe(xZeAvJ?R#Hn}|T;3W&+eqI$7 z#FtHuzf%akvV+sy~DgW z)$lOcdj_edV3mXSuDA9w7Yp<=w112h&n`ixrBZexTP6=vUr51UB!Y)d9yx0M(3{w= zctm8e(qt)BW6U%RWAtS`TU-Go(GeV(>}CsA;&~+g3x%2pNDnqNd^2-hXh_g z_EXCpS<<*)o!oMbiyk061}sXTI$E$rEKJLmI-E)QsyL+EZc@{3l3E}H9-n5%qMGg2 zsz}w{fk?9t(=q6S&8bN;ji`&4P(qo>YPjaC_`Z(RKC0J2$H)US>|%RP-#0nv+(7a4 zQhfv^WlF(J{>VcLu|Eczyg+1lQ_L34MJ$7oEFgT(cXKj}Z>tZQY4-N#CF)D;_Xly* zbVQOokc^j0-Ofcc#AS6c_43p2=nAWk2!@Z*Sh)x1jER9XLFbwW#vNRY55rV(&}^c| zTS4EC+VdGt7wV#`yX$A*9@q_*9&gfk(Wn`*+vZr+Q4|jrX#(3I1y0Z71355I-I%Ke z{Gi$0C=dGddysu=jXF?zVhgNL1cn32YT+o227D<8s+^ik)wQ~I_@1vtS(p?0;VzgZ zWHP0mH}|CrW=NerY%<-L7=cZuU{k`Tp)Y(87euTV6-FXUAI2DV)u>9`uobR|)QeY~ z=x105erbd7nmZAor8nX7cxVK{VsDhX=dSLpYr~MPIlXq&?`~rQUaseyF^2dURIDs? zuSUMLM}jjdtWN(`cm0d|eQSn5h%;4wS5C@&>~MeE^!p^PcUQ_H-S+;HKC}sp2H>R( z5QWW9fE1qNFcvGCQnMiwuAEBel=m)gjH@q*8A;GqLPP>Y z9-7_Y!_6mt@H{RP`lOTbBuwvN#IBWMRhH89aSP1IHzPy-K#`mW=rLS_Cg$isZ&E*_ zL%g1D#%XsiftNmLxVV+1&mPm)8&ah@oTl}N8PZSrf);h?T7UybL$0P#U50ucB%x!) za)MD9)fyJFf9?zIoB!GZ`&2$%gi43XCys*I(>Wk~c=BpARCIN4B4?~*2XeL#I$N3( zUrE#NLRd3te1Q;^^rGqa5T3Mh-)&75PZ{pYMR{Z$*dY}jO#ut5-WxxB;<#Sg<6ha! zD9Ky2hu(M-xg!tFZ2Kul_}`u3|Ij4m(ySN?+;l9TXey6G& z9Jmd+A4s)-k$0sPa(F)FA|=Ivn9>=1-*w1d2!^c-DVKvChHcRaMWepqP7j>nBE}9@ zhG2>bI0dYa-eR23sZqcSoO&(bRaK+QhW>*D(Tn59-#J_?r=1B;R*C^x2TnO!$lu4q z?Ag?U@H9*WDnplgDI6}r1c@?VJXDYeR*mfOU@Qk_55U9IZd{#76=s1VNWBJOiP=+j z*rpd7I%&t`jWT~{t+GTCAz-cr^*Hg$2}N}BNhDm5)cbeigvG6gy)M(NG3WqG!s=bi z4G-;1x%z^q(}-s6-|t<%_$qa5C8|-erJB$t6ijFyA(#q&BI1dCJt4N5DD(y*R!43f zP==Al)7sUAzzi*-^lw~}Fw9l5S_Vd#72am(632r%izl`OeqzPgpfUH|W8A~e7ma9e z(p1<(gm{sDVO0lAJrO-B#odOWw`7nc5WWi$7XuwQNQK)pC)qyBN*Iq&;JH@fsvV{9 z&wI^&Z(!`;zHu(YRGvXJuTOdNaC?pFjbTiQGH@G5zFmBB(lE&Z36I5qdK9M@_(mSM zOxqGOUr_2_QEzjtoINH|O({ zs{>Z5q!sd=kHJ;0>`bL$bWZvmheKyd$Om)r)n?2`v1<&CO@`8LHu*~9JJ@9Ugr#J2 zve4@lZp{$6zIxy@3I4$Jah(rM=O~@sRwLou#!mAIS}YVixmY=+u4*5mPM6bk`;_oXf!u$JS;g%jPUTWy-We>y6bYxu!e^qM%!DmF%tP@-s`ybW z!<#9$je!LWC;K%piOgFGm#j59XH+iyoU*QxyzWKS7s3SyVOnB!3>@eA4-!+zZ;Y`| zL=9UeLnWtlu^Rol;4~<$2MjXMkh|U_a9Z7o?M?GO4tK6oUYryan-^ac)Y;jQ<3{DW z{?_!B_oQK65fWky2ebiiMPhtBEgloZmzsiG2+$-z>YC_EqF}kvTWVVc&Vh-|c(~1c zhpH+gJR|9B>d^EUl98su+d;`rf8+7&Wtar|yzIp4iwt(FtZ@ACV{dx@7y+4n%X3+$ z(IRGgMIw`!>b%9o#kx%!qm)8j#jx`wt6Q5!LF?L}fJm+C2;~4tj;7Ijh;A#q^9F<* zZ|;`ZL;a|3%zB-mtN|Mh5Nc>Vf_6A3{Mvhnih4owMJ8&wKlZJ@selPx{K;6-0H?Q} z`In(d&DLRvEAmV^5TsfuSboOL{Z~Q>*w$!8UnXwghA60Np@0?>`2h@ftOW5NS zoQst=Kzqxe0|DW0VCeDkczW}` z<&14w%RWpoT)d|Sr2ippEXnR|^2aAW8N=9y{qzyr*JfP12OnDpi(yRK$7dg}&sZf_ z9-L9XpgphfQ%GsssJLPcz!l{kxv6@jQPnyDZSyOGpsn;*HlVg*I~yz$!h!{{V2_^d zdNp1@rRNmfP!nA7Hke(L>f%G353v2ziplB;nS%MT)X_g4RcDSGIKsnr!%g-X>RVJt zTq6Hyw(yAv(L1j7I%#6pKSM?XW0(ji79kM`L3e@GydVbdiS4!I6i^yPsqEW>e2%XiD>`>enkY3?P!*kV?n-jEHv4>HbqSra#8DGWbFnc>mZdEv`I{4kO&LNrkFX+(${IKl;^?vH{f7 z(FFwRSxk6@P|RL)G_iM-t@;{POYYGz?htf%@HwQT+;e6c;(oHJ^F7`7obnf&Wcm@g zAKTROPXGZ(6ye02v7X<`)~7sAHN!1u79dPpN7V43OA+4>0YZV-zx%90g5BVSco-=B z&B4#HrFi&cuu6qHSP{>#RJqX_|E3`Phq0)k&Vi_l0!Ot%?|iIbq^9h{M*F6p+=Hd= zZyT?F>vgfi1=zXMMt&%M*gRsA@hR6ym7lere!xhl+s}@=Zo%E35Q2YlH;$(6);^io z)^wUabum9+@%&VP@dQBXR5x}J1798Fp1^}n7qO}jW5jR%y&5a(chS5d-=gx^FA*Z> zIBrAK&6ZM26WxE~{TOk-D?!==Z%BpIrGCHm^B0;8eHGzH7fdOq0-OACl4&oM0_mcF zd)e!zS914yjy;!{n6^(EIn{C?KkDALkzzYE)r4gKRn2B&l@2@8i|PJnRjS)T@Jl-+^j=bIEd7W@>FyHBZE6=d*`zd*JYP<76z_~hDZ3aF5 zRpcF`9*H|)d}K1`jqM#>nV=Z%*5tqZwYc+bW5vK7Y*Mvs&Lx1a;-1RpZ6YZAM*QYNi-B%c9n5a;od2%%6w%ch^VWax$ZU1hw~b_s*U;X_AmGoEGmvL`rv^QRc^- zB36k~LGXPJa?i=k%t|86f^k(LO=QYYS(F4E6pjp+JFXwt#S~X)pIeUKgei&e*``5k zRjtT6iCWYyWGa7zhu_R0&%Fq!t92`jDB(*UNFhs9RokhNMC;S}#}q3Qb(Nymtp$`Q zx`>>+dau*YCcFbuxh|(gT#L?S8qF3dsVWjAQrFY4jL5L7v1UpZFAruK(~&e&!IX9} zsoPgplD%ZTzea$e{m6d~_`1fNhiDt_?dHu=BR5;A$9kkp!)o77n&C^(8<~sc=?(sV zpW6%o(XI0LXBz4xZBQu+qsCyt{hunUO+Yr0MN`ycu7YJ{s&1o(vZH~!%4EZG+o%3H zLUNO_^9>0>$(=PI+aPsEoqim7D9`yJ)(yTG80Cmt>bbhCbN(tx(MK)R>|dF7O46*J?|!rr4+8VvX-Cy;HeLB13twlujVQ(9PXC z7Ppn2)PT6sJuzm|&>_MqFJ$PltG&*IC68p(gdhyWr=H4z*R02T*{hbVL*LigsywW@ z{OqT5(B3F3-kSkBF;- z9*fY;0u@+oMUvXsgcJR-i6X~V0?S-KryEueF4C3Q;?QOJ?qN2Iva2x>;G_Uok70=y z><=cB`;l{_3b~=Wx9`ckFcbX8BWR$M}>U+2^eoNV?&w92|T|@h%&n$t#e)kW--V2zt%bUr$Qt09A>UIe;R zN{=Y-vA8e&u+UcK?^C0SM68vv=MA+6!H*~98Zyxs#Ib#HIhKh*Y^c?mYgH$yxi0Wz z8zZX3rjgd6lQM-bD|n`L>a}jgI}7~bpwOfIXr= zeeR!eWSQ)rV5}u`1(Vzge@_s>s}3?2bwmJ)@~?Bk0&Q7=Dj1riqKzB0j6u=SA}o022}p#{L}~eAqj+x z?sl4`%!D_;?Z4la%^D>5pP@UT;IpT7QFEhu(t#ng2!Cml@~${kzwPIXZ+AzE&14$* zPGEyHIu1^$5csdo)1XhmKcSF1>WwUs6k9ox&A#YsX2B6p<-~-x@g41uhEwEAf2?!U z+?z!eNH*%<3LpRBV_}lq{b;VFl;+t!M)8&<{9mLkw$(>^^sX1TopLt`)1lZb?g=d1 zRaS=@-#e0DoQzCs1<$yY^DtNQoCusb_kUSl>(6VM)H=tBAO-XyskSf=R4Ilh3TQHG zWm^bhu-;_;$Cu`fo6m`j(20m5<~fuxljJPjkN8S}VgF!y*Ycez%$MygXZE4t`D?|^gJ<3X*Ck<_*tH`cVa$}e_>$-7iJ#O^)0@7o*(K+aw}I0 zbC}rKaJmh@{Z%6dIPrmFex!T6-nqYl{O~ z0zFuCW@`gx7(EVtBM|CUw_VaBNIM@rAoknFTquW2gcIe5@K^9~p(@i17Z=A;4{t2* z#1yyzs)zRXcq^Sl>+V;qOmW-Vao=L6VpC$RT+`Zg)0qH)g@aMH*m8Ape(IyHy8V@! z$*Ltw`nOmDS6Jr+FaKUT7V`!rc0vut-p)NqBNHu7FpMX1y>UvE5AzHc>ZXsP0jM_C9u$rk8B_Xj!_0d zjE#tKxE##Us>g@A0BURc9gqMhl=r zZJ+{!8^-F5QZPK{kYfkBUiND_50-5qLHV+j8{;=B!3KUdeBo7$ZZMwLNGiQ|Xv%cG zd_6w?pi_ftw%z&CWU8!oxw+qpf5_<~l3*`NM-8&%(! zCR(2XKe=h*Fp@QJ{OEgTDv!KsRq~&J`2BYj`ukLo2~H5NhZnd(Z-7dMT&QBI76sU%{x#IfF0^d0NlM(;d|gwv>MQNF zH&JCL*QB{mlAX-HWq(u@g!V0as^^y8D&io=9}`#>v0UsFny$_ocz@9&#&_IlP?q%c zjPgvG`RL;KE$L|uQOi26^NeE2N7_`i;8_Sq{G?zXphvypLVQof^`ykV1b2;CbxsTT2J1eQPoDAQtf85d5Lc3hW&2 z^|u)`rN7X-U!|4UIW!zHpL^h|snBIBrzVz@bP|t9mgZ3!k6uohsAVjYs zB!NY2UJ(E;sF7CQI7D6mQm++xYZGj==joE4B@I&PM8^TWiGGcFstBf^ha&9MWu}!% zgw~Nk9^%_?$&|L`sYhdRCQdF3E?^rIpN*qEjj}FYTuX6C4J~qGk&_ zc4Nf@$m-XI&T>jyWN0xPHRSV+wgzruH@ZKa*-z2j@;TPRJ_c4aaH+v#>2gpr11h&4 zJW4!ZLQ}SYz=$-x4XPfL2z*V{jW^o>`lavPnS42H)yjD#>iV5|BUOJ0EtDN-CYI-S|f-y4{VW8&0R`$v>WaSy} zO$}`SO0<7E(o||5d>BeQ0yX8Y@)zOsi?9+yB(1!5&bqj}VigCvlel8M;V`#TASvno zV^`?pQYmHo=;zQH{3}$p=)Yhn(~grC8_m-ZT1S z(9h84dU8oy-;&RcU3Uz6DVG%BvGP`eYz4Z==cAkJB*8R?f-Cd`F_O&hdn=9jvvg0s z3g^ldDuiKIC)~o;CT)RtK*>ilCizG+7VazafPLQD(cnSfkIjvc4-m1nI>4lf zG6X>zzD62v9h04~pz15X7zM@hKj+agA~_SxAOR)_J;*gH(L(UK*UGiIq&bL}X6MO| zQ4@mS+{D<$up75MMuhb$qoxA{{+&EErP<8`Q(?CcDF@dF+f?Y+fdrW!9r&)S&DCu> z=!oW4*Sr?eqt4d*KxGCK3kJnk94efG51k>}6#<6r{XE3YhP&^R{rqw5Gdy){;qT($ zmkoOE=Eqp(XXC**kzwN?a~B*6hfnOfe@j54UZ|CrshSs807wyw1ycJCaLgh4)4pBV zN_dq{-M9HDSy24DLU=9QKX(fRJoa0$c^V?O+#Dy96uZ?(Fr=fKR0t0S@-r)H<08?(##Flr5d8>2KnI%pA%u9dV;u0p zU*S(s^-TMrQzA4E{J?=$5VooRz&=sDt3W{73_%59*mm-gEkWud) zM|hb^%ZIN2RL>VTMiQxT|CEcvs)2fLH5=i>GlQm22x3xzi6IbaKIZp>sr!iHEf0~wd@h9bU#c&5>?)GN zl{I(|y4WZ(!a;e2YwHf}cm{)pp>EAw^L<)QZ{f2?$`#3tX_+dyfZvsU5-(JuZBZ@TUETCQ+LTIpvXMemS(dgiXo~ zb^4J%c208le*d$lx;h3;g9%8KOaIkny1vSa7}QKLG-kg%(9P}O9ZNIqUJson0ijVv zuYrH+8e-gA8~VKCM2x^`H&e%NrqXy79t#PHeN$=aSbfDX$5N!%9}2QeOQx6u1xQaiM>f>b4UQnKSYSaH&SZR=wG2L2DJ zO5U-zE4&b)ySRuJg)6ZoOuj53vv0);Ls2&SoUG_2&ceFiBgNMaG@ocsts(L1`KOk0 zzgcn%Edk30xo(!`RI{&;KX%&S2A<1yUfi&=UADEJU%jnXw!1#4nwKSYE%;ikeYyB{ zRHIyda~$2J@i7X0%v=T2mAG;sd|g&@ZIZdVs-AAq1;mrYjKtl#0JwufH2Y0e9P8^w z76Oxu<|ai)A|SFXT)h`8idqMEJ#&*JZqTAsK@;s^nVsIJJS6H-%ao!3NOux!;DST` z?t!F>SSXAsDrZ?2`MZhWF$p98~cH?TzTTti& zVWaj2zW*qq_h3KlZJhe@9wa{(Cj#+24alBrs!UC(&8p4_dGDpZ9MyH&vGRA`AC{*T z-MFtwJ~t!Jv^~gnYS~+lqouu$--#?%6sO8R+LslxP=<1lObq`b>Xgb&AUBuC3mWSJ zv22VfK#skw(@`gPKsxig@Rl4&yaG60Un}Zu@aF5Ihh8*YruN%Qq}kJHOSL9HUv&O_ zWwQLHbGhAQlzVR-@ESCoWHH?}Bmo!`G#zw~KBmqbn*zWFww@fl@ti@scGt!BRQ391 z`kC1V!8JU&TDU^K}K3D2aMlMN1BLemIpRf4Z&U z+{q`7rIv+9n+|?BJ#@=+`OsDv;#O<@%olsCDAeP*VFOfc?q=^Z>?TB@Eb0bis!hiV zS^Of%$Mh9(2yRptG)x0?GIa2zqdWvL7j<7*^NhYsQ*rxzjE9!?n*#ID?3TBLn;0>j z!7!1$OA5m_$60sm_X=aero6gy?p-apeBo>BFjUwf<}$b=42FK!L*w>&P&+yM_|d+1 z*U~sDF#i~*=#n&#ykk~qGF`a;mS&0STf^rL0w`!kCw$V9ai{XqXvE4%rHJZIAhJ&H zAV+}B1V53EXyHnpLa|_kQ*=cbq1uTEA8Byv25X*WcOU2>*YzjORoC^9N;=N3A;&}4 zt1)g_2O~VR~c;mg%mNKVR^R311CAe71-o%7k zE16{p^vkDCYgsB+C5-edwTq9Ls|`-02Q>QIwCo`x3D3I>z9&T3>s_tZ?$`Q#_vWz4 zO3%#``oNX!Ayc3c#@UQ3I*)Au+ZP-)m%CRmVtG8_{b&v5^H!CE@psIaof!)K-lgd% z_O#H60H?9j4_&aX6=&~7_qzHteQ5TK_R0L{>)##S;zmO?4Env?#ZDgck`wYMRld5d z6mTOT=2Xyw$3pI5@l8S}LrXwJ@5p2TfOx6U^y9F9oY*bz=nG={KB!jvcRrV9n(Te! ze_#({CcbP8-fF%&oK;js1@hXEd48Ub{SqUgJ~Cy=3P4c43a#Gy94lq=f|LDw1@|rY zFILbmv0v_mH-jDK5m4wn|IsHE{^bMbnfjL(0Yx5(hW@eZawLus*RD`{`zrkMe?j`ai!x!a_paup8fh!No66i2m1lFU=#mK1Fyk zcH^bqgL&q2hvS!OGIKf)F9OG_2UY1sTE9uCgyo-O6Z97*=nrt(>fXKIY44ezjq9k; z_b0*NotJAb;mM9N9O&447BI0cNibh193R`Y{|pfud;URrcIcr8o;EhrGVdI>f=51^H@cf(iw&oN_A~w!B4b<~G-<6y_di5UX z7e14fQ9{L;3za*0+NT7-1C-1>1Ai8!49KA_w^sY|ZrnPG3~WkM>hs%JE1t3m#NSft z35@x9o0=uh{{-HB{@?l?n*n*=7eC&FYps_MkwH>#S}Wu#H}59cDU^-FhhtXP@1B%-_b*i<_xVr3`9J&KB4?3Kj+6IRr_<|ZcC4g-fcaO$of$fm^pT*Gg80m5O2lS z9b{ot{gM7;GwGB&AW#+w9@p2c+mV;9(LzD?@37ENT9$6;hbN&pGej>v!+f6uOE)lw z^%0?Z;(n+;Iu)`*0G`Et|Z7 zB1a>+xV%dtxZq`l1P<6=LS4yuEfk}S_8f8LAkS#52;VmVe%MZKs*F|>a_{#%HBi*t z^tvmwo<21_zAaI)15&=fj+ECR0Di?nBa-*B;2IRraPXT;5*oDW%I(JT$E)W`*eUGr zm?tf#Y!EJZ*GKYYl}7kqZYP<^<(*71XH+*~Vhya11d8+iLm8_BGy>K4s-{FT%M}u`$f#bS648dzFKr)zT!k~hMIBP}p*BrUtSHwXSGpQNJ z$gZoN8j26NR)WpEK8=NUHwk8hWj~Jp27f=^-1d7t>|A`>WgSz|UKA0KKgInCdJFE( zy(%oeHZAJUYC6*w9{s%iGdcQWyERb7>Gjgrhh@TCOM~F}m+K(8eSD`GE(vC&0r|W7 zq5@E(jf0dxRidbGQO4>iSMwmk&YxkZ{3j%U)L z0PxJ(DoIMuCkcB5t*D+BnH8{~D*9jssn@HS6PGn5wO4%brrP)7Md$ULFP&zPKzcY= z89g~h2MDWks)^3?`F!LQzWtMg?ycX=Vr%OD)%_V4q$kJ-4XSW;RcsFr^BzpDI;lE5 z?Rnyg_kyOl(1_Fy;PE#NXtRlQO@zdj%(zC1)caP!2a8?UeNMV1-~MRiM8spwd*|#g zCn4|WfJLgwsX@X4`s#`6!5(Vgl-rw|baR@j&m9Z-Jg$er;Cn9wiBT2trJ(HCblLnh z9#tnYygoQw@FJeiou2&ewCit3^>hj&=<+Ok`&J{%>vYIRLoTw$5k&7A*q{Tzb_uXZ z_~>-wMCeu2(zY_S3B`FO&*W2b|0z1l$`#H^TA?1y!^AfR=N(#DFgfnnhrjLvlB!rfR-*zulJgJI^dsNujeB&8xe>*S32VnJe4GHy*FtBD%5Wc2K8VjG1`- zoo-`$sNJLJwR3;tyWd9aWO^m6i(EEp2wUzAu9DEG1zZk!>qG&`(l$+gA@9>bTXq76 zm6#%iKtB05QAL={Cxpfe-{$w@f+uF08r@7e3jNKA;2Rffie#A zJP|d@5iniu#WKK$ zZ|`kY;H(O~kO=26!M-!tft6wA3jgf#U;+Ab%`o@3pTKFr5FN;FUWI=}u;?t%*>$w& zK(#@3tzI=$ox<~%iadbwfdc_xQ@ekCoKeV6q@d$EdEj7|GzqF}aw^?0Ri8uF@kXw+ zWDr2ZL;+b6>OBCh0+4dAk+=`!Nuu%dlldoELPY@7(hR1L^-h@~Wz!Ey?kdu#Clw?? z-Dud}6?88HTuq!BaDXkW;-)#c8UmjVmG__B3OTZKIRrgUd?njZ7aEE9ygay=DaDIq z865%&)geSEb|-Y~D1dnsk5W`aX$=0m?<}fGfhzy(lH?WhQbnD~`alc;Y1M$Jyvj1U zLIP_%%DKuxwrxxG;y>AM14AT4oCJD^sPkn04FdNZ5J;v>_5r2P95II(weK_uE2=tT z26NC!THGZG4FUc*Xb@5Z^b0tA1!R=#j0PWJPawOxhQqx9;2m1#(qV#kNZ<;3^*qmz z5%E}rlTL)@J0u|^ilKim%0NM>8rRREfPhRWYF2 zcY^pGD$X1)FbU*G&xoP%5*3HUAD|u=jt{7YtMhAI4JH&)v2#^I=V{owL7|UCcn+1% zmxCK!=9;Cw)Dz_Or3}r5aJy2thu&dKE+H@0cP{pW=WVq8`9&Hyz$7;Kpm_-${M_6Y zKg+H1Y$tPOR9Q%4#v*d8hsh8G4Cp5V421cx0}OOYsYw3JiJKI|ThC9FK0hIIVS{=D zo>KMJQoZG(3g9BA`3nnJP|v5v68MrQv7sqGLE_&pl{Cde4DgW78L?58u@zoIHm|X5 zy>V&G<#6} z8sn>$Y|Wo&IFbrryc9$&N6>_2UXRu*sRsw2>VXW4I3fju1z)GJEh8}#LjbHYM}UqO z%Et>O>L9fMZr3nq0Lkh!#i~@>J*Z#2u<>X;K(hF!$d#W02j>}3Cyve6Jfjl4lsJ*U zh=^GtVMa?ON3|j4Gmxk<^fH4t)?xAs#sOxbwA=rxYzXB`K`k;-9M06}fY@U8(*32U zdK&_`k|X zuwp-Kpt8#Sw9-cngdzvD#}K*n;b~4OR~J#Nks#7Vb-PJ(i!U@Rz2ttg$~~8-wHPnV z0ZN8f@vE~WYB9EkzXTMSz*ritoaFU{;?=!{nV?8TfxN?L5;X(%2Le9Yno324(C(sF z6CAAM3{Ho%i zBRv^hWLL4+(=f7|&{;yz;KZ*paiX{kgG3CoqmwH zt)9!W7$c)p=gAe=IDl7vOykBprA3dck<1%pXE!5_u*>^!~#dG3$}^-58nh>$zW z0Cs>?~Nkbu_WjQr-!YK>u^zWh$h%@O=G?kfx7m1xeMj{jZp0>^}hP zBk#WV27em0f-MZo1rCCKiqS z3bwUUyX6xJLT8}pL@1IdPN%|^$oZH441I#~H$6wLN=;NcQ3+E#L~m4B%9m5@#Da&$Hy^1Ug;Uae8hs0ffdfqLBJgcF9rFi)(RS2bxm+0I8HaA$+4P$tRQmAxP=>DA&@b z8%(j;8GcYn<#RkgIt*D^GVM;&IAA!vwuk+=@dX-&ny9|ZM;pX%4ip_3=%1`qZPc)C zf*855et%p+gmFs(YQ&o3Cr`uj_;@X2n9+DJ@-838`a9 ziTmIJxqh_o++UNMWwi~&uWh-GXV!rg`x?h1rCG!;u0W&!3$X}dbb5u-4t5ir6BRB2fA6tz^j^dwQ4r*BwBie>rNh#fie z`9vuz9Z;rw64Ysbh9U%+!vnUBTTS-64<3-ZBk@wAz{WgX+$oPj0*9kQiW(ydDCdfs zGt|Q4q+&{%KWz5ale}&N`O|>vB9RrZ$m3@BUsKD5ZN8uu5!1U{T=dfT&odg2r-uY) z(0w8EuU%0499lPE@$0}~=L%G;v6>Tt^(Fl$Nzv-QUEQO`X9A48XM$b$fZJNp_=sY< z0JsvBL#HzL+lGG%?+tqaZVK-U^L?HM{5QqO3~vHL05qW;2_Z58MkWAE#BGeHR||jl z6*IA!gt5~c4uPsr#6%WU@%POLPhXPiiJk@eNgjiIHK&vmsY}4{Pu|aTzgW4^gU2X^ z_tP{V_GXJ8yRy%%^{6jT_Q3XzQQSo@i_GKW$ja1ZesMlgPDd;y)Tt<-%2jTbB{Nbi zW%8!j<>W(4@#7|4b8&OMgLEm$9piT=Lr^7}{!C=pZ3Rao)DcNk=ADHJ6{$x@dw}4; z52AcWV5qpd^CGyD5iiwk8$&&W{CnxByf&@A*SX4Wme)^W<83is?WK2%+ioo zq6SM|us_zE0|PV0pMR)|Oo_h-7ODm``s<(H%FzppZLRF1m(IQw!tH7&TuyT6yG+OG}&GqMP->kyh}tiWPXVs#w<>4*hFu-F!Y_k4v45Qg<>0H06tYPi%1Ur>efQvz*jiXO_~S zeX$%Gmq$m`fTnDY>m9wf6-kJY3i_Cp0jWbM$Ee|LT6b7B*<4Jp1amUWKpBU>Yj8({ z)dLxwGXOEELK#SAT`s6ualxR|mh}5!TQH7ky9%fh%Ba zOu^B8GLC3&h#&|}L|(Fagu2iGZ@W8WcWF>BWbP?N5t+zX0&1AEjHa8>rd%NIVf#Gh^%LNmBv5?sm$XgPjMwMmA=F<v+Rodr*B)u$j1hkARqsA%nH#a40cm6P@=aU|e@JoN#qFQ6Xc7+Y{%coXT5-ty4!&iyRr7N> znnSHyxNU_^2+ct=JZ`$XvwXZH5*3~$-XL>w-b5)os~9e1$Ve5bMBh-(=msdGX(h#g z+%p*u1+GrG%O#SK>se3W&V4i;G7XTB@C~!97^s2f;z_`aW(sN1N|EHu`_y?{O_>XU!(-Xc?cMq1x>+QKV2 z^^W`d09PN~Y~z@jy#DR0!}lSVUu zij@fUxH>8qHXkOnjHYqdRDIS6xomZc)_v{G8dbGUS%Y?)eRYQ-a>4VL$2)E_TtQvo zv#rNRxVe(WhAyT$SoN7m;=1&1&gu2MjNd)%df03}4tO2&0>X0qNhN)4BG@F~?BdldzrECnZkftpob zmEB^d1^9wg)jH`fsXmr!if2W*JcnTjX*0O!;;o%8d@Q9Mpvw4Ka_3qtd$qS#03Gi3 zDscrY#lYftXTVYiGwozq=44w-X74WZUeiug>WRVPp5op2g^%r^QEa}=;8uwh21hCZ zk0li`1vQG&bmSLoZ+13M^cGoYA2brZPU)C^yGHL383NQ>X>;lImt0&bM2Bb~xBq(t0Wxbzk!I6EGBR~HemX^czTHOH zMZY&l5&uh1kxgK%zTYv^T6F#)BG(nnw=d6xFn8CKRb-nJsFn052arHw2-2!Et^V1&di=joFl{$aQF?7LcVJ{ z8xCiKDT}bsHNoR+iC{V0dZ3H|#F)x*HJ?dTBEyyFfCzq=1exnSnQM6yMtBhe7Qpl~ z5pi`;H?m_Q8!icg=9J^_yV0J+(2jD>uhh{lviV*X^3>{u1OdQjsla+P*BUkH!5qNI zJ=B^%8KZCjeaArRr$@eLB>P3cjr(|j{u+kt1oIYa+l&;S6Oy*ER~7%HbQ_qPX(0$& z4&`*fpKk=VjIrxQxQZaP*~tW`blyXWg#ps76MmyJ}dS znsYnLZOPRo*u;U7cY?|Ej5D}2V@?JZc%@vPhfj{@FY(fM0<0+Z`e@UkOpzN)Mvar9 z!weTw{ivRZObx3@sYAUM9=gQ_9*;0_sveQ z{Yx##-pTaH=Y-TI=;@>&-x2JO7l|hc z6UgW8;HNvlyL3oC8<|h$iaCMWB6D@<=XVfqT_4f-;1>S9+?1Uf(2>D4fXx!b-MkG? zy-x8>9Z~k7-6XA>O!wf!0e5aJ!tOfd?vG{bCEYY8Nu`xr>}W%$W+Na%ut+k(l_~5? zi@bJ-gs8|SCmyr97|{l#{+i%MGeUw0m7qG`)mKZb%f&<%{Z$Op{CH@gJYO#qGQVCt z@`m(4HuOdWT$huSFbTGffUmS-Qms+#9$>#ZZrwD`89JD>cJ^iiTwwix%O1c0A{aMa z!Yv->LqDb5dCE{?-JaLgJx;%A_#ffV;jq6*@YcLciH&p_5%D4rh&NAM={dsv8f%2U zaHBV_4Q`c?2U2gi=D02!Sj4sZE$vq^_j@{*(8e`6ba1xri4WGY&Ug^RP1bSY!5Pjy z!3d~5K--B3w5mhBn6ZAQ8`cqNAe9yP6-<`n9C-N4kizDm#PiTVjYsB( z0i-tZAPo;`BJvd*a40gAW?Ba)844JN-immf$$o6iG;t-P&H~(}=p|Opp}Y}LXDS54 z3HZ2F?koS~rtTAf=MxWoL)&6TyiLtiAujQgk6FYy8VjmN5dFe{u#+qkxzeI1fZ4mU zQT#H*F>@o+3^QkU=pR@$Jt*;gnb-R>+B4w*`H1V(5YUF8!DVaQ0+{>OH8W0S?Uj4Z zb@k78aneL!D$`WQ2|nwDe8qr2A!^++d;I!E(yhbBBE5t+mfM=1D+PGgGan^Qg&50$ z_C3ONPF!-|E>{2HT@|e{s9W>>U89JmtfMC4A@xA;E(veA1dPBpdBt)?j1bVGYKPj$ zW8kuAP40*~s3yNq0Obz)onU(xBHSEhN+5ZiZJs!3`NyBE-XM6*xjyIU#TaLq)uMV) z+m;ktWDlU~4iU&F1Fn?iMFCpF7!7h@o;iHzp_`H-z{?u}cdbhwn}FvuKQ_35d8r>J zh~}vWoHAfSf||rBn1Gp|lzx3`K!~v0NV~08Zs~Z__7nW| zKB%|3k$R~?n5?B+9xS;I`>QX|svD6`=XTa4e8dY*$T)26y7{9!<4?G~FjecWM3AGv5GttFuT1Bn<=D;UR6_Hl80AtFS5#qe+L(@$ zU*Knb;gpp2xSP1uz0M64{wlXqH~o*s=3n_!RRv`OX7RjQc*vo%G~L#l#4!Ai%^ie? z-Vfm#INHXSb^ivFXO4;hu06mJ_zGmiV(zkPZpf1Y0`8j24`RDw&AJMwmE@Q0AF^dJ z0!_bmLC*bru`y)J|G?$MgY=9YkJa+pZz-4go3Cx1~&e-ZSF>}J6CzCuypzp{cuYQ-mo&$6I|v_j4HWyn^`>Mj+3T4x;jSO zFNob5NsN5#1XH&mr)xwg)>y)Lrr>Zs~>+XEqFMfGW2#-ZjBuyvq zEl@HBD~XmqNx)Pw5q}?rIF4S;UK04c0DUOkWHUSRCPFA`9pADc{eU*`XSva5`L(kK z@Qf29#)fyr=~Qf&wGFpHH>;3({A@9?+(T7t$Z_Tus^J@}L(;fXnMTx9quSdlE_0iV84-spGZ5^1SDfUmgX2g}=7f8j2qn|s z`s-rJPNDtx__=L#?S|8N(MRMxeq1iM2!5D z6VSL{vyg3i%>}N4=UxJ|zG4U1qmKy=^}UuHR&i`US-z|>+-PXSlWO1W!$+<-l2rKHUNKw<|Z!TA~T%& zogB{8PUIEhFr34qaeFS0C&w@x?h!CWRVcwLFo6m=c!+5PpH&0`B?D?x2J?*pG@?Kq zp6~|}$d28BIXoyu>QvW1PLta34M)i%zjpleWu5scOM-fL6%LBtTwSSvyDw|&-2 zgi0`#i+Vuu`J0f<4*>Qu)}htz`A=8$S#w9T(Yk6b?#Ti zTl?qhr44&!ae7s0)lacKPlm$`Q+VatR-QN_G^#yrTrBUpb!6(1!@W$d{`WC+&ENe5 z>{5YXty2a9rmlU)Bo@8#zYoMT`kBJufiS>0QA`AtIMY4y@d&Sb-7Zw#Zl{*~%H^$E zFF)^_X89Az5IN7ujevpMx)W_X8Bs)Bw$1D9=D`R~LVlI5UDV()%e9iT{jI^*0B>Ta6v?}4SYdlyBD7;wdr>SlA|k$1HU`OqZjC; z`7u@NM;lYMujIA^@eko|%R6lbx@cJ2Y z7!}Hm*C3~!L=!odLeUB97QzQEt}3rZyIF4@P>n8np08@!wz5eM4$Fd#uaUD=C#+_4 zC)kju#?!u4qq)4ihI0tLgudidhw;W0286kY=RLk#7iO!{Q+(1`--!CKNH-B(+a3T2 z0J8&}aLMT#i0n6ylQl1XB)CG~`f*!p_X{2WyR+#ycEH#zyKe9K#XO+G{foIE;e1VN zw%+;hCft49D08S+m<8y%fFqT71hU3juoUxxAScE0PB$N^?90>iI#>JQN=Qxn&^U(P zfSa2-Evu~GEXxb}WvG0!<;7>-Se4S0gDb~=FkbK;CHr5{4YS3=kML3YP$bQZW;4e{ z!ed2Bir$v_C1&M$Z!B|8&Z6}i+`rSLOlusq@{hd6d@pdb6q&cve@aYIG!OQm7bXA4 z_0bfeB(I94PXq@0B|iNN5#Vw5tP2{XR=#jGl}l+-3b92H>QU?w zsB{wM=Lf?vI~GdcrG-W7z*5#BMHFgZBfg>H95KaCu#dmkLd*G9`+Lvd4jXs6>Ve4e z3^Obi*dj|0xna#D3J0B3cbJ$*$Sndyh_mRwO0s+ucd!_9-r{-`hcA~7C>>{OtW$&J z)}N*dWD$UH9M~oKpjcc>m2s~Jz6Na-w~^WGK5A>@!q~5ul~q$rvZ)D&1Kdr26|t#P zpVx$6R;3`0n6|06 zDFT6AvV#Exg75b}{NQ<4f4tfKPyd~f2DJ=J+1qGcdK}`ja>cD<{&a2p_mFYdT{q?x zd9MVyPzoyEy=S-SK}JBRzr>#VYp83(O`m0dwRn$#QQZbZTxg*2-egyJQNu%@b3vqd z&-dqDYn}##9fW+d@tio^r8SS$0`-qgeVT8sFUtDI9T>4=B%pBH@H+M_MhqhH>5wvs0N_%8NBoWiEhmiotznZea7O;ew@ zdi8b2qc4O{d7WA8a_ijtj=Z}5^V8nHk1f03FVGYeIr{>_tk-gNGznGAf%;A(u&C~; zRKm=#c}v&*$7^Z8EDHL9Ww&H!Xu9>?PtbJtP8pMWfBR`acDeiO9|4+Kf>mU(hpxTa z|H88`8F}aZEp9qCuNi$+b?#*+?k!#IVqR{?*$!oqcW=V9avvB4tj^;4?P?k_YdgNL zCyES=EH&JEbKvc#_F%F#fVaN*DhOcEZO9GSQN5Szx4;McuOYHX`@U3v(DA*vzEEg= z$%3i~>A-NLsZfi;^)k4}^ix+#XI-h(iie@L!C;=HPN3Xiu#MZNv3vI~m9Hc$>6h$| zR^@Cu?u1U+OKp!nw)|Zh_Ib(WtH{Tia^3r9vge(SO^mjbKd-&;H_+>lx4vF&tj|U* z53k&wcpJD~f6spDtV+qp;bzsmWVI>hueU#a3e;mfzZx2OMr@L8vUb1ZW!S|(ZJ(l0 zTP>}F-!E)_9Q|b()7qpK?(=K+EBHW%{xEFvbobQP=jE5%W?rs_FSIlFVs_ddJX>v* z@A%pg_#!~@U&KLFdcqfUt$r_$gZl;B{aUFPvE^^>EqMk_&%TUlV)}@ObPrwmIDKEQ z%>MJQds7K7l)u)NrXIT(`mO!5q~%fO;i$PIYTROV5dB6Z&aaZ^>Y~$=`a6ZIk+om% z{#-0PS|ld1-Cmxs+@`u$Fr2fkTKl;@EPZ2Y#>B0u-{*SNnTF55{&~Jsxuu+}kT8R~ z7TcrXyM7~Re^%i`Y~Kmrjhj!5X293t27-JyOBNCqj1S`2>AqVJ6|VlUzjo#Q6W`xe zL05nJ99)@rvxYw^{QUd-`}_L) z`uqF(`T6D1`x(C6pR z=H|@i=FR5j&gJFH<>kucnhpo)vugaaU z%AVh;n~t*2psJ#sorRp7gPNLwn3#T+mVA?wc#@KL)qq@(kadrbbdQj7kdSnbk8@#; zO8@`>A^8LV2LS&7EC2ui08#*Y000L6z@BhOEEd+vS5?`66kYsbg;fK+{ca)E|hJx_#xP(O~3jaENWlK_=- zgNtWTmrtElpP!hCWSVK5l%Adej**^^tc|T-nWk&5u0H{+mAbK(yS=KzUA3m1kF%Dm z!K#*3YsFH1YZg~Jy5*wXy)wwAUa~OY zx(obH@HMqx!LB$V)usv@eM2#p^{p%9QfF+w7!AWk3Ky8Gos}o|v16Gp)!;CVS~We^ zxU=T=3i{6M%eDt5)5*E(w}AqAFT%k*_*25Mk3EMPz1?)Ykzrnkp54}V?!C2t7gT-W zc=Fw)pBGd9;d=Jzt-pt&kcE8~Md#N?fdao`{pGRHpMQO=SD$@}{ijuOS$GCpd?nns zLs49@F_?02z+m5midFdkT2^(n@(e-sK&T-L96GhrUz>e+A$;MTvBQS>EyyB+uf14> zLNlV6pEWlM*P4(Rs?nnl6apETk~r!}UvxY4h@uZjoLIgzn9U2%i)A`Dd5%`I)D4?;U!^eT+8h z=%bKEDye;go`lk#gqkO)qT>kKQ+t7K3hG6ka+*h}qtI3nnzJbDv;WKi0G3m!P(sd*4}TypE#Bt9U0_nvt2j`86>V7JXr2w!%MS;&UVfp z?3@$Q?`$4v4GAup4jG4{0geo-s}>BRM3w{;w3i#FMF~SX1qC`xzXZX-PJG6DFQG;{ z2F=aHMG8m5Nz{W57Ke5tMa%}fP|)2>sjC|28jc#T%R27jL%LWfFgHiCn#P*A)6c*{ z@R;n$cP!a7XaTJx93>%Ji3}1%bVC@f+L8dSCY)>a!IcI9%ZMx#v*AHL008(<;J3^l zK!EPRy%YANAPpLTl!YY5Gv>?xpVof)oH?>i!weZLSO77O=TDk2hYg)Na+Ssp0kQ_r z@S#yia8X4HokGuE5laM77OeK{Sub91-vX3Nz}dHZd<+V?Y0;@LXWroYav3-<;UpI> zlu*hz+s<7sq52&L7~laV9zT3wpcLbWbr`+^1>DwvPc4@Apj@5OQXnLTc~+MEbPyoD zO$?iEX?k|xr$Lb#}e*{9xqModSYBGhg6 zfoKyY=v@}ajMo|;I(0|?m~;9;6~!iXe6oiN@+D`@a^AETT!`@WCu0XoIAsk2@KDyC zWOpI44t5bzH^GDh7MY)jP=FU+S{qXE8W9LUh97$_h6sf*?-|2Fk-`L}n~Ti7$lnG3 z_16K7NkD+mFuLFf9D7o|)IbtS4XIgH)LC#2h0o=88fxO{vq6VLAYiDDF1ll&R0q}t zVkKy0xWNouiWrk%>V3FloY2TeZ`4LBfCLZGP;TIm>)A|vb-MJ3TenPi>`3lT$3;A);0q+o#-$xdNMq`1MB?H0do zkjzcTB3s3>pQ4duz^J4?F=RScX<#j~+(}^r4mm85Q@L~i@+<)zka>Z#{}#ajS1BaC zPQeT}T*R3KJ1p_U6jyBV#TaL-@x~l??D5AS3nIhFB$sUR$tb6+^2#i??DESn$1L;A NG}mnN%_au{06SE83N8Qu literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/010.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/010.gif new file mode 100644 index 0000000000000000000000000000000000000000..0bf187eb56e642f74afedebc3dced72c183803c1 GIT binary patch literal 1602 zcmb8s`#;l*1IO{%cckSAN7@v}M#$G`wazJrM~@Q^Y-c)J4s+>plIcrPEmSIQ<}27QwZwLwDE z5Qx=keY^U>0Iq_d(hSHAfW`o54S-4yX!U?*3ACy~zyv6CfL;xPdO)WEELy;51XM;~ z*=YHP(qvJXEsJK$lG!3RTV7f$iw29zVp-AvW|LWFGB27xkr_>krca~>qs(A@VK6Ql zjSG5%OmBFhGstxMIjvqM*RQCxGL=@Q(=07(r5de7sgWww(s|trrCRz@B~_}XmzJfA zO6jZ;lqwcv3aMH;J*m8Boa+(JnP+GId@rsY5-$#lRb!%op7G}H@h0vgspjsnC0;{K zucW=Zy{c!jt*ia^-L@WHc}pjk&Y$VLP3Ljx^fpm0ce17K(yiK@=9;XGT0vIBiR^|S z*_^Bj_Qk5wRCdv+Q>BA+`n8mb?~_?k^y^8~EAiAT353gC7tcmx&kFaP5vHBOVZPf5 z`G1C5gF!YxtdPJ@r%z2F8?4lA1vEONu!vb)Qd(Bds$g?&R#u{FP+s+3wT-B6c6qnf zGW^@x+p2h-{5yBMx_JQ%`(At3{$k|d!yzPM*yC}}Zvx?yr=qd(iQk`z$IfL=P5(JF zE18?0k1YCubZqjaf)%S$GBV+MgVAKR03eVlts=Z5XeyGE*V(aHJ0j@kfBYc?Q|Q0_ z6`DF!KNNIDr1oLTP-F!H+WOJbEVp8l0^)Gn|_YtdEGBJqgcUxe3FR2 z+nWm|2X65>$ZdQyw8CG=u{q<&d#@030&xI*Zo*N#l>63m=YxC%1advpEk5(Z>Yg9_ z^6K@4!EYVD?ToA5y5HQpp56Vl-cxdjx!2hT&veS2njL)edaQ5%v*u=ER6YM!Slt&b zgc?S#WS%7Hzi;|D;DJp@_FAJ?oUh8Ojw9iaGbd>kp#wIgbY$V-)PhEv}amZVS;Tq#pIs|eEf)hF>$_rByrxOI7OlD0;_Ax7NzuqA!@#tq@; z30Cr>HT5s#k6tmSa=tpT-@`i=pe1|nxDg~Rio>RIt2J8+&?N^uVp$jVUPY$Vv2#0W zE`HhatJvj$aV}yj&faUp<=V<0!V`Hm2@M=LBH+k5x?*3iEZ~2lgr}66dbQa#cSIROu-J{x|EVlZsgAP2?2UGzdEe3 zL7YBQZh-0N-J|MKp%V@L-jRyeZ$R9p1+8nz&tuNu;h38Xu8rg~rHA`hsWyBoMUtcQ zWyUw3J?(s_b6hZ3ti6!PqwU-?GJJc<1lP~b?VUW)F%ZxgFd8oMs>rx` z&FB#N#0hs273hZTrU){@z=>#ic~#{R+))B@ZFelbt+h}v)GS&)8IlE^PxX6M1O0iy z_SWazN>;{C2e)zUww(`rB~`+}tOuw=)MIqj^yXI&p_stXC+_kPPX8^izqR?}T6bC5 zf%Sz-%U@jWQ_Qzm)A0FWsCu&7`WGks_A@KQLH@P-An6`69|8&a8+{5lvj6}9 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/011.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/011.gif new file mode 100644 index 0000000000000000000000000000000000000000..c65308b77216231a2dc2a0699a1713304629dbc9 GIT binary patch literal 1521 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 B5QzW) literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/013.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/013.gif new file mode 100644 index 0000000000000000000000000000000000000000..56be20a266825970c3b85adc3ed858def90c0059 GIT binary patch literal 8244 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 m_GYLwDh~@^``&zS7PF1OPj1xd(Ru literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/014.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/014.gif new file mode 100644 index 0000000000000000000000000000000000000000..39aa1bbb0767cd755ffa756f117d252d49c77350 GIT binary patch literal 3005 zcmV;u3qtfqNk%w1VQ>I&0J8u9NOhPfOlWD7w2-#drpe?~gsYIQus>;weWu7~i=a1L zc36IxdY!Q*J4Mse)BpefA^8LV00000EC2ui0B`_s000F4(8)=wy*TU5yT?x`j$~<` zXsWJkOG<7m&vgAdcCPO=%>Tfk$R{isXT+m&c}g;$Oeb_&lv1xeD|Xw%albh&c&rkW z&m}W@{ZO;d?)Nw@|I+JQX8=$TAO;8m3IPEMhK2wD2M2rwiH!w)2m}NJlz@N?0tE|- zkDs3flLUbR3iLTn)4ArQs;;E{xu%@)Ov#Gh-MUhvQ6)JuolA!>9VPPWm6t_|stjcEdA4y{ zweaL61)zYD$UoQUvbsxCFSb4jJkCP=va44B8Y|m0+>=;PYvdZEeXMJ+QP*zFa-~5A9i`^2m%e@2m_t^2^&a^ zfJ)!_HOFEIXysPAtj7 zbI2lne90Xnei)-b0|1QD>8{aYn=L$twi!x6tf*4gWAR#I&mwA7mhHOsE`v*foB~%0 zNHvfDrvpomo%V z?btK|)GyOcSCShxvshG;f3u1p?8*zx1h&P_poUsZV~6^3etm@_bH>*AsVUC2D3X;! zJ3|Rg(UFw24TT`i7uqZeg`(I0-@G8lbjC9mh}S`s5z>GH>tQAGn%zcIQZxzCC}nM$ z51Q>OGYyXM9}I}(M*@Wof(#+Sq%OgRJpvDdbr6S)b616VT3E;)=JpQB54ePkQNfIK2QA5ruW=4xc zD&{P~F(ZG}xJWhvk0`^EktOTMN@M_ue{t~~iZEoQpZu|K1n5v>7*5Ljp&Qw^dA}i&2Np9wC z8xrJ-cC0iF3FI>WF=U#+GyN$|ls(0P6v~omeE3e`fsdgK4Zxo6fhez0XigP)CNDKA zo0FAupspcFjdsd1VVX{!9^_8Fm{Uo@tS6cVum!^^kksi^qKNie2QM|W0J5kMeuL2# zQ9F3jlm3Tqbfjcuyg`kf#08y{u;?@Q6V;-i4rrCoQJ7$nkwrnKVut!&R~ul=t_%~0 z%cR=VtQ|@N)$r2MZa4Vi$+t zgO6a#C`!&$B|X_l1Z>M|UREBW5HHOIYh7_PZDsd8BH=|)pvkmh^ zU{$5(fOXNHis>l=c(xd@`b{u`X}m!nS~xD(aw;HDht}C-r5kU0N{JAF4-cz!#drLx zf5-a78fKBC|9$dR5($U}pwj`o`PM`Ez&ut|;~;~`VR^$W=Hbaxe2O42pTnGtsC}}C ze?UP00@4cSO0YI@*bAmR*`B^6&`;CAc>kV;}= z-eCX8UGD#S#g39>_pVUP>J9F~eX;P8-@-a(TF080&j#^3B}Ga8E#P$Qt^@+r(q&># z4&l0ZCEXbQTw(f8n>!>PVZIVw58^Pw2Y_oPhQh&fA!K$7$YThc09|07+}6cL@Oe}J zj)+KE%ohIxY9Yoa5;iZU79_1$h4hmfowva)4`{WZu|_uivDm^yub9G2k@S-WkQ)O@ zMMhNJEGlUOwQ*T#Y4J+3du`R$cT5I)Hu03QdvJr)PPEzyoUlY#2Y3lS9yfV~i2L5x z?yO$2#{tq0S@<2O=#HBB*b@jEf@~^rVeKl`wFyHI!^Bgo<~8>x`A8RoD9Y_>2hYu| zb`6J5&`^1W7_d5cp#JxKUxo!IE2<XR z@XL-=?Nk>r1{2@Yaq;Ct+qAJ9zwJSSF2l%j8!2l$Npk7UrDWT&q4aPR!RTE2*3!wIYW(RbVf(r!rE3pSa3TQo{ z)Eh^_8H7_mJ&{7R(+vi(6PNdYRzy@q|UV;MHcP2~qZ z@xlt)^M5f%f3Pu22Cx82#|-=j8q)WHM%Y28WkP0RG?Y<>^%i>yzz}PQfrB_|D58Uk z1^^ut7m1P{Em3tpWrP_>JcRcVDl%TnS6;H`8fR#T#4tx~FpR`l1;BWWSYV9G2n5X7 zj9HM3(8!C@IE}w(ja=}I*w_WzxQx}bQ;<5CH%?fJS?( literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/015.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/015.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9ace9480d0b88f962936b4a5414ad33e84242cc GIT binary patch literal 3119 zcmV+~4AApONk%w1VQ>I|0J8u9L~xWUPHAbAvyZjZrOD(}gsYFOuY0A)W{RIWVSWGs z0aSdMd!Dih)BpefA^8LV00000EC2ui0B`_+000F4(8)=wy*TU5yT?x`j$~<` zXsWJkOG<7m&vgAdcCPO=%>Tfk$R{isXT+m&c}g;$Oeb_&lv1xeD|Xw%albh&c&rkW z&m}W@{ZO;d?)Nw@|I+JQX8=$T90msh2>}5KgM|Qzi3J4<01J$aegu@1fPjIGijND9 zn|ue9fdUK+2BoD3st5}L2(PZMr~uiShvUbQ$8x4*+twMrTA$F1;T#GV#E5a0-z00OMJQFe>% z06ac(H@8!%P+Pf7l82DUv_9{v& zg+P%Z-~!o=HNwdMGvR^f%y|C%7D;yj$wZn%7G3qpCx5N< z%|ENrb{YcviPfJ#0J_u(Ka~(zAc6jfC5W>+byaxTD(reIpC;CX%-8slha z76Z#vQ2m4zHgi6xXfi*#I)Wc5cJv4TtwqM=h$W}C#rP5kO&%T4zPkT_CETtpxdLAvAZWd^V@a~VHhT2eqENZpkgQy<5;mmWAc6w5bOZn>r-O0pBuOv@qDFv^>(NFh_A(vpq7lYPhM0Z`cl04!0d{TNo)oea}& z)ZmRvJ>xvgrQJcEQ}Jbei)~>4TvNs)Oalpwia^d?bE27<0_pr0nnB)dCFGa4X51fw z0FZ7qhYUkVFNsDyFN=MM0}xdXpSB^5uDc$2#o+vE*#HO}QV4Spe?Cl|b4C50A&}&| zkT!SyMAL@ix1PLR<+$Y&YT`KNtz8cOx1yUvql8&0fMxLIGzaZ! zT!q-4{1A~2Wr;w6z3^U6NU^tUJS9=GtNhdNCpK!;%H5EDTQOpZ8~fJ}zC1$6O; zCA{Ouh*7bwkcTIxaH0VYu$pId=oG7YBeVcFIIASieU7=KB)PaH$4IGf2!h^C5IG)7 z95RiHq~etN!^8MQa+0V7QeW_riW|DZFrD<|Arlr#OH4*MkF*vl3DE%E{ZKX_6v$Ni zR-z8Mu@bYa<)&09w_I+5gg)eAFQ*v*U=r^Z_z=}NOeDy#5Hd^>NTxFX#LSpf}02G;I+jORx2S1yU{f$VSyWQ2sb@B+p{z_ zqKN>jBBlJ)AVS(p09hrPCiDvfN+gb67~q}`Kqhs#)d@qi(Gs+=-9JQUi;93sfjk8g zlO}nsP446`M@8mg_9IY>kn0uvXpF3`Hmb+9gfzXvYDg=2%3YeKVs;!{D-7hs814@p z_A?Dx3?jPFOe}e#$?7}nx=SzeZc3o@%ur#Pm#DaC5QgyOBOp_mVTuEr;1G_Zz*C}tDTOA@xiLzcybWfn#)G|^V1?@X;-J>wa#j>QojeP#k{ zi><*?$B>5qQJ+&t;=i(#HjKi(BmC;Lm2PN|p^ES#=-#JSJMG6(aM7rq{FBFXW!IOg zZR%AXmkU#-NxTW<-fFlD7O@=dzubZmB~Odm>?V*-&_u9Dwzml&wlj1D`qxnr>0O>l z0)K9a-hc`AKoJ_)i_D2oK}lG>-67a^M+HRa!urH-=;c9QBM^5S>rM_AF`WfQWpa2| z(EJ({hz^kjYZh?Sq~7Nta$7{Vo>!TU_;`pmet-~5+Sp-muQ?)|t%qk@2qvzEAEzP! zK5^3xsC1+|u$X6Hw}-+nR(W@gINTP0jK}3RfXLt(@;zZ1DKks$G+I^@ltbVI5|>!G zbxh~~leM?7*5bkoL-O=m4uHzeY8?^I)_u%3;%-(mstgGuOn{-0$V8Cyw$-6UO zgEaw$*t=IUC9@Ek;mP4df>oz0u9CWr=4si+ISyBtgS>LoTtJ#a1Ad8*d$q_7JZ?~NY%o}={hBApH{X(JwgwpyrQ)2wDR?GI6#7+hbaY! zAbS?FrFuB^zYEiwo*L?;38k|;Bk>H_!(NCdZ^TjbSkclDp%n(4YqJS}yW&qGAR0b0 zgmGiUDmt-u_zLmwc$Z64Y2FF<#zU&(v6>BgLtSzp#Bs*Eaw|>}iv{r1^6h@iBY?IK z&8MB6h}d?NJ;yW`!t7lmiOdD@RuRPAi-Q1oy>=1dk&ra4Opu62NO`{4>8*A2n7}@I zFLS|Qo#`kHnfdE2zrEEzKUaIN@ySV07UpSRbK9q&bY{^qX&^i)MIArV4L-R4w#+@e zuLmT1&llKr+@BdJI`||pMZhf)=Q7ZE|$@6JQZ-j#~PXBM0V5*lCXM`zzRtx zfw%`ctR;WYuuw7>Wy0`ipu;Q(u!6&25GP`Dy+MSK79`ZQDAHqu_%=W7F?&ZMAx*e` zBM?#nkWsEDfuRF`8B*i@qoV!MFps=!iftjJg;E$cP2NNCLiC zjLG=!uX9Nu#CJIjORFxKhTWj_>JlKj@p=u z%SevX=#KWdj-e<6$e51x2#@@zj@D?6=y;FZ_yhZRj{|9s^JtC=36ML$j_R0=38{_s zc#Rc#juM%T51EgO_>UG@kfi95@fZZPIEyJzk|x;%9GQ|jfRZdJ8!t(cA25?NS(7$- JlNS&H06U-fy}JMa literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/016.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/016.gif new file mode 100644 index 0000000000000000000000000000000000000000..dacdada00c5b9b62b456c2032228063ee49c6b52 GIT binary patch literal 3354 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 X1*(e&dW#>hpbXle4*H-N5CH%?v)?#g literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/018.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/018.gif new file mode 100644 index 0000000000000000000000000000000000000000..4daa29ef34ce3a199f323a75fa586e4178d593d9 GIT binary patch literal 341 zcmV-b0jmB-Nk%w1Vch@`0Du4hb8}bYf2(`WgFy{>i!^UEB38j_SWX85Ej)PU$nkH@j#vAHAeBYJV)|CYqcz8H>m2?(3 zC&Xl^_O@k(7#US4m}u51nF&f|GnNA>rYR!YN9Y(jmc({hghh+_`lsiKh!orN2Z#yx zwo=E|H>s0_*PE-m%E>3UTL&!tYl)rhdrA!3c5JCU%B(93y6enc-fTr)o?ZB?h*GT1 zJIJ`XZT>54IE}BGIcxavK;z_(4x?d-oV>ax>P)jr?Ib!=YoKvCR?y<`2nRxjWBC&cxf}I&Ye7a`uqtrK>+|eGKZr< literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/019.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/images/019.gif new file mode 100644 index 0000000000000000000000000000000000000000..69b1fd433e86a4ec80d19e71541dde6e546fabc2 GIT binary patch literal 169 zcmV;a09OA;Nk%w1Vch@`0Du4hE$Y>(T--oYwYj&WXc^RwL<-A_xpmV+?_kP8?_ci|A`xX><=={^z*im#c$4dFwiY**0HtWx?EL*)g zX}|Zn3YpJM`=4yNRT>Fk}In8*o>-xrHXO0>^JY#Y3@)f~Zck4E9S$pdCnltM* zoM_ql(DteE^XV_EQ@%WG%e|yuX`H7h{jBSb2&d46rLzMc+&h%R@wn5gY{FtOCKCm( zC2ofs+zP&J@H*R-?%m++BKEpg`%&gGJ)buoy*To%vR^hm9&CSgjfh`OS)&Oav;rIXm literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/license.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/license.html new file mode 100644 index 0000000..326e3ba --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/license.html @@ -0,0 +1,15 @@ + + + + CKFinder User's Guide + + + + + +

      + CKFinder Licencija +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/suggestions.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/suggestions.html new file mode 100644 index 0000000..fdf33a0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/suggestions.html @@ -0,0 +1,34 @@ + + + + CKFinder vartotojo instrukcija + + + + + + +

      + Jūsų patarimai +

      +

      + Prašome atsiųsti savo patarimus apie šią dokumentaciją. + Mes ją nuolatos tobuliname, pasiūlydami Jums vis geresnę programą kiekvieną dieną.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/toc.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/toc.html new file mode 100644 index 0000000..2beaff1 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/files/toc.html @@ -0,0 +1,91 @@ + + + + CKFinder vartotojo instrukcija + + + + + +

      +  Turinys +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/index.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/index.html new file mode 100644 index 0000000..4acc1e4 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/lt/index.html @@ -0,0 +1,18 @@ + + + + CKFinder User's Guide + + + + + + + + + + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/001.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/001.html new file mode 100644 index 0000000..fec5dad --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/001.html @@ -0,0 +1,34 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Witaj w programie CKFinder!

      +

      + CKFinder jest menedżerem plików, dzięki któremu możesz przeglądać + oraz przesyłać pliki do serwera WWW, a także nimi zarządzać — bezpośrednio + ze swojej przeglądarki internetowej i bez konieczności instalowania czegokolwiek + na Twoim komputerze.

      +

      + Dzięki możliwości zastosowania w środowisku rozproszonym, CKFinder jest + narzędziem pracy grupowej, które umożliwia współdzielenie i ułatwia zarządzanie + plikami umieszczonymi na centralnym komputerze (serwerze).

      +

      + Niezależnie od tego, czy jesteś nowym, czy też doświadczonym użytkownikiem, + warto poświęcić chwilę uwagi na przeglądnięcie dokumentacji CKFindera celem + uzyskania pełnej wiedzy na temat tego prostego i jednocześnie bardzo użytecznego + oprogramowania.

      +

      + Prawa autorskie

      +

      + Ważne informacje na temat licencji oraz praw autorskich do programu dostępne są w + artykule "Prawa autorskie". +

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/002.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/002.html new file mode 100644 index 0000000..18871b4 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/002.html @@ -0,0 +1,42 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + CKFinder — Interfejs Użytkownika

      +

      + Interfejs programu CKFinder został zaprojektowany pod kątem przejrzystości, intuicyjności + oraz łatwości użycia. Większość poleceń jest łatwo dostępna przy użyciu menu + kontekstowego i może zostać wykonana za pomocą jednego kliknięcia myszą.

      +

      + Jeśli na co dzień obsługujesz menedżery plików wbudowane w większość systemów operacyjnych + dostępnych na komputerach PC czy laptopach, szybko się przekonasz, że korzystanie z menedżera + plików w przeglądarce jest równie proste i intuicyjne.

      +

      + Poniżej znajduje się przykładowy zrzut ekranu przedstawiający interfejs CKFindera:

      +

      + Interfejs użytkownika programu CKFinder 

      +
        +
      1. Panel folderów – zawiera "drzewo folderów", + po którym można nawigować. Foldery wykorzystywane są do organizowania i kategoryzowania + zbioru plików.
      2. +
      3. Panel plików – wyświetla listę plików + dostępnych w wybranym folderze.
      4. +
      5. Pasek narzędzi – zestaw przycisków, które + po kliknięciu wykonują powiązane z nimi funkcje menedżera plików.
      6. +
      7. Pasek statusu – obszar na dole interfejsu + przeznaczony do wyświetlania informacji dotyczących wybranego pliku, całkowitej liczby + plików w folderze itd.
      8. +
      9. Menu kontekstowe – menu wyskakujące + zawierające polecenia menedżera plików wykonujące operacje specyficzne dla określonego + obiektu. Dostępność poleceń w menu kontekstowym zmienia się w zależności od wybranego + obiektu.
      10. +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/003.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/003.html new file mode 100644 index 0000000..261a62c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/003.html @@ -0,0 +1,145 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Panel folderów

      +

      + Panel folderów zawiera "drzewo folderów", po którym można nawigować. + Foldery wykorzystywane są do organizowania i kategoryzowania zbioru plików.

      +

      + Panel folderów programu CKFinder 

      +

      + Sposób wyświetlania folderów nazwywany jest "drzewem", ponieważ hierarchia folderów + prezentowana jest w postaci gałęzi, z podfolderami umieszczonymi poniżej i wciętymi względem + elementów nadrzędnych. Panel folderów wykorzystuje tę samą graficzną + reprezentację, która znana jest z większości współczesnych systemów operacyjnych.

      +

      + Operacje podstawowe

      +

      + Otwieranie (rozwijanie) folderu

      +

      + W celu otwarcia folderu i rozwinięcia jego podfolderów należy kliknąć ikonę + plusa () znajdującą się + przed nazwą folderu. Jeśli ikona ta jest nieobecna, oznacza to, iż folder nie zawiera + żadnych podfolderów.

      +

      + Zwinięty folder 

      +

      + W części "Ładowanie na żądanie" poniżej znajduje się więcej informacji na temat procesu ładowania + zawartości folderów w CKFinderze.

      +

      + Zamykanie (zwijanie) folderu

      +

      + W celu zamknięcia folderu i ukrycia (zwinięcia) jego podfolderów należy kliknąć ikonę + minusa () znajdującą się + przed nazwą folderu.

      +

      + Rozwinięty folder wraz z podfolderami 

      +

      + Wybór folderu

      +

      + W celu wybrania folderu i uczynienia go "folderem bieżącym" w CKFinderze kliknij nazwę folderu + lub jego ikonę. Wybrany folder zostanie podświetlony za pomocą innego koloru tła.

      +

      + Folder wybrany w CKFinderze 

      +

      + Operacje zaawansowane

      +

      + Operacje zaawansowane można wykonywać na folderze za pomocą jego + menu kontekstowego. W zależności okoliczności następujące opcje mogą być dostępne:

      +

      + Menu kontekstowe folderu 

      +
        +
      • Nowy podfolder (New Subfolder) – tworzy nowy podfolder w folderze nadrzędnym.
      • +
      • Zmień nazwę (Rename) – zmienia nazwę folderu.
      • +
      • Skopiuj pliki z koszyka (Copy Files from Basket) – kopiuje pliki, + które zostały umieszczone w koszyku, do wybranego folderu.
      • +
      • Przenieś pliki z koszyka (Move Files from Basket) – przenosi pliki, + które zostały umieszczone w koszyku, do wybranego folderu.
      • +
      • Usuń (Delete) – trwale usuwa folder.
      • +
      +

      + Uwaga: Niektóre opcje menu kontekstowego mogą być wyłączone (i tym + samym wyszarzone) w zależności od konfiguracji CKFindera ustawionej przez administratora + systemu.

      +

      + Tworzenie folderu

      +

      + W celu utworzenia podfolderu (folderu podrzędnego) wewnątrz istniejącego folderu wybierz + opcję Nowy podfolder (New Subfolder) z menu kontekstowego folderu nadrzędnego. + Wpisz nazwę nowego podfolderu w oknie dialogowym, które zostanie wyświetlone. Po nadaniu + folderowi nazwy i zamknięciu okna nowy podfolder zostanie utworzony.

      +

      + Utworzenie nowego folderu w CKFinderze 

      +

      + Nie wszystkie znaki mogą być wykorzystywane w nazwach plików oraz folderów ze względu + na ograniczenia systemów, w których działa CKFinder. Wśród znaków, których nie można + użyć w nazwach plików bądź folderów są: \ / : + * ? " < + > oraz |.

      +

      + Zmiana nazwy folderu

      +

      + W celu zmiany nazwy folderu należy wybrać opcję Zmień nazwę (Rename) z + jego menu kontekstowego lub użyć klawisza F2. Wpisz nową nazwę folderu w oknie + dialogowym, które zostanie wyświetlone, nadpisując obecną nazwę. Po nadaniu folderowi nowej + nazwy i zamknięciu okna jego nazwa zmieni się.

      +

      + Zmiana nazwy folderu w CKFinderze 

      +

      + Jak wspomniano wyżej, nie wszystkie znaki mogą być wykorzystywane w nazwach plików oraz folderów ze względu + na ograniczenia systemów, w których działa CKFinder. Wśród znaków, których nie można + użyć w nazwach plików bądź folderów są: \ / : + * ? " < + > oraz |.

      +

      + Ostrzeżenie: Po zmianie nazwy folderu odnośniki prowadzące do niego + samego bądź do plików w nim się znajdujących, dodane na innych stronach, przestaną działać. + Z tego powodu należy przy korzystaniu z tej opcji zachować ostrożność.

      +

      + Kopiowanie i przenoszenie plików z koszyka

      +

      + Koszyk jest wirtualnym pojemnikiem, który może się przydać, jeśli chcesz wykonać + określone działania na grupach plików. Operacje kopiowania oraz przenoszenia plików opisane są w + części "Koszyk" w "Podręczniku Użytkownika".

      +

      + Usuwanie folderu

      +

      + W celu usunięcia folderu wraz z całą jego zawartością należy wybrać opcję Usuń (Delete) + z menu kontekstowego folderu lub użyć klawisza Del. Niezbędne będzie potwierdzenie + chęci usunięcia folderu w oknie dialogowym, które zostanie wyświetlone. Po potwierdzeniu intencji + i zamknięciu okna folder zostanie usunięty.

      +

      + Ostrzeżenie: Operacja ta jest nieodwracalna. Po usunięciu folderu + i jego zawartości nie będziesz mógł odzyskać usuniętych plików.

      +

      + Usunięcie folderu w CKFinderze 

      +

      + Ostrzeżenie: Po usunięciu folderu odnośniki prowadzące do niego + samego bądź do plików w nim się znajdujących, dodane na innych stronach, przestaną działać. + Z tego powodu należy przy korzystaniu z tej opcji zachować ostrożność.

      +

      + Ładowanie na żądanie

      +

      + Najważniejszą różnicą pomiędzy CKFinderem a strukturami drzewa folderów obecnymi w systemach + operacyjnych komputerów jest to, że w CKFiderze foldery ładowane są na żądanie. Oznacza to, + że aplikacja nie ładuje pełnej struktury drzewa folderów po uruchomieniu, a zamiast tego pokazuje + jedynie jej podzbiór po rozwinięciu folderu. Opcja ta dostępna jest w większości zaawansowanych + aplikacji internetowych takich jak CKFinder i pozwala zarówno ograniczyć transfer z serwera, jak i + skrócić czas ładowania.

      +

      + By wskazać, że foldery są ładowane, CKFinder może wyświetlić komunikat Ładowanie (Loading)... + po rozwinięciu folderu:

      +

      + Ładowanie folderu w CKFinderze 

      +

      + Komunikat ten automatycznie zniknie, gdy wszystkie podfoldery zostaną załadowane.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/004.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/004.html new file mode 100644 index 0000000..a8c0218 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/004.html @@ -0,0 +1,250 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Panel plików

      +

      + Panel plików pokazuje wszystkie pliki dostępne w wybranym folderze.

      +

      + Panel plików programu CKFinder 

      +

      + Różne widoki

      +

      + Panel plików może prezentować pliki za pomocą jednego z dwóch różnych formatów + wyświetlania zależnych od ustawień CKFindera (patrz "Ustawienia + "). Poniżej znajduje się porównanie widoków Miniaturek oraz Listy + dla tego samego folderu.

      +

      + Jeśli CKFinder zostanie skonfigurowany by korzystać z widoku Miniaturek (Thumbnails), + pliki zostaną wyświetlone w postaci miniaturek (niewielkich podglądów lub ikon), z dodatkowymi informacjami + takimi jak nazwa pliku, jego rozmiar lub data modyfikacji bądź bez nich (w zależności od ustawień).

      +

      + Panel plików CKFindera z widokiem miniaturek 

      +

      + Jeśli CKFinder zostanie skonfigurowany by korzystać z widoku Listy (List), + pliki zostaną wyświetlone w postaci listy, z dodatkowymi informacjami + takimi jak nazwa pliku, jego rozmiar lub data modyfikacji bądź bez nich (w zależności od ustawień).

      +

      + Panel plików CKFindera z widokiem listy 

      +

      + Operacje podstawowe

      +

      + Aktywowanie (wybranie) pliku za pomocą myszy

      +

      + W celu aktywowania pliku i uczynienia go "plikiem bieżącym" w CKFinderze należy kliknąć + nazwę pliku lub jego miniaturkę. By łatwiej było wybrać plik, kiedy kursor myszy znajdzie + się nad plikiem, jego tło zostanie tymczasowo podświetlone. Po aktywowaniu pliku zostanie on na stałe + podświetlony za pomocą innego koloru tła.

      +

      + Poniższy rysunek prezentuje różne stany pliku oglądanego w folderze, od odznaczonego + poprzez podświetlony przez najechanie kursorem myszy po aktywowany (wybrany).

      + + + + + + +
      + Odznaczony plik w CKFinderze + Podświetlony plik w CKFinderze + Wybrany plik w CKFinderze
      +

       

      +

      + W celu odznaczenia pliku należy kliknąć inny plik (tym samym aktywując go) lub kliknąć w + dowolne puste miejsce wewnątrz panelu plików CKFindera.

      +

      + Kopiowanie pliku

      +

      + W celu skopiowania pliku do innego folderu należy wybrać plik i przeciągnąć go nad folder + docelowy w panelu folderów. Po upuszczeniu pliku nad nazwą folderu docelowego + należy wybrać opcję Skopiuj plik tutaj (Copy File Here) z menu kontekstowego.

      +

      + Kopiowanie pliku w CKFinderze 

      +

      + Plik zostanie zduplikowany, a jego kopie umieszczona będzie w folderze docelowym. Zawartość + folderu źródłowego nie zmieni się.

      +

      + Plik skopiowany w CKFinderze 

      +

      + Uwaga: Jeśli plik o tej samej nazwie istnieje już w folderze docelowym, + zostaniesz poproszony o wybór pomiędzy nadpisaniem istniejącego pliku a automatyczną + zmianą kopiowanego pliku (to drugie jest opcją domyślną).

      +

      + Błąd wyświetlany dla pliku, który już istnieje w folderze 

      +

      + Przenoszenie pliku

      +

      + W celu przeniesienia pliku do innego folderu należy wybrać plik i przeciągnąć go nad folder + docelowy w panelu folderów. Po upuszczeniu pliku nad nazwą folderu docelowego + należy wybrać opcję Przenieś plik tutaj (Move File Here) z menu kontekstowego.

      +

      + Przenoszenie pliku w CKFinderze 

      +

      + Plik zostanie usunięty z folderu źródłowego i dodany do zawartości folderu docelowego.

      +

      +  

      +

      + Operacje zaawansowane

      +

      + Operacje zaawansowane można wykonywać na pliku za pomocą jego + menu kontekstowego. W zależności od okoliczności następujące opcje mogą być dostępne:

      +

      + Menu kontekstowe pliku 

      +
        +
      • Wybierz (Select) – wybiera plik.
      • +
      • Zobacz (View) – wyświetla plik w pełnym rozmiarze w nowym oknie lub zakładce przeglądarki internetowej.
      • +
      • Pobierz (Download) – pobiera plik z serwera na Twój komputer.
      • +
      • Zmień rozmiar (Resize) – pozwala na modyfikację rozmiaru plików, a także utworzenie nowej miniatury.
      • +
      • Zmień nazwę (Rename) – zmienia nazwę pliku.
      • +
      • Usuń (Delete) – trwale usuwa plik.
      • +
      +

      + Uwaga: Niektóre opcje menu kontekstowego mogą być wyłączone (i tym + samym wyszarzone) w zależności od konfiguracji CKFindera ustawionej przez administratora + systemu.

      +

      + Wybór (zaznaczenie) pliku

      +

      + W celu wybrania pliku za pomocą menu kontekstowego należy użyć opcji Wybierz (Select). + Alternatywnie można również dwukrotnie kliknąć plik za pomocą myszy.

      +

      + W zależności od środowiska, w którym wykorzystywany jest CKFinder, operacja wyboru może, na przykład, + przesłać adres URL pliku do innej aplikacji lub wstawić obrazek bezpośrednio do artykułu + tworzonego w systemie CMS.

      +

      + Zobaczenie (podgląd) pliku

      +

      + W celu zobaczenia pliku w przeglądarce internetowej należy wybrać opcję Zobacz (View) + z menu kontekstowego. Nie dla wszystkich typów plików można uzyskać podgląd w przeglądarce, + jednak opcja ta przydaje się w przypadku obrazków, tekstu oraz plików PDF. W pozostałych + przypadkach przeglądarka poprosi Cię o wybór aplikacji do otwarcia pliku.

      +

      + W przypadku podglądu obrazków CKFinder wyświetli obrazek w oknie wyskakującym opartym na efekcie lightboxa.

      +

      + Pobieranie pliku

      +

      + W celu pobrania pliku należy wybrać opcję Pobierz (Download) z menu + kontekstowego. Przeglądarka zapyta o lokalizację do zapisu pobranego pliku na Twoim komputerze. + W zależności od ustawień przeglądarki oraz systemu operacyjnego plik będzie można otworzyć + natychmiast po pobraniu za pomocą odpowiedniej aplikacji Twojego komputera.

      +

      + Zmiana rozmiaru pliku (obrazka)

      +

      + W celu zmiany rozmiaru obrazka lub jego miniaturki należy wybrać opcję Zmień rozmiar (Resize) + z menu kontekstowego. Po wprowadzeniu nowych rozmiarów lub wybraniu wielkości miniaturki należy + zamknąć okno dialogowe w celu zapisania zmian.

      +

      + Zmiana rozmiaru obrazka w CKFinderze 

      +

      Jeśli obrazek jest zbyt duży, można zmienić jego wymiary, wprowadzając nowe wartości + do pól Szerokość (Width) oraz Wysokość (Height). Domyślnie + proporcje obrazka są zablokowane, co sygnalizowane jest ikoną Zablokowanie proporcji obrazka + (Zablokuj proporcje). Oznacza to, że jeśli zmienisz jedną z wartości długości + (szerokość lub wysokość), druga zostanie automatycznie dostosowana.

      +

      + Jeśli chcesz móc swobodnie zmieniać oba wymiary, kliknij ikonę Zablokuj proporcje + w celu jej odblokowania. Ikona ta zmieni się teraz w Odblokowanie proporcji obrazka, + a zmiana jednego z wymiarów nie pociągnie za sobą automatycznej modyfikacji drugiego. + By ponownie zablokować proporcje obrazka, kliknij ikonę jeszcze raz.

      +

      + Dopóki nie zapiszesz zmian, w każdej chwili możesz z łatwością powrócić do oryginalnego rozmiaru pliku, naciskając + ikonę Przywrócenie oryginalnego rozmiaru obrazka + (Przywróć rozmiar). Spowoduje ona przywrócenie rozmiaru obrazka do + pierwotnej wielkości. Oryginalna szerokość oraz wysokość pojawią się w odpowiednich + polach okna dialogowego.

      +

      + Po zmianie wielkości obrazka możesz zdecydować się na zapisanie go pod tą samą nazwą, + nadpisując istniejący plik. Pamiętaj, że operacji tej nie można odwrócić i po zapisaniu + pliku o zmodyfikowanych wymiarach nie będziesz w stanie przywrócić jego oryginalnej wielkości. + W celu nadpisania oryginalnego pliku pozostaw pole wyboru Utwórz nowy obrazek (Create a new image) + odznaczone.

      +

      + Nadpisanie zmodyfikowanego obrazka w CKFinderze 

      +

      + Możesz również zapisać zmodyfikowany obrazek w nowym pliku i pozostawić oryginał bez zmian. Jeśli + zaznaczysz pole wyboru Utwórz nowy obrazek (Create a new image), będziesz mógł + nadać zmodyfikowanemu obrazkowi nową nazwę. Domyślnie CKFinder sugeruje, by zapisać obrazek pod nazwą + zbudowaną z dotychczasowej nazwy pliku z dodatkiem nowych wymiarów (na przykład: Sun1_100x100.jpg + przy oryginalnym pliku o nazwie Sun1.jpg i zmianie wymiarów do 100 pikseli szerokości + i 100 pikseli wysokości).

      +

      + Zapisanie nowego obrazka w CKFinderze 

      +

      + Kiedy zmiany są gotowe, kliknij przycisk OK w celu zamknięcia okna dialogowego. + Jeśli operacja zmiany rozmiaru obrazka powiedzie się, wyświetlony zostanie odpowiedni komunikat.

      +

      + Rozmiar obrazka został zmieniony w CKFinderze 

      +

      + Jeśli zmodyfikowany obrazek został zapisany jako nowy plik, w folderze zobaczysz obok siebie obie + wersje.

      +

      + Oryginalny i zmodyfikowany obrazek w CKFinderze 

      +

      + Uwaga: Wymiary oryginalnego obrazka mogą ograniczać opcje dostępne przy + zmianie rozmiaru. Zmodyfikowane wymiary obrazka nie mogą być większe od oryginalnych.

      +

      + Generowanie miniaturek

      +

      + Opcję zmiany rozmiaru obrazka można również wykorzystać do wygenerowania pomniejszonych + kopii obrazków (miniaturek), których możesz potem użyć w artykułach publikowanych na swojej + stronie internetowej lub w postach na blogu. Dzięki opcji zmiany wielkości miniatury + administrator strony może ustawić zdefiniowane wielkości miniaturek, które będą potem + wykorzystywane przez użytkowników CKFindera. Oszczędzi Ci to konieczności ręcznego wpisywania + zmodyfikowanych wartości szerokości i wysokości dla każdego obrazka, a także pozwoli zachować + spójne wymiary miniaturek na całej stronie.

      +

      + W celu użycia jednej ze zdefiniowanych wielkości miniaturki wybierz opcję Zmień rozmiar (Resize) + z menu kontekstowego obrazka. W części Utwórz nową miniaturkę (Create a new thumbnail) + okna dialogowego zaznacz pola wyboru reprezentujące pożądaną wielkość (lub wielkości) miniaturki. + Jeśli operacja zmiany rozmiaru miniaturki powiedzie się, wyświetlony zostanie odpowiedni komunikat. + Obrazki o zmodyfikowanej wielkości zostaną utworzone w tym samym folderze, a nowe pliki otrzymają + nazwy odpowiadające wybranej opcji miniaturki (z przyrostkami _large, + _medium oraz _small dodanymi do oryginalnej nazwy pliku).

      +

      + Miniaturki wygenerowane w CKFinderze 

      +

      + Uwaga: Jeśli obrazek jest mniejszy od którejś z dostępnych opcji + miniaturek (jak w przykładzie powyżej), niedostępne opcje zostaną wyszarzone.

      +

      + Zmiana nazwy pliku

      +

      + W celu zmiany nazwy pliku należy wybrać opcję Zmień nazwę (Rename) z + jego menu kontekstowego lub użyć klawisza F2. Wpisz nową nazwę pliku w oknie + dialogowym, które zostanie wyświetlone, nadpisując obecną nazwę. Po nadaniu plikowi nowej + nazwy i zamknięciu okna nazwa pliku zmieni się.

      +

      + Zmiana nazwy pliku w CKFinderze 

      +

      + Nie wszystkie znaki mogą być wykorzystywane w nazwach plików oraz folderów ze względu + na ograniczenia systemów, w których działa CKFinder. Wśród znaków, których nie można + użyć w nazwach plików bądź folderów są: \ / : + * ? " < + > oraz |.

      +

      + Ostrzeżenie: Po zmianie nazwy pliku odnośniki prowadzące do niego + i dodane na innych stronach przestaną działać. + Z tego powodu należy przy korzystaniu z tej opcji zachować ostrożność.

      +

      + Usuwanie pliku

      +

      + W celu usunięcia pliku należy wybrać opcję Usuń (Delete) + z menu kontekstowego pliku lub użyć klawisza Del. Niezbędne będzie potwierdzenie + chęci usunięcia pliku w oknie dialogowym, które zostanie wyświetlone. Po potwierdzeniu intencji + i zamknięciu okna plik zostanie usunięty.

      +

      + Ostrzeżenie: Operacja ta jest nieodwracalna. Po usunięciu pliku + nie będziesz mógł go odzyskać.

      +

      + Usunięcie pliku w CKFinderze 

      +

      + Ostrzeżenie: Po usunięciu pliku odnośniki prowadzące do niego + i dodane na innych stronach przestaną działać. + Z tego powodu należy przy korzystaniu z tej opcji zachować ostrożność.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/005.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/005.html new file mode 100644 index 0000000..3d4a653 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/005.html @@ -0,0 +1,43 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Pasek narzędzi

      +

      + Pasek narzędzi to specjalny obszar na górze interfejsu CKFindera. + Zawiera on zbiór przycisków menu, które można kliknąć w celu uzyskania dostępu do różnych + opcji menedżera plików.

      +

      + Oto wygląd standardowego paska narzędzi CKFindera:

      +

      + Pasek narzędzi programu CKFinder 

      +

      Użycie paska narzędzi

      +

      W celu wykonania operacji przypisanej do przycisku należy ten przycisk kliknąć. W większości + przypadków działanie to spowoduje albo natychmiastowe wykonanie pewnej zdefiniowanej operacji, + albo otworzy panel rozwijany z dalszymi opcjami konfiguracyjnymi.

      +

      Należy pamiętać, że z paska narzędzi można także korzystać za pomocą klawiatury. W celu wejścia + do paska narzędzi należy użyć skrótu Alt+F10. By przejść do kolejnego lub poprzedniego + przycisku, należy użyć klawiszy strzałek. W celu aktywowania wybranego przycisku należy nacisnąć + klawisz spacji lub Enter.

      +

      + Przyciski paska narzędzi

      +

      + Poniżej znajduje się lista przycisków paska narzędzi CKFindera:

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/006.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/006.html new file mode 100644 index 0000000..a67d489 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/006.html @@ -0,0 +1,130 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Przesyłanie plików

      +

      + Przycisk Wyślij (Upload) dostępny w pasku narzędzi + CKFindera otwiera panel przesyłania pliku, który można wykorzystać + do dodania nowych plików do aktualnego folderu.

      +

      Poniższy rysunek prezentuje domyślny panel przesyłania pliku CKFindera, + który otwiera się po kliknięciu przycisku paska narzędzi.

      +

      + Panel przesyłania pliku CKFindera korzystający z technologii Flash 

      +

      + W celu zamknięcia (ukrycia) panelu przesyłania pliku należy nacisnąć + przycisk Anuluj (Cancel) (jeśli proces przesyłania plików jeszcze się + nie rozpoczął) lub przycisk Zamknij (Close) (jeśli przesyłanie plików + zostało zakończone). By ukryć panel, można także kliknąć ponownie przycisk + Wyślij (Upload) na pasku narzędzi.

      +

      + Uwaga: Przesyłanie plików do serwera to termin techniczny + oznaczający wysyłanie plików z lokalnego komputera do komputera centralnego (znanego + również jako serwer).

      +

      + Wersje panelu przesyłania pliku

      +

      Panel przesyłania pliku w CKFinderze występuje w dwóch wersjach, + w zależności od środowiska, w jakim się pracuje. Domyślnie we wszystkich środowiskach + obsługujących technologię Adobe Flash wykorzystywana jest opcja jednoczesnego + przesyłania wielu plików (ang. multiple file upload), która pozwa wysłać większą + liczbę plików do serwera w trakcie jednej operacji. Jeśli jednak Twój system nie obsługuje + technologii Flash, będziesz mógł przesyłać pojedyncze pliki do serwera w odrębnych + operacjach.

      +

      Powyższy rysunek prezentuje domyślny panel przesyłania pliku obsługujący + jednoczesne wysyłanie wielu plików. W przypadku systemów nieobsługujących technologii + Flash (w tym przeglądarek mobilnych) wykorzystany zostanie następujący format panelu.

      +

      + Panel przesyłania pliku CKFindera dla pojedynczego pliku 

      +

      + Jednoczesne przesyłanie wielu plików

      +

      + Domyślnie CKFinder pozwala przesłać do serwera wiele plików jednocześnie. + W celu wysłania plików do serwera należy wykonać kroki opisane poniżej.

      +

      Krok 1: Kliknij przycisk Wyślij (Upload) na pasku + narzędzi w celu otwarcia panelu przesyłania pliku.

      +

      Krok 2: Po otwraciu panelu przesyłania pliku wybierz + przycisk Dodaj pliki (Add Files). W oknie wyboru pliku Twojego + systemu operacyjnego wskaż plik znajdujący się na Twoim komputerze, który chcesz + przesłać do serwera.

      +

      Uwaga: Możesz wskazać dowolną liczbę plików jednocześnie, + wybierając je wszystkie naraz w oknie wyboru pliku.

      +

      Krok 3: Lokalne pliki zostaną teraz dodane do kolejki przesyłanych plików. + Jeśli chcesz dodać kolejne pliki do kolejki, kliknij ponownie przycisk + Dodaj pliki (Add Files) i powtórz czynności opisane wyżej.

      +

      + Kolejka przesyłanych plików w CKFinderze 

      +

      Krok 4: Jeśli zmienisz zdanie w kwestii tego, które pliki powinny być + przesłane do serwera, możesz w dowolnym momencie albo usunąć pojedynczy plik + z kolejki, klikając przycisk Usuń (Remove) obok jego nazwy, + albo anulować cały proces przesyłania za pomocą kliknięcia przycisku Anuluj (Cancel) + w panelu przesyłania pliku.

      +

      Krok 5: Jeśli zakończyłeś proces wyboru plików, możesz kliknąć przycisk + Wyślij (Upload) w celu rozpoczęcia procesu przesyłania plików do serwera. + Postęp całego procesu, a także poszczególnych plików, można obserwować na bieżąco na ekranie.

      +

      + Postęp przesyłania wielu plików w CKFinderze 

      +

      Krok 6: Poczekaj na zakończenie procesu przesyłania plików. Po jego zakończeniu + zawartość folderu zostanie odświeżona, a ostatnio przesłany plik zostanie + wybrany w panelu plików.

      +

      + Przesyłanie pojedynczych plików

      +

      Jeśli technologia Adobe Flash nie jest obsługiwana w Twoim systemie, przesyłanie plików + za pomocą CKFindera nadal będzie działało, choć będzie ograniczone do przesyłania + jednego pliku jednorazowo. W celu przesłania pliku do serwera należy wykonać kroki + opisane poniżej.

      +

      Krok 1: Kliknij przycisk Wyślij (Upload) na pasku narzędzi + w celu otwarcia panelu przesyłania pliku.

      +

      Krok 2: Po otwarciu panelu przesyłania pliku wybierz przycisk + Przeglądaj (Browse). W oknie wyboru pliku Twojego + systemu operacyjnego wskaż plik znajdujący się na Twoim komputerze, który chcesz + przesłać do serwera.

      +

      Uwaga: Podpis tego przycisku może się różnić w poszczególnych + przeglądarkach internetowych.

      +

      Krok 3: Lokalny plik zostanie teraz wybrany. W tym wariancie możesz przesłać + do serwera jeden plik jednocześnie.

      +

      Krok 4: Jeśli zakończyłeś proces wyboru pliku, możesz kliknąć przycisk + Wyślij wybrany plik (Upload Selected File) w celu rozpoczęcia + procesu przesyłania plików do serwera. Postęp całego procesu można obserwować na bieżąco + na ekranie.

      +

      + Przesyłanie pojedynczego pliku do serwera 

      +

      Krok 5: Poczekaj na zakończenie procesu przesyłania pliku. Po jego zakończeniu + zawartość folderu zostanie odświeżona, a ostatnio przesłany plik (lub ostatni z kilku + przesłanych plików) zostanie wybrany w panelu plików.

      +

      + Błędy przesyłania plików do serwera

      +

      + Następujące komunikaty o błędach mogą zostać wyświetlone po wysłaniu pliku.

      +

      + Plik o podanej nazwie już istnieje. Nazwa przesłanego pliku została zmieniona na + "nazwa_pliku(1).ext".

      +

      + Komunikat ten wskazuje, że nazwa przesyłanego pliku jest już w użyciu przez inny + plik znajdujący się w tym samym folderze. W celu uniknięcia konfliktu kolejny numer + ("1") został dodany do oryginalnej nazwy pliku.

      +

      + Nieprawidłowy plik.

      +

      + Plik, który próbowałeś przesłać do serwera, nie został zaakceptowany.

      +

      + Najczęstszym powodem tej sytuacji jest takie skonfigurowanie CKFindera przez administratora, + w którym dozwolone jest przesyłanie plików jedynie z wybranymi rozszerzeniami. + Rozwiązanie to ma na celu zabezpieczenie serwera przed wysłaniem niedozwolonych plików. + Innym powodem może być przekroczenie dozwolonego rozmiaru pliku przesyłanego do serwera. + W takim przypadku serwer powinien zostać skonfigurowany przez administratora w taki sposób, + aby dopuszczał pliki o większych rozmiarach.

      +

      Przesyłanie pliku zakończyło się niepowodzeniem z powodów bezpieczeństwa. Plik zawiera dane + przypominające HTML.

      +

      Przesłany plik zawiera kod HTML. Z powodów bezpieczeństwa tylko pliki z wybranymi rozszerzeniami + mogą zawierać kod HTML.

      +

      Prosimy o kontakt z administratorem w celu uzyskania informacji o plikach, które są akceptowane + przez CKFindera, oraz o dopuszczalnym limicie rozmiaru pojedynczego pliku.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/007.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/007.html new file mode 100644 index 0000000..bd2516a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/007.html @@ -0,0 +1,30 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Przycisk "Odśwież"

      +

      Gdy pracujesz w środowisku współdzielonym, zarządzanym przez CKFindera, gdzie dziesiątki + lub nawet setki użytkowników pracują na tych samych plikach w tym samym czasie, może się + zdarzyć, że pewne zmiany zostaną wprowadzone przez inne osoby do plików lub folderów, + które właśnie przeglądasz lub przetwarzasz w określonym momencie.

      +

      Wtedy właśnie opcja Odśwież (Refresh) może przyjść Ci z pomocą. Pozwala + ona załadować ponownie zawartość folderu w celu zobaczenia jego aktualnego stanu. Zawsze + gdy będziesz potrzebował aktualnej listy plików, kliknij przycisk Odśwież (Refresh) + dostępny na pasku narzędzi CKFindera.

      +

      + Przycisk Odśwież na pasku narzędzi CKFindera 

      +

      + Opcja ta jest szczególnie przydatna, gdy CKFindera wykorzystujesz jako narzędzie + pracy grupowej, współdzieląc pliki i foldery z przyjaciółmi, rodziną, współpracownikami, + czy dowolną inną grupą użytkowników. W celu upewnienia się, że zawsze widzisz najbardziej + aktualną wersję plików zarządzanych przez CKFindera, pownienieś od czasu do czasu + odświeżać zawartość folderu.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/008.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/008.html new file mode 100644 index 0000000..17170a4 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/008.html @@ -0,0 +1,89 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Przycisk "Ustawienia"

      +

      + Przycisk Ustawienia (Settings) dostępny w + pasku narzędzi CKFindera otwiera + panel ustawień, w którym można skonfigurować CKFindera i + dostosować ustawienia programu do własnych potrzeb.

      +

      Poniższy rysunek prezentuje panel ustawień CKFindera, który + otwiera się po kliknięciu przycisku paska narzędzi.

      +

      + Panel ustawień CKFindera 

      +

      + Wszystkie ustawienia zapisywane są automatycznie za pomocą "cookies" przeglądarki + internetowej. "Cookies" ("ciasteczka") to niewielkie pliki przechowujące + na Twoim komputerze prywatne ustawienia konfiguracyjne dla określonych witryn + internetowych.

      +

      + W celu zamknięcia (ukrycia) panelu ustawień należy nacisnąć + przycisk Zamknij (Close) lub kliknąć ponownie przycisk + Ustawienia na pasku narzędzi.

      +

      + Opcje konfiguracyjne CKFindera

      +

      + Wszystkie opcje konfiguracyjne odnoszą się do panelu plików + i kontrolują sposób wyświetlania plików w CKFinderze. Panel plików + reaguje na wszelkie zmiany wprowadzone w panelu ustawień natychmiast.

      +

      + Widok (View)

      +

      + Ustawia tryb widoku panelu plików:

      +
        +
      • Miniaturki (Thumbnails) – w tym trybie każdy plik + zostanie wyświetlony w ramce. W przypadku obrazków pokazany zostanie ich podgląd. + Dla pozostałych plików widoczna będzie ikona.
      • +
      • Lista (List) – w tym trybie wszystkie pliki zostaną wyświetlone + w postaci listy. Podglądy obrazków nie są dostępne.
      • +
      +

      + Wyświetlanie (Display)

      +

      + Decyduje o ilości informacji wyświetlanych w panelu plików. + Następujące opcje mogą być włączone lub wyłączone:

      +
        +
      • Nazwa pliku (File Name) – wyświetla nazwę pliku wraz z jego rozszerzeniem.
      • +
      • Data (Date) – wyświetla datę ostatniej modyfikacji.
      • +
      • Rozmiar pliku (File Size) – wyświetla wielkość pliku w kilobajtach.
      • +
      +

      Jeśli korzystasz z trybu wyświetlania Miniaturki, możesz odznaczyć wszystkie + opcje. W widoku Listy nazwa pliku zawsze będzie wyświetlana.

      +

      Poniższy rysunek prezentuje różne opcje wyświetlania w trybie + Miniaturki.

      + + + + + + + +
      + Plik wyświetlany w widoku Miniaturek bez nazwy, rozmiaru oraz daty modyfikacji + Plik wyświetlany w widoku Miniaturek z nazwą + Plik wyświetlany w widoku Miniaturek z nazwą i datą modyfikacji + Plik wyświetlany w widoku Miniaturek z nazwą, rozmiarem i datą modyfikacji
      +

      + Sortowanie (Sorting)

      +

      + Ustawia porządek wyświetlania plików. Dostępne są następujące opcje:

      +
        +
      • Wg nazwy pliku (by File Name) – sortuje pliki alfabetycznie + według ich nazw.
      • +
      • Wg daty (by Date) – sortuje pliki po dacie ich ostatniej + modyfikacji, z najnowszymi wyświetlanymi na początku.
      • +
      • Wg rozmiaru (by Size) – sortuje pliki po ich wielkości, + z największymi wyświetlanymi na początku.
      • +
      • Wg rozszerzenia (by Extension) – sortuje pliki najpierw + alfabetycznie po ich rozszerzeniu, a następnie według ich nazw.
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/009.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/009.html new file mode 100644 index 0000000..2b56882 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/009.html @@ -0,0 +1,20 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Przycisk "Pomoc"

      +

      + Przycisk Pomoc (Help) dostępny jest w pasku narzędzi + wszystkich widoków CKFindera. Po kliknięciu otwiera "Podręcznik Użytkownika" + w nowym oknie lub zakładce przeglądarki.

      +

      + Przycisk Pomoc na pasku narzędzi CKFindera 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/010.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/010.html new file mode 100644 index 0000000..a2d9308 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/010.html @@ -0,0 +1,35 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Pasek statusu

      +

      + Pasek statusu (Status Bar) to obszar na dole interfejsu + CKFindera przeznaczony do wyświetlania informacji dotyczących wybranego pliku, + całkowitej liczby plików w folderze itd.

      +

      + Po wybraniu pliku w CKFinderze w pasku statusu wyświetlone + zostaną szczegółowe informacje na temat tego pliku, w tym jego nazwa, rozmiar, + a także data ostatniej modyfikacji. Na przykład:

      +

      + Pasek statusu CKFindera dla wybranego pliku 

      +

      + Jeśli żadne pliki nie są wybrane, w pasku statusu zostanie + zamiast tego wyświetlona całkowita liczba plików znajdujących się w folderze + bieżącym. Na przykład:

      +

      + Pasek statusu CKFindera przy braku wyboru pliku 

      +

      + Jeśli folder jest pusty, w pasku statusu zostanie wyświetlony + odpowiedni komunikat. Na przykład:

      +

      + Pasek statusu CKFindera dla pustego folderu 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/011.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/011.html new file mode 100644 index 0000000..e6cac86 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/011.html @@ -0,0 +1,29 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Prawa autorskie +

      +

      + Program CKFinder, włącznie z niniejszą dokumentacją, jest własnością © + 2007-2013 CKSource - Frederico Knabben. + Wszelkie prawa zastrzeżone. Przed użyciem programu prosimy o zapoznanie się z warunkami + Licencji CKFindera.

      +

      + Ikony użyte w pasku narzędzi oraz menu kontekstowym zostały zaprojektowane przez Marka + Jamesa. Więcej informacji na ten temat można znaleźć pod następującym adresem:
      + http://www.famfamfam.com/lab/icons/silk/

      +

      + Znaki towarowe

      +

      + CKFinder, logo programu CKFinder, CKSource, CKEditor oraz FCKeditor są znakami towarowymi + CKSource - Frederico Knabben.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/012.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/012.html new file mode 100644 index 0000000..32d0a56 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/012.html @@ -0,0 +1,67 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Menu kontekstowe

      +

      + Menu kontekstowe jest menu wyskakującym, które pojawia się za + każdym razem, gdy klikniesz plik lub folder wewnątrz interfejsu CKFindera za + pomocą prawego przycisku myszy, użyjesz klawisza Menu/Application na + klawiaturze lub skorzystasz ze skrótu klawiaturowego (Ctrl+)Shift+F10. + Menu to daje dostęp do poleceń menedżera plików dostępnych dla określonego + typu obiektu.

      +

      Menu kontekstowe można również otworzyć, klikając ikonę strzałki + () + dostępną w niektórych środowiskach lub w przeglądarkach mobilnych obok nazwy + aktywnego folderu lub wewnątrz ramki pliku, jak na rysunku poniżej.

      +

      + Menu kontekstowe CKFindera ze strzałkami 

      +

      Każde menu kontekstowe składa się ze zbioru opcji (poleceń), które można wybrać + w celu wykonania operacji z nimi powiązanych.

      +

      + Uwaga: Niektóre opcje menu kontekstowego mogą być + wyłączone (i tym samym wyszarzone) w zależności od konfiguracji CKFindera + ustawionej przez administratora systemu.

      +

      + Użycie menu kontekstowego

      +

      + W celu wykonania operacji wymienionej w menu kontekstowym należy kliknąć + określoną opcję za pomocą lewego przycisku myszy. Można również przechodzić + w dół i w górę menu kontekstowego za pomocą przycisków strzałek na klawiaturze + lub klawiszy Shift+Tab oraz Tab. Po podświetleniu opcji + można ją aktywować za pomocą klawiszy spacji lub Enter. + Jeśli opcja jest wyszarzona, oznacza to, że pozostaje niedostępna, dopóki + nie zostaną spełnione określone warunki (na przykład masz uprawnienia do + wykonania określonych zmian w pliku lub folderze).

      +

      + Dostępne menu kontekstowe

      +

      + Menu CKFindera są, jak sama nazwa wskazuje, kontekstowe, co oznacza, iż opcje + w nich dostępne uzależnione są od wybranego obiektu. Poniżej przedstawiono + menu kontekstowe, z którymi można się spotkać, pracując w standardowej + instalacji CKFindera.

      +

      + Menu kontekstowe folderu

      +

      + Pojawia się, gdy klikniesz folder w panelu folderów + CKFindera za pomocą prawego przycisku myszy (lub użyjesz skrótów klawiaturowych + opisanych powyżej):

      +

      + Menu kontekstowe folderu CKFindera 

      +

      + Menu kontekstowe pliku

      +

      + Pojawia się, gdy klikniesz plik w panelu plików + CKFindera za pomocą prawego przycisku myszy (lub użyjesz skrótów klawiaturowych + opisanych powyżej):

      +

      + Menu kontekstowe pliku CKFindera 

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/013.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/013.html new file mode 100644 index 0000000..69fbd84 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/013.html @@ -0,0 +1,39 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Wymagania systemowe i informacja o zgodności +

      +

      + CKFinder jest aplikacją internetową. Oznacza to, że został zaprojektowany + do działania wewnątrz przeglądarki internetowej, dzięki czemu można go łatwo + uruchomić i używać na dowolnym komputerze.

      +

      + Obecnie do uruchomienia CKFindera niezbędne jest posiadanie jednej z poniższych + przeglądarek internetowych:

      +
        +
      • Internet Explorer 6.0+
      • +
      • Firefox 3.0+
      • +
      • Safari
      • +
      • Google Chrome
      • +
      • Opera
      • +
      +

      + Niektóre opcje programu uzależnione są do ustawień przeglądarki internetowej. CKFinder + powinien działać w każdej z przeglądarek wymienionych powyżej przy ich ustawieniach domyślnych. + Jeśli napotkasz jakieś problemy z działaniem menu kontekstowego + lub ustawienia programu nie są zapisywane, + upewnij się, że Twoja przeglądarka skonfigurowana jest w taki sposób, by zezwalać skryptom JavaScript + na "blokowanie lub wyłączenie menu kontekstowego", a także że masz włączoną + obsługę "cookies" ("ciasteczek").

      +

      + W razie jakichkolwiek problemów skontaktuj się z administratorem swojego systemu.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/014.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/014.html new file mode 100644 index 0000000..d5da579 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/014.html @@ -0,0 +1,103 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Koszyk

      +

      + Koszyk to folder dostępny w + panelu folderów, otwierający + panel koszyka.

      +

      + Koszyk jest wirtualnym, tymczasowym pojemnikiem wykorzystywanym + do wykonywania operacji na grupach plików w CKFinderze. Jest pojemnikiem + wirtualnym, gdyż pliki umieszczane w koszyku nie są + fizycznie przenoszone z ich folderów macierzystych.

      +

      Poniższy rysunek pokazuje panel koszyka CKFindera, który + zostaje rozwinięty po kliknięciu folderu Koszyk (Basket) w + panelu folderów.

      +

      + Folder Koszyka w CKFinderze 

      +

      + Uwaga: Koszyk jest folderem prywatnym, co + oznacza, iż nie jest współdzielony z innymi użytkownikami systemu plików i powiązany + jest z Twoją sesją przeglądarki internetowej.

      +

      + Dodawanie plików do koszyka

      +

      + Na początku każdej sesji CKFindera koszyk jest pusty i + wyświetlony zostaje komunikat zachęcający do przeciągnięcia do niego plików. + W celu dodania plików do koszyka przejdź do folderu zawierającego plik, który + zamierzasz użyć, przeciągnij go nad folder koszyka + w panelu folderów, i upuść.

      +

      + Przeciąganie plików do Koszyka w CKFinderze 

      +

      Plik powinien się teraz pojawić w folderze koszyka.

      +

      + Menu kontekstowe pliku

      +

      + Kiedy plik zostaje umieszczony w koszyku, jego menu kontekstowe zmieni się + w taki sposób, by uwzględniać jedynie operacje dostępne w tym specjalnym folderze.

      +

      + Menu kontekstowe pliku w Koszyku 

      +

      + Usuwanie plików z koszyka

      +

      + Istnieją dwie metody usuwania pliku z koszyka. Po pierwsze, można + usunąć pojedynczy plik, wybierając opcję Usuń z koszyka (Remove from Basket) + z menu kontekstowego pliku. Po wybraniu tej opcji wyświetlone zostanie okno dialogowe + z potwierdzeniem.

      +

      + Usunięcie pliku z Koszyka w CKFinderze 

      +

      Możliwe jest również usunięcie wszystkich plików z koszyka naraz poprzez kliknięcie + przycisku Wyczyść koszyk (Clear Basket) na pasku narzędzi. Po kliknięciu przycisku + zostaniesz poproszony o potwierdzenie, czy chcesz wyczyścić całą zawartość koszyka.

      +

      + Usunięcie wszystkich plików z Koszyka w CKFinderze 

      +

      + Uwaga: Usunięcie pliku z koszyka nie usuwa go + z systemu plików. Plik ten w dalszym ciągu będzie dostępny w swoim folderze macierzystym.

      +

      + Otwarcie folderu zawierającego plik

      +

      + Jak wspomniano wyżej, koszyk jest folderem wirtualnym, który pokazuje pliki + fizycznie znajdujące się w innych folderach systemu plików. Jeśli chcesz odnaleźć folder + źródłowy pliku, wybierz opcję Otwórz folder z plikiem (Open Parent Folder) + z menu kontekstowego pliku. CKFinder otworzy wtedy folder, w którym oryginalnie znajduje się + plik.

      +

      + Kopiowanie plików z koszyka

      +

      + Po umieszczeniu plików w koszyku będziesz mógł skopiować je do innego (fizycznego) + folderu. W celu skopiowania plików wskaż folder docelowy w panelu folderów + i wybierz opcję Skopiuj pliki z koszyka (Copy Files from Basket) + z menu kontekstowego folderu.

      +

      + Wyświetlone zostanie okno potwierdzenia wymieniające pliki, które zostały skopiowane do + folderu docelowego.

      +

      + Kopiowanie plików z Koszyka w CKFinderze 

      +

      + Pliki te zostaną zduplikowane, a ich kopie umieszczone będą w folderze docelowym. Zawartość + folderu źródłowego nie zmieni się.

      +

      Przenoszenie plików z koszyka

      +

      + Koszyk przydaje się również wtedy, gdy chcesz przenieść jakieś pliki pomiędzy + folderami. Po umieszczeniu plików w koszyku należy wskazać folder docelowy w + panelu folderów i wybrać opcję Przenieś pliki + z koszyka (Move Files from Basket) z menu kontekstowego folderu.

      +

      + Wyświetlone zostanie okno potwierdzenia wymieniające pliki, które zostały przeniesione do + folderu docelowego.

      +

      + Przesuwanie plików z Koszyka w CKFinderze 

      +

      + Pliki te zostaną usunięte z folderu źródłowego i dodane do folderu docelowego.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/015.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/015.html new file mode 100644 index 0000000..658cc6e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/015.html @@ -0,0 +1,48 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + Skróty klawiaturowe

      +

      + Wiele z funkcji CKFindera ma swoje odpowiedniki w postaci skrótów klawiaturowych. + Jest to jeden z powodów, dla których praca z tym menedżerem plików jest zarówno + łatwa, jak i bardzo wydajna.

      +

      + Poniższa lista zawiera dostępne skróty klawiaturowe pogrupowane w kategorie.

      +

      Interfejs CKFindera

      +
        +
      • Alt+F8 – wchodzi do panelu folderów.
      • +
      • Alt+F9 – wchodzi do panelu plików.
      • +
      • Alt+F10 – wchodzi do paska narzędzi.
      • +
      • Alt+U – otwiera panel przesyłania plików.
      • +
      • (Ctrl+)Shift+F10 – otwiera menu kontekstowe pliku lub folderu.
      • +
      • Esc – odpowiednik przycisku Anuluj (Cancel). Zamyka + okno dialogowe CKFindera lub menu kontekstowe bez zapisywania zmian.
      • +
      • Enter – odpowiednik przycisku OK w oknie dialogowym. + Wybiera funkcję CKFindera z paska narzędzi lub menu kontekstowego.
      • +
      • Lewa i prawa strzałka – przechodzą między przyciskami paska narzędzi.
      • +
      • Strzałka w górę i w dół lub Tab i Shift+Tab – przechodzą między opcjami menu kontekstowego.
      • +
      +

      + Nawigacja w panelu plików

      +
        +
      • Page Down – przewija panel plików w dół.
      • +
      • Page Up – przewija panel plików w górę.
      • +
      • End – przewija panel plików do ostatniego wiersza.
      • +
      • Home – przewija panel plików do pierwszego wiersza.
      • +
      +

      + Praca z plikami i folderami

      +
        +
      • F2 – odpowiednik polecenia Zmień nazwę (Rename).
      • +
      • Del – odpowiednik polecenia Usuń (Delete).
      • +
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/header.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/header.html new file mode 100644 index 0000000..63b6d33 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/header.html @@ -0,0 +1,34 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + + + + + +
      +

      + CKFinder — Podręcznik Użytkownika

      +
      + Odwiedź stronę internetową CKFindera
      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/license.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/license.html new file mode 100644 index 0000000..0bf1f73 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/license.html @@ -0,0 +1,15 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      + CKFinder — Licencja (EN)

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/suggestions.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/suggestions.html new file mode 100644 index 0000000..301df30 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/suggestions.html @@ -0,0 +1,34 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + + +

      + Sugestie

      +

      + Jeśli masz jakiekolwiek sugestie odnośnie dokumentacji, prześlij nam swoją opinię. + Naszym celem jest dostarczanie oprogramowania dającego dzień po dniu satysfakcję wszystkim użytkownikom.

      + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/toc.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/toc.html new file mode 100644 index 0000000..b4a6fae --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/files/toc.html @@ -0,0 +1,97 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + +

      +  Spis treści +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/index.html b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/index.html new file mode 100644 index 0000000..d57518f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/help/pl/index.html @@ -0,0 +1,18 @@ + + + + CKFinder — Podręcznik Użytkownika + + + + + + + + + + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/install.txt b/php/pic_switch_demo/static/ckeditor/ckfinder/install.txt new file mode 100644 index 0000000..b07a6a0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/install.txt @@ -0,0 +1,8 @@ +CKFinder +======== +http://cksource.com/ckfinder +Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + +The full documentation, including installation instructions, is available at: + + http://docs.cksource.com/CKFinder diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/_translationstatus.txt b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/_translationstatus.txt new file mode 100644 index 0000000..cbe25dd --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/_translationstatus.txt @@ -0,0 +1,42 @@ +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license + +bg.js Found: 169 Missing: 24 +ca.js Found: 193 Missing: 0 +cs.js Found: 169 Missing: 24 +cy.js Found: 165 Missing: 28 +da.js Found: 169 Missing: 24 +de.js Found: 169 Missing: 24 +el.js Found: 169 Missing: 24 +eo.js Found: 169 Missing: 24 +es-mx.js Found: 169 Missing: 24 +es.js Found: 169 Missing: 24 +et.js Found: 169 Missing: 24 +fa.js Found: 168 Missing: 25 +fi.js Found: 169 Missing: 24 +fr.js Found: 192 Missing: 1 +gu.js Found: 169 Missing: 24 +he.js Found: 193 Missing: 0 +hi.js Found: 169 Missing: 24 +hr.js Found: 169 Missing: 24 +hu.js Found: 193 Missing: 0 +it.js Found: 192 Missing: 1 +ja.js Found: 177 Missing: 16 +lt.js Found: 169 Missing: 24 +lv.js Found: 98 Missing: 95 +nb.js Found: 169 Missing: 24 +nl.js Found: 169 Missing: 24 +nn.js Found: 169 Missing: 24 +no.js Found: 169 Missing: 24 +pl.js Found: 186 Missing: 7 +pt-br.js Found: 169 Missing: 24 +ro.js Found: 169 Missing: 24 +ru.js Found: 165 Missing: 28 +sk.js Found: 169 Missing: 24 +sl.js Found: 169 Missing: 24 +sr.js Found: 169 Missing: 24 +sv.js Found: 169 Missing: 24 +tr.js Found: 193 Missing: 0 +vi.js Found: 169 Missing: 24 +zh-cn.js Found: 169 Missing: 24 +zh-tw.js Found: 85 Missing: 108 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/bg.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/bg.js new file mode 100644 index 0000000..36e8813 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/bg.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Bulgarian + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['bg'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, недостъпно', + confirmCancel : 'Някои от опциите са променени, желаете ли да затворите диалоговия прозорец?', + ok : 'ОК', + cancel : 'Отказ', + confirmationTitle : 'Потвърждение', + messageTitle : 'Информация', + inputTitle : 'Въпрос', + undo : 'Възтанови', + redo : 'Предишно', + skip : 'Прескочи', + skipAll : 'Прескочи всички', + makeDecision : 'Какво действие ще бъде предприето?', + rememberDecision: 'Запомни ми избора' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'bg', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'd/m/yyyy h:MM aa', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Папки', + FolderLoading : 'Зареждане...', + FolderNew : 'Моля въведете име на новата папка: ', + FolderRename : 'Моля въведете име на новата папка: ', + FolderDelete : 'Сигурни ли сте, че желаете да изтриете папката "%1"?', + FolderRenaming : ' (Преименуване...)', + FolderDeleting : ' (Изтриване...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Моля въведете име на файл: ', + FileRenameExt : 'Сигурни ли сте, че желаете да промените файловото разширение? Файлът може да стане неизползваем.', + FileRenaming : 'Преименуване...', + FileDelete : 'Сигурни ли сте, че желаете да изтриете "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Зареждане...', + FilesEmpty : 'Папката е празна.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Кошница', + BasketClear : 'Изчисти кошницата', + BasketRemove : 'Премахни от кошницата', + BasketOpenFolder : 'Отвори основната папка', + BasketTruncateConfirm : 'Наиситина ли желаете да премахнете всичко файлове от кошницата?', + BasketRemoveConfirm : 'Наистина ли желаете да премахнете файла "%1" от кошницата?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Няма файлове в кошницата.', + BasketCopyFilesHere : 'Копиране на файлове от кошницата', + BasketMoveFilesHere : 'Местене на файлове от кошницата', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Качване', + UploadTip : 'Качване на нов файл', + Refresh : 'Опресняване', + Settings : 'Настройки', + Help : 'Помощ', + HelpTip : 'Помощ', + + // Context Menus + Select : 'Изберете', + SelectThumbnail : 'Изберете миниатюра', + View : 'Виж', + Download : 'Изтегли', + + NewSubFolder : 'Нов подпапка', + Rename : 'Преименуване', + Delete : 'Изтриване', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Копиране тук', + MoveDragDrop : 'Местене тук', + + // Dialogs + RenameDlgTitle : 'Преименуване', + NewNameDlgTitle : 'Ново име', + FileExistsDlgTitle : 'Файлът вече съществува', + SysErrorDlgTitle : 'Системна грешка', + + FileOverwrite : 'Препокриване', + FileAutorename : 'Авто-преименуване', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'ОК', + CancelBtn : 'Октаз', + CloseBtn : 'Затвори', + + // Upload Panel + UploadTitle : 'Качване на нов файл', + UploadSelectLbl : 'Изберете файл за качване', + UploadProgressLbl : '(Качва се в момента, моля изчакайте...)', + UploadBtn : 'Качване на избрания файл', + UploadBtnCancel : 'Отказ', + + UploadNoFileMsg : 'Моля изберете файл от Вашия компютър.', + UploadNoFolder : 'Моля изберете файл за качване.', + UploadNoPerms : 'Качването на файлове не е позволено.', + UploadUnknError : 'Проблем с изпращането на файла.', + UploadExtIncorrect : 'Файловото разширение не е позволено за тази папка.', + + // Flash Uploads + UploadLabel : 'Файлове за качване', + UploadTotalFiles : 'Общо файлове:', + UploadTotalSize : 'Общ размер:', + UploadSend : 'Качване', + UploadAddFiles : 'Добави файлове', + UploadClearFiles : 'Изчисти', + UploadCancel : 'Отказ от качването', + UploadRemove : 'Премахни', + UploadRemoveTip : 'Премахни !f', + UploadUploaded : 'Качено !n%', + UploadProcessing : 'Обработва се...', + + // Settings Panel + SetTitle : 'Настройки', + SetView : 'Изглед:', + SetViewThumb : 'Миниатюри', + SetViewList : 'Списък', + SetDisplay : 'Екран:', + SetDisplayName : 'Име на файл', + SetDisplayDate : 'Дата', + SetDisplaySize : 'Размер на файл', + SetSort : 'Подреждане:', + SetSortName : 'по име на файл', + SetSortDate : 'по дата', + SetSortSize : 'по размер', + SetSortExtension : 'по разширение', + + // Status Bar + FilesCountEmpty : '<празна папка>', + FilesCountOne : '1 файл', + FilesCountMany : '%1 файла', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Не е възможно да се извърши заявката. (ГРЕШКА %1)', + Errors : + { + 10 : 'Невалидна команда.', + 11 : 'Типът на ресурса не е определен в заявката.', + 12 : 'Заявеният тип на ресурса не е намерен.', + 102 : 'Невалиден файл или име на папка.', + 103 : 'Не е възможно да се извърши действието заради проблем с идентификацията.', + 104 : 'Не е възможно да се извърши действието заради проблем с правата.', + 105 : 'Невалидно файлово разширение.', + 109 : 'Невалидна заявка.', + 110 : 'Неизвестна грешка.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Файл или папка със същото име вече съществува.', + 116 : 'Папката не е намерена, опреснете и опитайте отново.', + 117 : 'Файлът не е намерен, опреснете и опитайте отново.', + 118 : 'Пътищата за цел и източник трябва да са еднакви.', + 201 : 'Файл с такова име съществува, каченият файл е преименуван на "%1".', + 202 : 'Невалиден файл.', + 203 : 'Невалиден файл. Размерът е прекалено голям.', + 204 : 'Каченият файл е повреден.', + 205 : 'Няма временна папка за качените файлове.', + 206 : 'Качването е спряно заради проблеми със сигурността. Файлът съдържа HTML данни.', + 207 : 'Каченият файл е преименуван на "%1".', + 300 : 'Преместването на файловете пропадна.', + 301 : 'Копирането на файловете пропадна.', + 500 : 'Файловият браузър е изключен заради проблеми със сигурността. Моля свържете се с Вашия системен администратор и проверете конфигурацията.', + 501 : 'Поддръжката за миниатюри е изключена.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Името на файла не може да празно.', + FileExists : 'Файлът %s вече е наличен.', + FolderEmpty : 'Името на папката не може да празно.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Името на файла не може да съдържа следните знаци: \n\\ / : * ? " < > |', + FolderInvChar : 'Името на папката не може да съдържа следните знаци: \n\\ / : * ? " < > |', + + PopupBlockView : 'Не е възможно отварянето на файла в нов прозорец. Моля конфигурирайте браузъра си и изключете блокирането на изкачащи прозорци за този сайт.', + XmlError : 'Не е възможно зареждането да данни чрез XML от уеб сървъра.', + XmlEmpty : 'Не е възможно зареждането на XML данни от уеб сървъра. Сървърът върна празен отговор.', + XmlRawResponse : 'Отговор от сървъра: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Оразмеряване %s', + sizeTooBig : 'Не бе възможно оразмеряването, защото зададените размери са по-големи от оригинала (%size).', + resizeSuccess : 'Снимката е оразмерена успешно.', + thumbnailNew : 'Създаване на миниатюра', + thumbnailSmall : 'Малка (%s)', + thumbnailMedium : 'Средна (%s)', + thumbnailLarge : 'Голяма (%s)', + newSize : 'Изберете нов размер', + width : 'Ширина', + height : 'Височина', + invalidHeight : 'Невалидна височина.', + invalidWidth : 'Невалидна ширина.', + invalidName : 'Невалидно име на файл.', + newImage : 'Създаване на нова снимка', + noExtensionChange : 'Файловото разширение не може да бъде сменено.', + imageSmall : 'Оригиналната снимка е прекалено малка.', + contextMenuName : 'Оразмеряване', + lockRatio : 'Заключване на съотношението', + resetSize : 'Нулиране на размера' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Запис', + fileOpenError : 'Невъзможно отваряне на файла.', + fileSaveSuccess : 'Файлът е записан успешно.', + contextMenuName : 'Промяна', + loadingFile : 'Зареждане на файл, моля почакайте...' + }, + + Maximize : + { + maximize : 'Максимизиране', + minimize : 'Минимизиране' + }, + + Gallery : + { + current : 'Снимка {current} от общо {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Търсене' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ca.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ca.js new file mode 100644 index 0000000..65f34dc --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ca.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Catalan + * language. +*/ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['ca'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, no disponible', + confirmCancel : 'Algunes opcions s\'han canviat\r\nEstàs segur de tancar el quadre de diàleg?', + ok : 'Acceptar', + cancel : 'Cancel·lar', + confirmationTitle : 'Confirmació', + messageTitle : 'Informació', + inputTitle : 'Pregunta', + undo : 'Desfer', + redo : 'Refer', + skip : 'Ometre', + skipAll : 'Ometre tots', + makeDecision : 'Quina acció s\'ha de realitzar?', + rememberDecision: 'Recordar la meva decisió' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'ca', + LangCode : 'ca', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Carpetes', + FolderLoading : 'Carregant...', + FolderNew : 'Si us plau, escriu el nom per la nova carpeta: ', + FolderRename : 'Si us plau, escriu el nom per la carpeta: ', + FolderDelete : 'Estàs segur que vols esborrar la carpeta "%1"?', + FolderRenaming : ' (Canviant el nom...)', + FolderDeleting : ' (Esborrant...)', + DestinationFolder : 'Carpeta de destinació', + + // Files + FileRename : 'Si us plau, escriu el nom del fitxer: ', + FileRenameExt : 'Estàs segur de canviar la extensió del fitxer? El fitxer pot quedar inservible.', + FileRenaming : 'Canviant el nom...', + FileDelete : 'Estàs segur d\'esborrar el fitxer "%1"?', + FilesDelete : 'Estàs segur d\'esborrar els %1 fitxers?', + FilesLoading : 'Carregant...', + FilesEmpty : 'Carpeta buida', + DestinationFile : 'Fitxer de destinació', + SkippedFiles : 'Llista dels fitxers omesos:', + + // Basket + BasketFolder : 'Cistella', + BasketClear : 'Buidar la cistella', + BasketRemove : 'Treure de la cistella', + BasketOpenFolder : 'Obrir carpeta pare', + BasketTruncateConfirm : 'Estàs segur de treure tots els fitxers de la cistella?', + BasketRemoveConfirm : 'Estàs segur de treure el fitxer "%1" de la cistella?', + BasketRemoveConfirmMultiple : 'Estàs segur de treure els %1 fitxers de la cistella?', + BasketEmpty : 'No hi ha fitxers a la cistella, arrossega i deixa anar alguns.', + BasketCopyFilesHere : 'Copiar fitxers de la cistella', + BasketMoveFilesHere : 'Moure fitxers de la cistella', + + // Global messages + OperationCompletedSuccess : 'Operació completada correctament.', + OperationCompletedErrors : 'Operació completada amb errors.', + FileError : '%s: %e', + + // Move and Copy files + MovedFilesNumber : 'Número de fitxers moguts: %s.', + CopiedFilesNumber : 'Número de fitxers copiats: %s.', + MoveFailedList : 'Els següents fitxers no s\'han pogut moure:
      %s', + CopyFailedList : 'Els següents fitxers no s\'han pogut copiar:
      %s', + + // Toolbar Buttons (some used elsewhere) + Upload : 'Afegir', + UploadTip : 'Afegir nou fitxer', + Refresh : 'Actualitzar', + Settings : 'Configuració', + Help : 'Ajuda', + HelpTip : 'Ajuda', + + // Context Menus + Select : 'Seleccionar', + SelectThumbnail : 'Seleccionar la icona', + View : 'Veure', + Download : 'Descarregar', + + NewSubFolder : 'Nova Subcarpeta', + Rename : 'Canviar el nom', + Delete : 'Esborrar', + DeleteFiles : 'Esborrar Fitxers', + + CopyDragDrop : 'Copiar aquí', + MoveDragDrop : 'Moure aquí', + + // Dialogs + RenameDlgTitle : 'Canviar el nom', + NewNameDlgTitle : 'Nou nom', + FileExistsDlgTitle : 'Fitxer existent', + SysErrorDlgTitle : 'Error de sistema', + + FileOverwrite : 'Sobreescriure', + FileAutorename : 'Auto-renombrar', + ManuallyRename : 'Renombrar manualment', + + // Generic + OkBtn : 'Acceptar', + CancelBtn : 'Cancel·lar', + CloseBtn : 'Tancar', + + // Upload Panel + UploadTitle : 'Afegir nou fitxer', + UploadSelectLbl : 'Triar el fitxer a pujar', + UploadProgressLbl : '(Pujada en progrés, si us plau esperi...)', + UploadBtn : 'Pujar el fitxer escollit', + UploadBtnCancel : 'Cancel·lar', + + UploadNoFileMsg : 'Si us plau, escull un fitxer del teu ordinador.', + UploadNoFolder : 'Si us plau, escull la carpeta abans d\'iniciar la pujada.', + UploadNoPerms : 'No pot pujar fitxers.', + UploadUnknError : 'Error enviant el fitxer.', + UploadExtIncorrect : 'La extensió del fitxer no està permesa en aquesta carpeta.', + + // Flash Uploads + UploadLabel : 'Fitxers a pujar', + UploadTotalFiles : 'Total de fitxers:', + UploadTotalSize : 'Grandària total:', + UploadSend : 'Afegir', + UploadAddFiles : 'Afegir fitxers', + UploadClearFiles : 'Esborrar fitxers', + UploadCancel : 'Cancel·lar la pujada', + UploadRemove : 'Treure', + UploadRemoveTip : 'Treure !f', + UploadUploaded : 'Enviat !n%', + UploadProcessing : 'Processant...', + + // Settings Panel + SetTitle : 'Configuració', + SetView : 'Vista:', + SetViewThumb : 'Icones', + SetViewList : 'Llista', + SetDisplay : 'Mostrar:', + SetDisplayName : 'Nom del fitxer', + SetDisplayDate : 'Data', + SetDisplaySize : 'Grandària del fitxer', + SetSort : 'Ordenar:', + SetSortName : 'per Nom', + SetSortDate : 'per Data', + SetSortSize : 'per Grandària', + SetSortExtension : 'per Extensió', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fitxer', + FilesCountMany : '%1 fitxers', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'No ha estat possible completar la solicitut. (Error %1)', + Errors : + { + 10 : 'Ordre incorrecte.', + 11 : 'El tipus de recurs no ha estat especificat a la solicitut.', + 12 : 'El tipus de recurs solicitat no és vàlid.', + 102 : 'Nom de fitxer o carpeta no vàlids.', + 103 : 'No s\'ha pogut completar la solicitut degut a les restriccions d\'autorització.', + 104 : 'No s\'ha pogut completar la solicitut degut a les restriccions en el sistema de fitxers.', + 105 : 'La extensió del fitxer no es vàlida.', + 109 : 'Petició invàlida.', + 110 : 'Error desconegut.', + 111 : 'No ha estat possible completar l\'operació a causa de la grandària del fitxer resultant.', + 115 : 'Ja existeix un fitxer o carpeta amb aquest nom.', + 116 : 'No s\'ha trobat la carpeta. Si us plau, actualitzi i torni-ho a provar.', + 117 : 'No s\'ha trobat el fitxer. Si us plau, actualitzi i torni-ho a provar.', + 118 : 'Les rutes origen i destí són iguals.', + 201 : 'Ja existeix un fitxer amb aquest nom. El fitxer pujat ha estat renombrat com a "%1".', + 202 : 'Fitxer invàlid.', + 203 : 'Fitxer invàlid. El pes és massa gran.', + 204 : 'El fitxer pujat està corrupte.', + 205 : 'La carpeta temporal no està disponible en el servidor per poder realitzar pujades.', + 206 : 'La pujada s\'ha cancel·lat per raons de seguretat. El fitxer conté codi HTML.', + 207 : 'El fitxer pujat ha estat renombrat com a "%1".', + 300 : 'Ha fallat el moure el(s) fitxer(s).', + 301 : 'Ha fallat el copiar el(s) fitxer(s).', + 500 : 'El navegador de fitxers està deshabilitat per raons de seguretat. Si us plau, contacti amb l\'administrador del sistema i comprovi el fitxer de configuració de CKFinder.', + 501 : 'El suport per a icones està deshabilitat.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'El nom del fitxer no pot estar buit.', + FileExists : 'El fitxer %s ja existeix.', + FolderEmpty : 'El nom de la carpeta no pot estar buit.', + FolderExists : 'La carpeta %s ja existeix.', + FolderNameExists : 'La carpeta ja existeix.', + + FileInvChar : 'El nom del fitxer no pot contenir cap dels caràcters següents: \n\\ / : * ? " < > |', + FolderInvChar : 'El nom de la carpeta no pot contenir cap dels caràcters següents: \n\\ / : * ? " < > |', + + PopupBlockView : 'No ha estat possible obrir el fitxer en una nova finestra. Si us plau, configuri el seu navegador i desactivi tots els blocadors de finestres per a aquesta pàgina.', + XmlError : 'No ha estat possible carregar correctament la resposta XML del servidor.', + XmlEmpty : 'No ha estat possible carregar correctament la resposta XML del servidor. El servidor ha enviat una cadena buida.', + XmlRawResponse : 'Resposta del servidor: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Redimensionar %s', + sizeTooBig : 'No es pot posar l\'altura o l\'amplada de la imatge més gran que les dimensions originals (%size).', + resizeSuccess : 'Imatge redimensionada correctament.', + thumbnailNew : 'Crear nova miniatura', + thumbnailSmall : 'Petita (%s)', + thumbnailMedium : 'Mitjana (%s)', + thumbnailLarge : 'Gran (%s)', + newSize : 'Establir nova grandària', + width : 'Amplada', + height : 'Altura', + invalidHeight : 'Altura invàlida.', + invalidWidth : 'Amplada invàlida.', + invalidName : 'Nom no vàlid.', + newImage : 'Crear nova imatge', + noExtensionChange : 'L\'extensió no es pot canviar.', + imageSmall : 'La imatge original és massa petita.', + contextMenuName : 'Redimensionar', + lockRatio : 'Proporcional', + resetSize : 'Grandària Original' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Desar', + fileOpenError : 'No es pot obrir el fitxero.', + fileSaveSuccess : 'Fitxer desat correctament.', + contextMenuName : 'Editar', + loadingFile : 'Carregant fitxer, si us plau, esperi...' + }, + + Maximize : + { + maximize : 'Maximitzar', + minimize : 'Minimitzar' + }, + + Gallery : + { + current : 'Imatge {current} de {total}' + }, + + Zip : + { + extractHereLabel : 'Extreure aquí', + extractToLabel : 'Extreure a...', + downloadZipLabel : 'Descarregar en zip', + compressZipLabel : 'Comprimir en zip', + removeAndExtract : 'Eliminar els existents i extreure', + extractAndOverwrite : 'Extreure sobreescrivint els fitxers existents', + extractSuccess : 'Fitxer extret correctament.' + }, + + Search : + { + searchPlaceholder : 'Cerca' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/cs.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/cs.js new file mode 100644 index 0000000..f2b01d2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/cs.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Czech + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['cs'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, nedostupné', + confirmCancel : 'Některá z nastavení byla změněna. Skutečně chcete dialogové okno zavřít?', + ok : 'OK', + cancel : 'Zrušit', + confirmationTitle : 'Potvrzení', + messageTitle : 'Informace', + inputTitle : 'Otázka', + undo : 'Zpět', + redo : 'Znovu', + skip : 'Přeskočit', + skipAll : 'Přeskočit vše', + makeDecision : 'Co by se mělo provést?', + rememberDecision: 'Zapamatovat si mé rozhodnutí' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'cs', + LangCode : 'cs', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'd/m/yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Složky', + FolderLoading : 'Načítání...', + FolderNew : 'Zadejte název nové složky: ', + FolderRename : 'Zadejte nový název složky: ', + FolderDelete : 'Opravdu chcete složku "%1" smazat?', + FolderRenaming : ' (Přejmenovávání...)', + FolderDeleting : ' (Mazání...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Zadejte nový název souboru: ', + FileRenameExt : 'Opravdu chcete změnit příponu souboru? Soubor se může stát nepoužitelným.', + FileRenaming : 'Přejmenovávání...', + FileDelete : 'Opravdu chcete smazat soubor "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Načítání...', + FilesEmpty : 'Prázdná složka.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Košík', + BasketClear : 'Vyčistit Košík', + BasketRemove : 'Odstranit z Košíku', + BasketOpenFolder : 'Otevřít nadřazenou složku', + BasketTruncateConfirm : 'Opravdu chcete z Košíku odstranit všechny soubory?', + BasketRemoveConfirm : 'Opravdu chcete odstranit soubor "%1" z Košíku?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'V Košíku nejsou žádné soubory, tak sem některé přetáhněte.', + BasketCopyFilesHere : 'Kopírovat soubory z Košíku', + BasketMoveFilesHere : 'Přesunout soubory z Košíku', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Nahrát', + UploadTip : 'Nahrát nový soubor', + Refresh : 'Znovu načíst', + Settings : 'Nastavení', + Help : 'Nápověda', + HelpTip : 'Nápověda', + + // Context Menus + Select : 'Vybrat', + SelectThumbnail : 'Vybrat náhled', + View : 'Zobrazit', + Download : 'Uložit jako', + + NewSubFolder : 'Nová podsložka', + Rename : 'Přejmenovat', + Delete : 'Smazat', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Zkopírovat sem', + MoveDragDrop : 'Přesunout sem', + + // Dialogs + RenameDlgTitle : 'Přejmenovat', + NewNameDlgTitle : 'Nový název', + FileExistsDlgTitle : 'Soubor již existuje', + SysErrorDlgTitle : 'Chyba systému', + + FileOverwrite : 'Přepsat', + FileAutorename : 'Automaticky přejmenovat', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Zrušit', + CloseBtn : 'Zavřít', + + // Upload Panel + UploadTitle : 'Nahrát nový soubor', + UploadSelectLbl : 'Zvolit soubor k nahrání', + UploadProgressLbl : '(Probíhá nahrávání, čekejte...)', + UploadBtn : 'Nahrát zvolený soubor', + UploadBtnCancel : 'Zrušit', + + UploadNoFileMsg : 'Vyberte prosím soubor z Vašeho počítače.', + UploadNoFolder : 'Před nahráváním vyberte složku prosím.', + UploadNoPerms : 'Nahrávání souborů není povoleno.', + UploadUnknError : 'Chyba při posílání souboru.', + UploadExtIncorrect : 'Přípona souboru není v této složce povolena.', + + // Flash Uploads + UploadLabel : 'Soubory k nahrání', + UploadTotalFiles : 'Celkem souborů:', + UploadTotalSize : 'Celková velikost:', + UploadSend : 'Nahrát', + UploadAddFiles : 'Přidat soubory', + UploadClearFiles : 'Vyčistit soubory', + UploadCancel : 'Zrušit nahrávání', + UploadRemove : 'Odstranit', + UploadRemoveTip : 'Odstranit !f', + UploadUploaded : 'Nahráno !n%', + UploadProcessing : 'Zpracovávání...', + + // Settings Panel + SetTitle : 'Nastavení', + SetView : 'Zobrazení:', + SetViewThumb : 'Náhled', + SetViewList : 'Seznam', + SetDisplay : 'Zobrazit:', + SetDisplayName : 'Název', + SetDisplayDate : 'Datum', + SetDisplaySize : 'Velikost', + SetSort : 'Seřazení:', + SetSortName : 'Podle názvu', + SetSortDate : 'Podle data', + SetSortSize : 'Podle velikosti', + SetSortExtension : 'Podle přípony', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 soubor', + FilesCountMany : '%1 souborů', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Příkaz nebylo možné dokončit. (Chyba %1)', + Errors : + { + 10 : 'Neplatný příkaz.', + 11 : 'Typ zdroje nebyl v požadavku určen.', + 12 : 'Požadovaný typ zdroje není platný.', + 102 : 'Špatné název souboru, nebo složky.', + 103 : 'Nebylo možné příkaz dokončit kvůli omezení oprávnění.', + 104 : 'Nebylo možné příkaz dokončit kvůli omezení oprávnění souborového systému.', + 105 : 'Neplatná přípona souboru.', + 109 : 'Neplatný požadavek.', + 110 : 'Neznámá chyba.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Soubor nebo složka se stejným názvem již existuje.', + 116 : 'Složka nenalezena, prosím obnovte a zkuste znovu.', + 117 : 'Soubor nenalezen, prosím obnovte seznam souborů a zkuste znovu.', + 118 : 'Cesty zdroje a cíle jsou stejné.', + 201 : 'Soubor se stejným názvem je již dostupný, nahraný soubor byl přejmenován na "%1".', + 202 : 'Neplatný soubor.', + 203 : 'Neplatný soubor. Velikost souboru je příliš velká.', + 204 : 'Nahraný soubor je poškozen.', + 205 : 'Na serveru není dostupná dočasná složka pro nahrávání.', + 206 : 'Nahrávání zrušeno z bezpečnostních důvodů. Soubor obsahuje data podobná HTML.', + 207 : 'Nahraný soubor byl přejmenován na "%1".', + 300 : 'Přesunování souboru(ů) selhalo.', + 301 : 'Kopírování souboru(ů) selhalo.', + 500 : 'Průzkumník souborů je z bezpečnostních důvodů zakázán. Zdělte to prosím správci systému a zkontrolujte soubor nastavení CKFinder.', + 501 : 'Podpora náhledů je zakázána.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Název souboru nemůže být prázdný.', + FileExists : 'Soubor %s již existuje.', + FolderEmpty : 'Název složky nemůže být prázdný.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Název souboru nesmí obsahovat následující znaky: \n\\ / : * ? " < > |', + FolderInvChar : 'Název složky nesmí obsahovat následující znaky: \n\\ / : * ? " < > |', + + PopupBlockView : 'Soubor nebylo možné otevřít do nového okna. Prosím nastavte si Váš prohlížeč a zakažte veškeré blokování vyskakovacích oken.', + XmlError : 'Nebylo možné správně načíst XML odpověď z internetového serveru.', + XmlEmpty : 'Nebylo možné načíst XML odpověď z internetového serveru. Server vrátil prázdnou odpověď.', + XmlRawResponse : 'Čistá odpověď od serveru: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Změnit velikost %s', + sizeTooBig : 'Nelze nastavit šířku či výšku obrázku na hodnotu vyšší než původní velikost (%size).', + resizeSuccess : 'Úspěšně změněna velikost obrázku.', + thumbnailNew : 'Vytvořit nový náhled', + thumbnailSmall : 'Malý (%s)', + thumbnailMedium : 'Střední (%s)', + thumbnailLarge : 'Velký (%s)', + newSize : 'Nastavit novou velikost', + width : 'Šířka', + height : 'Výška', + invalidHeight : 'Neplatná výška.', + invalidWidth : 'Neplatná šířka.', + invalidName : 'Neplatný název souboru.', + newImage : 'Vytvořit nový obrázek', + noExtensionChange : 'Příponu souboru nelze změnit.', + imageSmall : 'Zdrojový obrázek je příliš malý.', + contextMenuName : 'Změnit velikost', + lockRatio : 'Uzamknout poměr', + resetSize : 'Původní velikost' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Uložit', + fileOpenError : 'Soubor nelze otevřít.', + fileSaveSuccess : 'Soubor úspěšně uložen.', + contextMenuName : 'Upravit', + loadingFile : 'Načítání souboru, čekejte prosím...' + }, + + Maximize : + { + maximize : 'Maximalizovat', + minimize : 'Minimalizovat' + }, + + Gallery : + { + current : 'Obrázek {current} z {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Hledat' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/cy.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/cy.js new file mode 100644 index 0000000..0e1fee1 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/cy.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Welsh + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['cy'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, ddim ar gael', + confirmCancel : 'Cafodd rhai o\'r opsiynau eu newid. Ydych chi wir am gau ffenestr y deialog?', + ok : 'Iawn', + cancel : 'Diddymu', + confirmationTitle : 'Cadarnhad', + messageTitle : 'Gwybodaeth', + inputTitle : 'Cwestiwn', + undo : 'Dadwneud', + redo : 'Ailadrodd', + skip : 'Neidio', + skipAll : 'Neidio pob', + makeDecision : 'Pa weithred i\'w chymryd?', + rememberDecision: 'Cofio fy mhenderfyniad' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'cy', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'mm/dd/yyyy HH:MM', + DateAmPm : ['YB', 'YH'], + + // Folders + FoldersTitle : 'Ffolderi', + FolderLoading : 'Yn llwytho...', + FolderNew : 'Rhowch enw newydd y ffolder: ', + FolderRename : 'Rhowch enw newydd y ffolder: ', + FolderDelete : 'Ydych chi wir am ddileu\'r ffolder "%1"?', + FolderRenaming : ' (Yn ailenwi...)', + FolderDeleting : ' (Yn dileu...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Rhowch enw newydd y ffeil: ', + FileRenameExt : 'Ydych chi wir am newid estyniad y ffeil? Gall hwn atal y ffeil rhag gweithio.', + FileRenaming : 'Yn ailenwi...', + FileDelete : 'Ydych chi wir am ddileu\'r ffeil "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Yn llwytho...', + FilesEmpty : 'Mae\'r ffolder yn wag.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Basged', + BasketClear : 'Clirio\'r Fasged', + BasketRemove : 'Tynnu o\'r Fasged', + BasketOpenFolder : 'Agor yr Uwch Ffolder', + BasketTruncateConfirm : 'Ydych chi wir am dynnu\'r holl ffeiliau o\'r fasged?', + BasketRemoveConfirm : 'Ydych chi wir am dynnu\'r ffeil "%1" o\'r fasged?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Dim ffeiliau yn y fasged, llusgwch a\'m gollwng.', + BasketCopyFilesHere : 'Copïo Ffeiliau o\'r Fasged', + BasketMoveFilesHere : 'Symud Ffeiliau o\'r Fasged', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Lanlwytho', + UploadTip : 'Lanlwytho Ffeil Newydd', + Refresh : 'Adfywio', + Settings : 'Gosodiadau', + Help : 'Cymorth', + HelpTip : 'Cymorth', + + // Context Menus + Select : 'Dewis', + SelectThumbnail : 'Dewis Bawdlun', + View : 'Dangos', + Download : 'Lawrlwytho', + + NewSubFolder : 'Is-ffolder Newydd', + Rename : 'Ailenwi', + Delete : 'Dileu', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Copïo Yma', + MoveDragDrop : 'Symud Yma', + + // Dialogs + RenameDlgTitle : 'Ailenwi', + NewNameDlgTitle : 'Enw Newydd', + FileExistsDlgTitle : 'Ffeil Eisoes yn Bodoli', + SysErrorDlgTitle : 'Gwall System', + + FileOverwrite : 'Trosysgrifo', + FileAutorename : 'Awto-ailenwi', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'Iawn', + CancelBtn : 'Diddymu', + CloseBtn : 'Cau', + + // Upload Panel + UploadTitle : 'Lanlwytho Ffeil Newydd', + UploadSelectLbl : 'Dewis ffeil i lanlwytho', + UploadProgressLbl : '(Lanlwythiad ar y gweill, arhoswch...)', + UploadBtn : 'Lanlwytho\'r Ffeil a Ddewiswyd', + UploadBtnCancel : 'Diddymu', + + UploadNoFileMsg : 'Dewiswch ffeil ar eich cyfrifiadur.', + UploadNoFolder : 'Dewiswch ffolder cyn lanlwytho.', + UploadNoPerms : 'Does dim hawl lanlwytho ffeiliau.', + UploadUnknError : 'Gwall wrth anfon y ffeil.', + UploadExtIncorrect : 'Does dim hawl cadw\'r ffeiliau â\'r estyniad hwn yn y ffolder hwn.', + + // Flash Uploads + UploadLabel : 'Ffeiliau i\'w Lanlwytho', + UploadTotalFiles : 'Nifer y Ffeiliau:', + UploadTotalSize : 'Maint Cyfan:', + UploadSend : 'Lanlwytho', + UploadAddFiles : 'Ychwanegu Ffeiliau', + UploadClearFiles : 'Clirio Ffeiliau', + UploadCancel : 'Diddymu Lanlwythiad', + UploadRemove : 'Tynnu', + UploadRemoveTip : 'Tynnu !f', + UploadUploaded : 'Wedi Lanlwytho !n%', + UploadProcessing : 'Yn prosesu...', + + // Settings Panel + SetTitle : 'Gosodiadau', + SetView : 'Golwg:', + SetViewThumb : 'Bawdluniau', + SetViewList : 'Rhestr', + SetDisplay : 'Arddangosiad:', + SetDisplayName : 'Enw\'r Ffeil', + SetDisplayDate : 'Dyddiad', + SetDisplaySize : 'Maint y Ffeil', + SetSort : 'Trefnu:', + SetSortName : 'gan Enw\'r Ffeil', + SetSortDate : 'gan y Dyddiad', + SetSortSize : 'gan y Maint', + SetSortExtension : 'gan Estyniad', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 ffeil', + FilesCountMany : '%1 ffeil', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', // MISSING + Gb : '%1 GB', // MISSING + SizePerSecond : '%1/s', // MISSING + + // Connector Error Messages. + ErrorUnknown : 'Does dim modd cwblhau\'r cais. (Gwall %1)', + Errors : + { + 10 : 'Gorchymyn annilys.', + 11 : 'Doedd math yr adnodd heb ei benodi yn y cais.', + 12 : 'Dyw math yr adnodd ddim yn ddilys.', + 102 : 'Enw ffeil neu ffolder annilys.', + 103 : 'Doedd dim modd cwblhau\'r cais oherwydd cyfyngiadau awdurdodi.', + 104 : 'Doedd dim modd cwblhau\'r cais oherwydd cyfyngiadau i hawliau\'r system ffeilio.', + 105 : 'Estyniad ffeil annilys.', + 109 : 'Cais annilys.', + 110 : 'Gwall anhysbys.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Mae ffeil neu ffolder gyda\'r un enw yn bodoli yn barod.', + 116 : 'Methu â darganfod y ffolder. Adfywiwch a cheisio eto.', + 117 : 'Methu â darganfod y ffeil. Adfywiwch y rhestr ffeiliau a cheisio eto.', + 118 : 'Mae\'r llwybrau gwreiddiol a tharged yn unfath.', + 201 : 'Mae ffeil â\'r enw hwnnw yn bodoli yn barod. Cafodd y ffeil a lanlwythwyd ei hailenwi i "%1".', + 202 : 'Ffeil annilys.', + 203 : 'Ffeil annilys. Mae maint y ffeil yn rhy fawr.', + 204 : 'Mae\'r ffeil a lanwythwyd wedi chwalu.', + 205 : 'Does dim ffolder dros dro ar gael er mwyn lanlwytho ffeiliau iddo ar y gweinydd hwn.', + 206 : 'Cafodd y lanlwythiad ei ddiddymu oherwydd rhesymau diogelwch. Mae\'r ffeil yn cynnwys data yn debyg i HTML.', + 207 : 'Cafodd y ffeil a lanlwythwyd ei hailenwi i "%1".', + 300 : 'Methodd symud y ffeil(iau).', + 301 : 'Methodd copïo\'r ffeil(iau).', + 500 : 'Cafodd y porwr ffeiliau ei anallogi oherwydd rhesymau diogelwch. Cysylltwch â\'ch gweinyddwr system a gwirio\'ch ffeil ffurfwedd CKFinder.', + 501 : 'Mae cynhaliaeth bawdluniau wedi\'i hanalluogi.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Does dim modd i enw\'r ffeil fod yn wag.', + FileExists : 'Mae\'r ffeil %s yn bodoli yn barod.', + FolderEmpty : 'Does dim modd i\'r ffolder fod yn wag.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Does dim hawl defnyddio\'r nodau canlynol i enwi ffeil: \n\\ / : * ? " < > |', + FolderInvChar : 'Does dim hawl defnyddio\'r nodau canlynol i enwi ffolder: \n\\ / : * ? " < > |', + + PopupBlockView : 'Doedd dim modd agor y ffeil mewn ffenestr newydd. Bydd angen ffurfweddu\'r porwr i analluogi pob ataliwr \'popup\' ar gyfer y safle hwn.', + XmlError : 'Doedd dim modd llwytho\'r ymateb XML yn gywir o\'r gweinydd.', + XmlEmpty : 'Doedd dim modd llwytho\'r ymateb XML o\'r gweinydd gwe. Gwnaeth y gweinydd ddychwelyd ymateb gwag.', + XmlRawResponse : 'Yr ymateb noeth o\'r gweinydd: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Ailmeintio %s', + sizeTooBig : 'Methu â gosod lled neu uchder y ddelwedd i werth yn uwch na\'r maint gwreiddiol (%size).', + resizeSuccess : 'Delwedd wedi\'i hailmeintio.', + thumbnailNew : 'Creu bawdlun newydd', + thumbnailSmall : 'Bach (%s)', + thumbnailMedium : 'Canolig (%s)', + thumbnailLarge : 'Mawr (%s)', + newSize : 'Gosod maint newydd', + width : 'Lled', + height : 'Uchder', + invalidHeight : 'Uchder annilys.', + invalidWidth : 'Lled annilys.', + invalidName : 'Enw ffeil annilys.', + newImage : 'Creu delwedd newydd', + noExtensionChange : 'Methu â newid estyniad y ffeil.', + imageSmall : 'Mae\'r ddelwedd wreiddiol yn rhy fach.', + contextMenuName : 'Ailmeintio', + lockRatio : 'Cloi\'r cymhareb', + resetSize : 'Ailosod y maint' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Cadw', + fileOpenError : 'Methu ag agor y ffeil.', + fileSaveSuccess : 'Ffeil wedi\'i chadw.', + contextMenuName : 'Golygu', + loadingFile : 'Llwytho ffeil, arhoswch...' + }, + + Maximize : + { + maximize : 'Uchafu', + minimize : 'Isafu' + }, + + Gallery : + { + current : 'Image {current} of {total}' // MISSING + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Chwilio' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/da.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/da.js new file mode 100644 index 0000000..dc181ba --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/da.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Danish + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['da'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, ikke tilgængelig', + confirmCancel : 'Nogle af indstillingerne er blevet ændret. Er du sikker på at lukke dialogen?', + ok : 'OK', + cancel : 'Annuller', + confirmationTitle : 'Bekræftelse', + messageTitle : 'Information', + inputTitle : 'Spørgsmål', + undo : 'Fortryd', + redo : 'Annuller fortryd', + skip : 'Skip', + skipAll : 'Skip alle', + makeDecision : 'Hvad skal der foretages?', + rememberDecision: 'Husk denne indstilling' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'da', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd-mm-yyyy HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Mapper', + FolderLoading : 'Indlæser...', + FolderNew : 'Skriv navnet på den nye mappe: ', + FolderRename : 'Skriv det nye navn på mappen: ', + FolderDelete : 'Er du sikker på, at du vil slette mappen "%1"?', + FolderRenaming : ' (Omdøber...)', + FolderDeleting : ' (Sletter...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Skriv navnet på den nye fil: ', + FileRenameExt : 'Er du sikker på, at du vil ændre filtypen? Filen kan muligvis ikke bruges bagefter.', + FileRenaming : '(Omdøber...)', + FileDelete : 'Er du sikker på, at du vil slette filen "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Indlæser...', + FilesEmpty : 'Tom mappe', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Kurv', + BasketClear : 'Tøm kurv', + BasketRemove : 'Fjern fra kurv', + BasketOpenFolder : 'Åben overordnet mappe', + BasketTruncateConfirm : 'Er du sikker på at du vil tømme kurven?', + BasketRemoveConfirm : 'Er du sikker på at du vil slette filen "%1" fra kurven?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Ingen filer i kurven, brug musen til at trække filer til kurven.', + BasketCopyFilesHere : 'Kopier Filer fra kurven', + BasketMoveFilesHere : 'Flyt Filer fra kurven', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Upload', + UploadTip : 'Upload ny fil', + Refresh : 'Opdatér', + Settings : 'Indstillinger', + Help : 'Hjælp', + HelpTip : 'Hjælp', + + // Context Menus + Select : 'Vælg', + SelectThumbnail : 'Vælg thumbnail', + View : 'Vis', + Download : 'Download', + + NewSubFolder : 'Ny undermappe', + Rename : 'Omdøb', + Delete : 'Slet', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Kopier hertil', + MoveDragDrop : 'Flyt hertil', + + // Dialogs + RenameDlgTitle : 'Omdøb', + NewNameDlgTitle : 'Nyt navn', + FileExistsDlgTitle : 'Filen eksisterer allerede', + SysErrorDlgTitle : 'System fejl', + + FileOverwrite : 'Overskriv', + FileAutorename : 'Auto-omdøb', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Annullér', + CloseBtn : 'Luk', + + // Upload Panel + UploadTitle : 'Upload ny fil', + UploadSelectLbl : 'Vælg den fil, som du vil uploade', + UploadProgressLbl : '(Uploader, vent venligst...)', + UploadBtn : 'Upload filen', + UploadBtnCancel : 'Annuller', + + UploadNoFileMsg : 'Vælg en fil på din computer.', + UploadNoFolder : 'Venligst vælg en mappe før upload startes.', + UploadNoPerms : 'Upload er ikke tilladt.', + UploadUnknError : 'Fejl ved upload.', + UploadExtIncorrect : 'Denne filtype er ikke tilladt i denne mappe.', + + // Flash Uploads + UploadLabel : 'Files to Upload', + UploadTotalFiles : 'Total antal filer:', + UploadTotalSize : 'Total størrelse:', + UploadSend : 'Upload', + UploadAddFiles : 'Tilføj filer', + UploadClearFiles : 'Nulstil filer', + UploadCancel : 'Annuller upload', + UploadRemove : 'Fjern', + UploadRemoveTip : 'Fjern !f', + UploadUploaded : 'Uploadede !n%', + UploadProcessing : 'Udfører...', + + // Settings Panel + SetTitle : 'Indstillinger', + SetView : 'Vis:', + SetViewThumb : 'Thumbnails', + SetViewList : 'Liste', + SetDisplay : 'Thumbnails:', + SetDisplayName : 'Filnavn', + SetDisplayDate : 'Dato', + SetDisplaySize : 'Størrelse', + SetSort : 'Sortering:', + SetSortName : 'efter filnavn', + SetSortDate : 'efter dato', + SetSortSize : 'efter størrelse', + SetSortExtension : 'efter filtype', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fil', + FilesCountMany : '%1 filer', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Det var ikke muligt at fuldføre handlingen. (Fejl: %1)', + Errors : + { + 10 : 'Ugyldig handling.', + 11 : 'Ressourcetypen blev ikke angivet i anmodningen.', + 12 : 'Ressourcetypen er ikke gyldig.', + 102 : 'Ugyldig fil eller mappenavn.', + 103 : 'Det var ikke muligt at fuldføre handlingen på grund af en begrænsning i rettigheder.', + 104 : 'Det var ikke muligt at fuldføre handlingen på grund af en begrænsning i filsystem rettigheder.', + 105 : 'Ugyldig filtype.', + 109 : 'Ugyldig anmodning.', + 110 : 'Ukendt fejl.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'En fil eller mappe med det samme navn eksisterer allerede.', + 116 : 'Mappen blev ikke fundet. Opdatér listen eller prøv igen.', + 117 : 'Filen blev ikke fundet. Opdatér listen eller prøv igen.', + 118 : 'Originalplacering og destination er ens.', + 201 : 'En fil med det samme filnavn eksisterer allerede. Den uploadede fil er blevet omdøbt til "%1".', + 202 : 'Ugyldig fil.', + 203 : 'Ugyldig fil. Filstørrelsen er for stor.', + 204 : 'Den uploadede fil er korrupt.', + 205 : 'Der er ikke en midlertidig mappe til upload til rådighed på serveren.', + 206 : 'Upload annulleret af sikkerhedsmæssige årsager. Filen indeholder HTML-lignende data.', + 207 : 'Den uploadede fil er blevet omdøbt til "%1".', + 300 : 'Flytning af fil(er) fejlede.', + 301 : 'Kopiering af fil(er) fejlede.', + 500 : 'Filbrowseren er deaktiveret af sikkerhedsmæssige årsager. Kontakt systemadministratoren eller kontrollér CKFinders konfigurationsfil.', + 501 : 'Understøttelse af thumbnails er deaktiveret.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Filnavnet må ikke være tomt.', + FileExists : 'Fil %erne eksisterer allerede.', + FolderEmpty : 'Mappenavnet må ikke være tomt.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Filnavnet må ikke indeholde et af følgende tegn: \n\\ / : * ? " < > |', + FolderInvChar : 'Mappenavnet må ikke indeholde et af følgende tegn: \n\\ / : * ? " < > |', + + PopupBlockView : 'Det var ikke muligt at åbne filen i et nyt vindue. Kontrollér konfigurationen i din browser, og deaktivér eventuelle popup-blokkere for denne hjemmeside.', + XmlError : 'Det var ikke muligt at hente den korrekte XML kode fra serveren.', + XmlEmpty : 'Det var ikke muligt at hente den korrekte XML kode fra serveren. Serveren returnerede et tomt svar.', + XmlRawResponse : 'Serveren returenede følgende output: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Rediger størrelse %s', + sizeTooBig : 'Kan ikke ændre billedets højde eller bredde til en værdi større end dets originale størrelse (%size).', + resizeSuccess : 'Størrelsen er nu ændret.', + thumbnailNew : 'Opret ny thumbnail', + thumbnailSmall : 'Lille (%s)', + thumbnailMedium : 'Mellem (%s)', + thumbnailLarge : 'Stor (%s)', + newSize : 'Rediger størrelse', + width : 'Bredde', + height : 'Højde', + invalidHeight : 'Ugyldig højde.', + invalidWidth : 'Ugyldig bredde.', + invalidName : 'Ugyldigt filenavn.', + newImage : 'Opret nyt billede.', + noExtensionChange : 'Filtypen kan ikke ændres.', + imageSmall : 'Originalfilen er for lille.', + contextMenuName : 'Rediger størrelse', + lockRatio : 'Lås størrelsesforhold', + resetSize : 'Nulstil størrelse' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Gem', + fileOpenError : 'Filen kan ikke åbnes.', + fileSaveSuccess : 'Filen er nu gemt.', + contextMenuName : 'Rediger', + loadingFile : 'Henter fil, vent venligst...' + }, + + Maximize : + { + maximize : 'Maximér', + minimize : 'Minimér' + }, + + Gallery : + { + current : 'Billede {current} ud af {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Søg' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/de.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/de.js new file mode 100644 index 0000000..52b30ce --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/de.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the German + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['de'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, nicht verfügbar', + confirmCancel : 'Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?', + ok : 'OK', + cancel : 'Abbrechen', + confirmationTitle : 'Bestätigung', + messageTitle : 'Information', + inputTitle : 'Frage', + undo : 'Rückgängig', + redo : 'Wiederherstellen', + skip : 'Überspringen', + skipAll : 'Alle überspringen', + makeDecision : 'Bitte Auswahl treffen.', + rememberDecision: 'Entscheidung merken' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'de', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'd.m.yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Verzeichnisse', + FolderLoading : 'Laden...', + FolderNew : 'Bitte geben Sie den neuen Verzeichnisnamen an: ', + FolderRename : 'Bitte geben Sie den neuen Verzeichnisnamen an: ', + FolderDelete : 'Wollen Sie wirklich den Ordner "%1" löschen?', + FolderRenaming : ' (Umbenennen...)', + FolderDeleting : ' (Löschen...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Bitte geben Sie den neuen Dateinamen an: ', + FileRenameExt : 'Wollen Sie wirklich die Dateierweiterung ändern? Die Datei könnte unbrauchbar werden!', + FileRenaming : 'Umbennenen...', + FileDelete : 'Wollen Sie wirklich die Datei "%1" löschen?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Laden...', + FilesEmpty : 'Verzeichnis ist leer.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Korb', + BasketClear : 'Korb löschen', + BasketRemove : 'Aus dem Korb entfernen', + BasketOpenFolder : 'Übergeordneten Ordner öffnen', + BasketTruncateConfirm : 'Wollen Sie wirklich alle Dateien aus dem Korb entfernen?', + BasketRemoveConfirm : 'Wollen Sie wirklich die Datei "%1" aus dem Korb entfernen?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Keine Dateien im Korb, einfach welche reinziehen.', + BasketCopyFilesHere : 'Dateien aus dem Korb kopieren', + BasketMoveFilesHere : 'Dateien aus dem Korb verschieben', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Hochladen', + UploadTip : 'Neue Datei hochladen', + Refresh : 'Aktualisieren', + Settings : 'Einstellungen', + Help : 'Hilfe', + HelpTip : 'Hilfe', + + // Context Menus + Select : 'Auswählen', + SelectThumbnail : 'Miniatur auswählen', + View : 'Ansehen', + Download : 'Herunterladen', + + NewSubFolder : 'Neues Unterverzeichnis', + Rename : 'Umbenennen', + Delete : 'Löschen', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Hierher kopieren', + MoveDragDrop : 'Hierher verschieben', + + // Dialogs + RenameDlgTitle : 'Umbenennen', + NewNameDlgTitle : 'Neuer Name', + FileExistsDlgTitle : 'Datei existiert bereits', + SysErrorDlgTitle : 'Systemfehler', + + FileOverwrite : 'Überschreiben', + FileAutorename : 'Automatisch umbenennen', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Abbrechen', + CloseBtn : 'Schließen', + + // Upload Panel + UploadTitle : 'Neue Datei hochladen', + UploadSelectLbl : 'Bitte wählen Sie die Datei aus', + UploadProgressLbl : '(Die Daten werden übertragen, bitte warten...)', + UploadBtn : 'Ausgewählte Datei hochladen', + UploadBtnCancel : 'Abbrechen', + + UploadNoFileMsg : 'Bitte wählen Sie eine Datei auf Ihrem Computer aus.', + UploadNoFolder : 'Bitte ein Verzeichnis vor dem Hochladen wählen.', + UploadNoPerms : 'Datei hochladen nicht erlaubt.', + UploadUnknError : 'Fehler bei Dateitragung.', + UploadExtIncorrect : 'Dateinamekürzel nicht in diesem Verzeichnis erlaubt.', + + // Flash Uploads + UploadLabel : 'Dateien zum Hochladen', + UploadTotalFiles : 'Gesamtanzahl Dateien:', + UploadTotalSize : 'Gesamtgröße:', + UploadSend : 'Hochladen', + UploadAddFiles : 'Datei hinzufügen', + UploadClearFiles : 'Dateiliste löschen', + UploadCancel : 'Upload abbrechen', + UploadRemove : 'Entfernen', + UploadRemoveTip : 'Entfernen !f', + UploadUploaded : 'Hochgeladen !n%', + UploadProcessing : 'In Arbeit...', + + // Settings Panel + SetTitle : 'Einstellungen', + SetView : 'Ansicht:', + SetViewThumb : 'Miniaturansicht', + SetViewList : 'Liste', + SetDisplay : 'Anzeige:', + SetDisplayName : 'Dateiname', + SetDisplayDate : 'Datum', + SetDisplaySize : 'Dateigröße', + SetSort : 'Sortierung:', + SetSortName : 'nach Dateinamen', + SetSortDate : 'nach Datum', + SetSortSize : 'nach Größe', + SetSortExtension : 'nach Dateiendung', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 Datei', + FilesCountMany : '%1 Datei', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Ihre Anfrage konnte nicht bearbeitet werden. (Fehler %1)', + Errors : + { + 10 : 'Unbekannter Befehl.', + 11 : 'Der Ressourcentyp wurde nicht spezifiziert.', + 12 : 'Der Ressourcentyp ist nicht gültig.', + 102 : 'Ungültiger Datei oder Verzeichnisname.', + 103 : 'Ihre Anfrage konnte wegen Authorisierungseinschränkungen nicht durchgeführt werden.', + 104 : 'Ihre Anfrage konnte wegen Dateisystemeinschränkungen nicht durchgeführt werden.', + 105 : 'Invalid file extension.', + 109 : 'Unbekannte Anfrage.', + 110 : 'Unbekannter Fehler.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Es existiert bereits eine Datei oder ein Ordner mit dem gleichen Namen.', + 116 : 'Verzeichnis nicht gefunden. Bitte aktualisieren Sie die Anzeige und versuchen es noch einmal.', + 117 : 'Datei nicht gefunden. Bitte aktualisieren Sie die Dateiliste und versuchen es noch einmal.', + 118 : 'Quell- und Zielpfad sind gleich.', + 201 : 'Es existiert bereits eine Datei unter gleichem Namen. Die hochgeladene Datei wurde unter "%1" gespeichert.', + 202 : 'Ungültige Datei.', + 203 : 'ungültige Datei. Die Dateigröße ist zu groß.', + 204 : 'Die hochgeladene Datei ist korrupt.', + 205 : 'Es existiert kein temp. Ordner für das Hochladen auf den Server.', + 206 : 'Das Hochladen wurde aus Sicherheitsgründen abgebrochen. Die Datei enthält HTML-Daten.', + 207 : 'Die hochgeladene Datei wurde unter "%1" gespeichert.', + 300 : 'Verschieben der Dateien fehlgeschlagen.', + 301 : 'Kopieren der Dateien fehlgeschlagen.', + 500 : 'Der Dateibrowser wurde aus Sicherheitsgründen deaktiviert. Bitte benachrichtigen Sie Ihren Systemadministrator und prüfen Sie die Konfigurationsdatei.', + 501 : 'Die Miniaturansicht wurde deaktivert.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Der Dateinamen darf nicht leer sein.', + FileExists : 'Datei %s existiert bereits.', + FolderEmpty : 'Der Verzeichnisname darf nicht leer sein.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Der Dateinamen darf nicht eines der folgenden Zeichen enthalten: \n\\ / : * ? " < > |', + FolderInvChar : 'Der Verzeichnisname darf nicht eines der folgenden Zeichen enthalten: \n\\ / : * ? " < > |', + + PopupBlockView : 'Die Datei konnte nicht in einem neuen Fenster geöffnet werden. Bitte deaktivieren Sie in Ihrem Browser alle Popup-Blocker für diese Seite.', + XmlError : 'Es war nicht möglich die XML-Antwort von dem Server herunterzuladen.', + XmlEmpty : 'Es war nicht möglich die XML-Antwort von dem Server herunterzuladen. Der Server hat eine leere Nachricht zurückgeschickt.', + XmlRawResponse : 'Raw-Antwort vom Server: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Größenänderung %s', + sizeTooBig : 'Bildgröße kann nicht größer als das Originalbild werden (%size).', + resizeSuccess : 'Bildgröße erfolgreich geändert.', + thumbnailNew : 'Neues Vorschaubild erstellen', + thumbnailSmall : 'Klein (%s)', + thumbnailMedium : 'Mittel (%s)', + thumbnailLarge : 'Groß (%s)', + newSize : 'Eine neue Größe setzen', + width : 'Breite', + height : 'Höhe', + invalidHeight : 'Ungültige Höhe.', + invalidWidth : 'Ungültige Breite.', + invalidName : 'Ungültiger Name.', + newImage : 'Neues Bild erstellen', + noExtensionChange : 'Dateierweiterung kann nicht geändert werden.', + imageSmall : 'Bildgröße zu klein.', + contextMenuName : 'Größenänderung', + lockRatio : 'Größenverhältnis beibehalten', + resetSize : 'Größe zurücksetzen' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Speichern', + fileOpenError : 'Datei kann nicht geöffnet werden.', + fileSaveSuccess : 'Datei erfolgreich gespeichert.', + contextMenuName : 'Bearbeitung', + loadingFile : 'Datei wird geladen, einen Moment noch...' + }, + + Maximize : + { + maximize : 'Maximieren', + minimize : 'Minimieren' + }, + + Gallery : + { + current : 'Bild {current} von {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Suche' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/el.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/el.js new file mode 100644 index 0000000..f6a2419 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/el.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Greek + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['el'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, μη διαθέσιμο', + confirmCancel : 'Κάποιες από τις επιλογές έχουν αλλάξει. Θέλετε σίγουρα να κλείσετε το παράθυρο διαλόγου;', + ok : 'OK', + cancel : 'Ακύρωση', + confirmationTitle : 'Επιβεβαίωση', + messageTitle : 'Πληροφορίες', + inputTitle : 'Ερώτηση', + undo : 'Αναίρεση', + redo : 'Επαναφορά', + skip : 'Παράβλεψη', + skipAll : 'Παράβλεψη όλων', + makeDecision : 'Ποια ενέργεια πρέπει να ληφθεί;', + rememberDecision: 'Να θυμάσαι την απόφασή μου' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'el', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy HH:MM', + DateAmPm : ['ΜΜ', 'ΠΜ'], + + // Folders + FoldersTitle : 'Φάκελοι', + FolderLoading : 'Φόρτωση...', + FolderNew : 'Παρακαλούμε πληκτρολογήστε την ονομασία του νέου φακέλου: ', + FolderRename : 'Παρακαλούμε πληκτρολογήστε την νέα ονομασία του φακέλου: ', + FolderDelete : 'Είστε σίγουροι ότι θέλετε να διαγράψετε το φάκελο "%1";', + FolderRenaming : ' (Μετονομασία...)', + FolderDeleting : ' (Διαγραφή...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Παρακαλούμε πληκτρολογήστε την νέα ονομασία του αρχείου: ', + FileRenameExt : 'Είστε σίγουροι ότι θέλετε να αλλάξετε την επέκταση του αρχείου; Μετά από αυτή την ενέργεια το αρχείο είναι δυνατόν να μην μπορεί να χρησιμοποιηθεί', + FileRenaming : 'Μετονομασία...', + FileDelete : 'Είστε σίγουροι ότι θέλετε να διαγράψετε το αρχείο "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Φόρτωση...', + FilesEmpty : 'Ο φάκελος είναι κενός.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Καλάθι', + BasketClear : 'Καθαρισμός καλαθιού', + BasketRemove : 'Αφαίρεση από το καλάθι', + BasketOpenFolder : 'Άνοιγμα γονικού φακέλου', + BasketTruncateConfirm : 'Θέλετε σίγουρα να αφαιρέσετε όλα τα αρχεία από το καλάθι;', + BasketRemoveConfirm : 'Θέλετε σίγουρα να αφαιρέσετε το αρχείο "%1" από το καλάθι;', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Δεν υπάρχουν αρχεία στο καλάθι, μεταφέρετε κάποια με drag and drop.', + BasketCopyFilesHere : 'Αντιγραφή αρχείων από το καλάθι', + BasketMoveFilesHere : 'Μετακίνηση αρχείων από το καλάθι', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Μεταφόρτωση', + UploadTip : 'Μεταφόρτωση νέου αρχείου', + Refresh : 'Ανανέωση', + Settings : 'Ρυθμίσεις', + Help : 'Βοήθεια', + HelpTip : 'Βοήθεια', + + // Context Menus + Select : 'Επιλογή', + SelectThumbnail : 'Επιλογή μικρογραφίας', + View : 'Προβολή', + Download : 'Λήψη αρχείου', + + NewSubFolder : 'Νέος υποφάκελος', + Rename : 'Μετονομασία', + Delete : 'Διαγραφή', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Αντέγραψε εδώ', + MoveDragDrop : 'Μετακίνησε εδώ', + + // Dialogs + RenameDlgTitle : 'Μετονομασία', + NewNameDlgTitle : 'Νέα ονομασία', + FileExistsDlgTitle : 'Το αρχείο υπάρχει ήδη', + SysErrorDlgTitle : 'Σφάλμα συστήματος', + + FileOverwrite : 'Αντικατάσταση αρχείου', + FileAutorename : 'Αυτόματη-μετονομασία', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Ακύρωση', + CloseBtn : 'Κλείσιμο', + + // Upload Panel + UploadTitle : 'Μεταφόρτωση νέου αρχείου', + UploadSelectLbl : 'επιλέξτε το αρχείο που θέλετε να μεταφερθεί κάνοντας κλίκ στο κουμπί', + UploadProgressLbl : '(Η μεταφόρτωση εκτελείται, παρακαλούμε περιμένετε...)', + UploadBtn : 'Μεταφόρτωση επιλεγμένου αρχείου', + UploadBtnCancel : 'Ακύρωση', + + UploadNoFileMsg : 'Παρακαλούμε επιλέξτε ένα αρχείο από τον υπολογιστή σας.', + UploadNoFolder : 'Παρακαλούμε επιλέξτε ένα φάκελο πριν εκκινήσετε την διαδικασία της μεταφόρτωσης.', + UploadNoPerms : 'Η μεταφόρτωση των αρχείων δεν επιτρέπεται.', + UploadUnknError : 'Παρουσιάστηκε σφάλμα κατά την αποστολή του αρχείου.', + UploadExtIncorrect : 'Η επέκταση του αρχείου δεν επιτρέπεται σε αυτόν τον φάκελο.', + + // Flash Uploads + UploadLabel : 'Αρχεία προς μεταφόρτωση', + UploadTotalFiles : 'Συνολικά αρχεία:', + UploadTotalSize : 'Συνολικό μέγεθος:', + UploadSend : 'Μεταφόρτωση', + UploadAddFiles : 'Προσθήκη αρχείων', + UploadClearFiles : 'Αφαίρεση αρχείων', + UploadCancel : 'Ακύρωση μεταφόρτωσης', + UploadRemove : 'Αφαίρεση', + UploadRemoveTip : 'Αφαίρεση !f', + UploadUploaded : 'Μεταφορτώθηκε !n%', + UploadProcessing : 'Επεξεργασία...', + + // Settings Panel + SetTitle : 'Ρυθμίσεις', + SetView : 'Προβολή:', + SetViewThumb : 'Μικρογραφίες', + SetViewList : 'Λίστα', + SetDisplay : 'Εμφάνιση:', + SetDisplayName : 'Όνομα αρχείου', + SetDisplayDate : 'Ημερομηνία', + SetDisplaySize : 'Μέγεθος αρχείου', + SetSort : 'Ταξινόμηση:', + SetSortName : 'βάσει Όνοματος αρχείου', + SetSortDate : 'βάσει Ημερομήνιας', + SetSortSize : 'βάσει Μεγέθους', + SetSortExtension : 'βάσει Επέκτασης', + + // Status Bar + FilesCountEmpty : '<Κενός Φάκελος>', + FilesCountOne : '1 αρχείο', + FilesCountMany : '%1 αρχεία', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Η ενέργεια δεν ήταν δυνατόν να εκτελεστεί. (Σφάλμα %1)', + Errors : + { + 10 : 'Λανθασμένη Εντολή.', + 11 : 'Το resource type δεν ήταν δυνατόν να προσδιοριστεί.', + 12 : 'Το resource type δεν είναι έγκυρο.', + 102 : 'Το όνομα αρχείου ή φακέλου δεν είναι έγκυρο.', + 103 : 'Δεν ήταν δυνατή η εκτέλεση της ενέργειας λόγω έλλειψης δικαιωμάτων ασφαλείας.', + 104 : 'Δεν ήταν δυνατή η εκτέλεση της ενέργειας λόγω περιορισμών του συστήματος αρχείων.', + 105 : 'Λανθασμένη επέκταση αρχείου.', + 109 : 'Λανθασμένη ενέργεια.', + 110 : 'Άγνωστο λάθος.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Το αρχείο ή φάκελος υπάρχει ήδη.', + 116 : 'Ο φάκελος δεν βρέθηκε. Παρακαλούμε ανανεώστε τη σελίδα και προσπαθήστε ξανά.', + 117 : 'Το αρχείο δεν βρέθηκε. Παρακαλούμε ανανεώστε τη σελίδα και προσπαθήστε ξανά.', + 118 : 'Η αρχική και τελική διαδρομή είναι ίδιες.', + 201 : 'Ένα αρχείο με την ίδια ονομασία υπάρχει ήδη. Το μεταφορτωμένο αρχείο μετονομάστηκε σε "%1".', + 202 : 'Λανθασμένο αρχείο.', + 203 : 'Λανθασμένο αρχείο. Το μέγεθος του αρχείου είναι πολύ μεγάλο.', + 204 : 'Το μεταφορτωμένο αρχείο είναι χαλασμένο.', + 205 : 'Δεν υπάρχει προσωρινός φάκελος για να χρησιμοποιηθεί για τις μεταφορτώσεις των αρχείων.', + 206 : 'Η μεταφόρτωση ακυρώθηκε για λόγους ασφαλείας. Το αρχείο περιέχει δεδομένα μορφής HTML.', + 207 : 'Το μεταφορτωμένο αρχείο μετονομάστηκε σε "%1".', + 300 : 'Η μετακίνηση των αρχείων απέτυχε.', + 301 : 'Η αντιγραφή των αρχείων απέτυχε.', + 500 : 'Ο πλοηγός αρχείων έχει απενεργοποιηθεί για λόγους ασφαλείας. Παρακαλούμε επικοινωνήστε με τον διαχειριστή της ιστοσελίδας και ελέγξτε το αρχείο ρυθμίσεων του πλοηγού (CKFinder).', + 501 : 'Η υποστήριξη των μικρογραφιών έχει απενεργοποιηθεί.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Η ονομασία του αρχείου δεν μπορεί να είναι κενή.', + FileExists : 'Το αρχείο %s υπάρχει ήδη.', + FolderEmpty : 'Η ονομασία του φακέλου δεν μπορεί να είναι κενή.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Η ονομασία του αρχείου δεν μπορεί να περιέχει τους ακόλουθους χαρακτήρες: \n\\ / : * ? " < > |', + FolderInvChar : 'Η ονομασία του φακέλου δεν μπορεί να περιέχει τους ακόλουθους χαρακτήρες: \n\\ / : * ? " < > |', + + PopupBlockView : 'Δεν ήταν εφικτό να ανοίξει το αρχείο σε νέο παράθυρο. Παρακαλώ, ελέγξτε τις ρυθμίσεις τους πλοηγού σας και απενεργοποιήστε όλους τους popup blockers για αυτή την ιστοσελίδα.', + XmlError : 'Δεν ήταν εφικτή η σωστή ανάγνωση του XML response από τον διακομιστή.', + XmlEmpty : 'Δεν ήταν εφικτή η φόρτωση του XML response από τον διακομιστή. Ο διακομιστής επέστρεψε ένα κενό response.', + XmlRawResponse : 'Raw response από τον διακομιστή: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Αλλαγή διαστάσεων της εικόνας %s', + sizeTooBig : 'Το πλάτος ή το ύψος της εικόνας δεν μπορεί να είναι μεγαλύτερα των αρχικών διαστάσεων (%size).', + resizeSuccess : 'Οι διαστάσεις της εικόνας άλλαξαν επιτυχώς.', + thumbnailNew : 'Δημιουργία νέας μικρογραφίας', + thumbnailSmall : 'Μικρή (%s)', + thumbnailMedium : 'Μεσαία (%s)', + thumbnailLarge : 'Μεγάλη (%s)', + newSize : 'Ορισμός νέου μεγέθους', + width : 'Πλάτος', + height : 'Ύψος', + invalidHeight : 'Μη έγκυρο ύψος.', + invalidWidth : 'Μη έγκυρο πλάτος.', + invalidName : 'Μη έγκυρο όνομα αρχείου.', + newImage : 'Δημιουργία νέας εικόνας', + noExtensionChange : 'Η επέκταση του αρχείου δεν μπορεί να αλλάξει.', + imageSmall : 'Η αρχική εικόνα είναι πολύ μικρή.', + contextMenuName : 'Αλλαγή διαστάσεων', + lockRatio : 'Κλείδωμα αναλογίας', + resetSize : 'Επαναφορά αρχικού μεγέθους' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Αποθήκευση', + fileOpenError : 'Δεν ήταν εφικτό το άνοιγμα του αρχείου.', + fileSaveSuccess : 'Το αρχείο αποθηκεύτηκε επιτυχώς.', + contextMenuName : 'Επεξεργασία', + loadingFile : 'Φόρτωση αρχείου, παρακαλώ περιμένετε...' + }, + + Maximize : + { + maximize : 'Μεγιστοποίηση', + minimize : 'Ελαχιστοποίηση' + }, + + Gallery : + { + current : 'Εικόνα {current} από {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Αναζήτηση' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/en.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/en.js new file mode 100644 index 0000000..7e87ffc --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/en.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the English + * language. This is the base file for all translations. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['en'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, unavailable', + confirmCancel : 'Some of the options were changed. Are you sure you want to close the dialog window?', + ok : 'OK', + cancel : 'Cancel', + confirmationTitle : 'Confirmation', + messageTitle : 'Information', + inputTitle : 'Question', + undo : 'Undo', + redo : 'Redo', + skip : 'Skip', + skipAll : 'Skip all', + makeDecision : 'What action should be taken?', + rememberDecision: 'Remember my decision' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'en', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'm/d/yyyy h:MM aa', + DateAmPm : ['AM','PM'], + + // Folders + FoldersTitle : 'Folders', + FolderLoading : 'Loading...', + FolderNew : 'Please type the new folder name: ', + FolderRename : 'Please type the new folder name: ', + FolderDelete : 'Are you sure you want to delete the "%1" folder?', + FolderRenaming : ' (Renaming...)', + FolderDeleting : ' (Deleting...)', + DestinationFolder : 'Destination Folder', + + // Files + FileRename : 'Please type the new file name: ', + FileRenameExt : 'Are you sure you want to change the file extension? The file may become unusable.', + FileRenaming : 'Renaming...', + FileDelete : 'Are you sure you want to delete the file "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', + FilesLoading : 'Loading...', + FilesEmpty : 'The folder is empty.', + DestinationFile : 'Destination File', + SkippedFiles : 'List of skipped files:', + + // Basket + BasketFolder : 'Basket', + BasketClear : 'Clear Basket', + BasketRemove : 'Remove from Basket', + BasketOpenFolder : 'Open Parent Folder', + BasketTruncateConfirm : 'Do you really want to remove all files from the basket?', + BasketRemoveConfirm : 'Do you really want to remove the file "%1" from the basket?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', + BasketEmpty : 'No files in the basket, drag and drop some.', + BasketCopyFilesHere : 'Copy Files from Basket', + BasketMoveFilesHere : 'Move Files from Basket', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', + OperationCompletedErrors : 'Operation completed with errors.', + FileError : '%s: %e', + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', + CopiedFilesNumber : 'Number of files copied: %s.', + MoveFailedList : 'The following files could not be moved:
      %s', + CopyFailedList : 'The following files could not be copied:
      %s', + + // Toolbar Buttons (some used elsewhere) + Upload : 'Upload', + UploadTip : 'Upload New File', + Refresh : 'Refresh', + Settings : 'Settings', + Help : 'Help', + HelpTip : 'Help', + + // Context Menus + Select : 'Select', + SelectThumbnail : 'Select Thumbnail', + View : 'View', + Download : 'Download', + + NewSubFolder : 'New Subfolder', + Rename : 'Rename', + Delete : 'Delete', + DeleteFiles : 'Delete Files', + + CopyDragDrop : 'Copy Here', + MoveDragDrop : 'Move Here', + + // Dialogs + RenameDlgTitle : 'Rename', + NewNameDlgTitle : 'New Name', + FileExistsDlgTitle : 'File Already Exists', + SysErrorDlgTitle : 'System Error', + + FileOverwrite : 'Overwrite', + FileAutorename : 'Auto-rename', + ManuallyRename : 'Manually rename', + + // Generic + OkBtn : 'OK', + CancelBtn : 'Cancel', + CloseBtn : 'Close', + + // Upload Panel + UploadTitle : 'Upload New File', + UploadSelectLbl : 'Select a file to upload', + UploadProgressLbl : '(Upload in progress, please wait...)', + UploadBtn : 'Upload Selected File', + UploadBtnCancel : 'Cancel', + + UploadNoFileMsg : 'Please select a file from your computer.', + UploadNoFolder : 'Please select a folder before uploading.', + UploadNoPerms : 'File upload not allowed.', + UploadUnknError : 'Error sending the file.', + UploadExtIncorrect : 'File extension not allowed in this folder.', + + // Flash Uploads + UploadLabel : 'Files to Upload', + UploadTotalFiles : 'Total Files:', + UploadTotalSize : 'Total Size:', + UploadSend : 'Upload', + UploadAddFiles : 'Add Files', + UploadClearFiles : 'Clear Files', + UploadCancel : 'Cancel Upload', + UploadRemove : 'Remove', + UploadRemoveTip : 'Remove !f', + UploadUploaded : 'Uploaded !n%', + UploadProcessing : 'Processing...', + + // Settings Panel + SetTitle : 'Settings', + SetView : 'View:', + SetViewThumb : 'Thumbnails', + SetViewList : 'List', + SetDisplay : 'Display:', + SetDisplayName : 'File Name', + SetDisplayDate : 'Date', + SetDisplaySize : 'File Size', + SetSort : 'Sorting:', + SetSortName : 'by File Name', + SetSortDate : 'by Date', + SetSortSize : 'by Size', + SetSortExtension : 'by Extension', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 file', + FilesCountMany : '%1 files', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'It was not possible to complete the request. (Error %1)', + Errors : + { + 10 : 'Invalid command.', + 11 : 'The resource type was not specified in the request.', + 12 : 'The requested resource type is not valid.', + 102 : 'Invalid file or folder name.', + 103 : 'It was not possible to complete the request due to authorization restrictions.', + 104 : 'It was not possible to complete the request due to file system permission restrictions.', + 105 : 'Invalid file extension.', + 109 : 'Invalid request.', + 110 : 'Unknown error.', + 111 : 'It was not possible to complete the request due to resulting file size.', + 115 : 'A file or folder with the same name already exists.', + 116 : 'Folder not found. Please refresh and try again.', + 117 : 'File not found. Please refresh the files list and try again.', + 118 : 'Source and target paths are equal.', + 201 : 'A file with the same name is already available. The uploaded file was renamed to "%1".', + 202 : 'Invalid file.', + 203 : 'Invalid file. The file size is too big.', + 204 : 'The uploaded file is corrupt.', + 205 : 'No temporary folder is available for upload in the server.', + 206 : 'Upload cancelled due to security reasons. The file contains HTML-like data.', + 207 : 'The uploaded file was renamed to "%1".', + 300 : 'Moving file(s) failed.', + 301 : 'Copying file(s) failed.', + 500 : 'The file browser is disabled for security reasons. Please contact your system administrator and check the CKFinder configuration file.', + 501 : 'The thumbnails support is disabled.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'The file name cannot be empty.', + FileExists : 'File %s already exists.', + FolderEmpty : 'The folder name cannot be empty.', + FolderExists : 'Folder %s already exists.', + FolderNameExists : 'Folder already exists.', + + FileInvChar : 'The file name cannot contain any of the following characters: \n\\ / : * ? " < > |', + FolderInvChar : 'The folder name cannot contain any of the following characters: \n\\ / : * ? " < > |', + + PopupBlockView : 'It was not possible to open the file in a new window. Please configure your browser and disable all popup blockers for this site.', + XmlError : 'It was not possible to properly load the XML response from the web server.', + XmlEmpty : 'It was not possible to load the XML response from the web server. The server returned an empty response.', + XmlRawResponse : 'Raw response from the server: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Resize %s', + sizeTooBig : 'Cannot set image height or width to a value bigger than the original size (%size).', + resizeSuccess : 'Image resized successfully.', + thumbnailNew : 'Create a new thumbnail', + thumbnailSmall : 'Small (%s)', + thumbnailMedium : 'Medium (%s)', + thumbnailLarge : 'Large (%s)', + newSize : 'Set a new size', + width : 'Width', + height : 'Height', + invalidHeight : 'Invalid height.', + invalidWidth : 'Invalid width.', + invalidName : 'Invalid file name.', + newImage : 'Create a new image', + noExtensionChange : 'File extension cannot be changed.', + imageSmall : 'Source image is too small.', + contextMenuName : 'Resize', + lockRatio : 'Lock ratio', + resetSize : 'Reset size' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Save', + fileOpenError : 'Unable to open file.', + fileSaveSuccess : 'File saved successfully.', + contextMenuName : 'Edit', + loadingFile : 'Loading file, please wait...' + }, + + Maximize : + { + maximize : 'Maximize', + minimize : 'Minimize' + }, + + Gallery : + { + current : 'Image {current} of {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', + extractToLabel : 'Extract to...', + downloadZipLabel : 'Download as zip', + compressZipLabel : 'Compress to zip', + removeAndExtract : 'Remove existing and extract', + extractAndOverwrite : 'Extract overwriting existing files', + extractSuccess : 'File extracted successfully.' + }, + + Search : + { + searchPlaceholder : 'Search' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/eo.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/eo.js new file mode 100644 index 0000000..b50f1c1 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/eo.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Esperanto + * language. +*/ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['eo'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, nedisponebla', + confirmCancel : 'Iuj opcioj estas modifitaj. Ĉu vi certas, ke vi volas fermi tiun fenestron?', + ok : 'Bone', + cancel : 'Rezigni', + confirmationTitle : 'Konfirmo', + messageTitle : 'Informo', + inputTitle : 'Demando', + undo : 'Malfari', + redo : 'Refari', + skip : 'Transsalti', + skipAll : 'Transsalti ĉion', + makeDecision : 'Kiun agon elekti?', + rememberDecision: 'Memori la decidon' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'eo', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Dosierujoj', + FolderLoading : 'Estas ŝargata...', + FolderNew : 'Bonvolu entajpi la nomon de la nova dosierujo: ', + FolderRename : 'Bonvolu entajpi la novan nomon de la dosierujo: ', + FolderDelete : 'Ĉu vi certas, ke vi volas forigi la "%1"dosierujon?', + FolderRenaming : ' (Estas renomata...)', + FolderDeleting : ' (Estas forigata...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Entajpu la novan nomon de la dosiero: ', + FileRenameExt : 'Ĉu vi certas, ke vi volas ŝanĝi la dosiernoman finaĵon? La dosiero povus fariĝi neuzebla.', + FileRenaming : 'Estas renomata...', + FileDelete : 'Ĉu vi certas, ke vi volas forigi la dosieron "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Estas ŝargata...', + FilesEmpty : 'La dosierujo estas malplena', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Rubujo', + BasketClear : 'Malplenigi la rubujon', + BasketRemove : 'Repreni el la rubujo', + BasketOpenFolder : 'Malfermi la patran dosierujon', + BasketTruncateConfirm : 'Ĉu vi certas, ke vi volas forigi ĉiujn dosierojn el la rubujo?', + BasketRemoveConfirm : 'Ĉu vi certas, ke vi volas forigi la dosieron "%1" el la rubujo?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Neniu dosiero en la rubujo, demetu kelkajn.', + BasketCopyFilesHere : 'Kopii dosierojn el la rubujo', + BasketMoveFilesHere : 'Movi dosierojn el la rubujo', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Alŝuti', + UploadTip : 'Alŝuti novan dosieron', + Refresh : 'Aktualigo', + Settings : 'Agordo', + Help : 'Helpilo', + HelpTip : 'Helpilo', + + // Context Menus + Select : 'Selekti', + SelectThumbnail : 'Selekti miniaturon', + View : 'Vidi', + Download : 'Elŝuti', + + NewSubFolder : 'Nova subdosierujo', + Rename : 'Renomi', + Delete : 'Forigi', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Kopii tien ĉi', + MoveDragDrop : 'Movi tien ĉi', + + // Dialogs + RenameDlgTitle : 'Renomi', + NewNameDlgTitle : 'Nova dosiero', + FileExistsDlgTitle : 'Dosiero jam ekzistas', + SysErrorDlgTitle : 'Sistemeraro', + + FileOverwrite : 'Anstataŭigi', + FileAutorename : 'Aŭtomata renomo', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'Bone', + CancelBtn : 'Rezigni', + CloseBtn : 'Fermi', + + // Upload Panel + UploadTitle : 'Alŝuti novan dosieron', + UploadSelectLbl : 'Selekti la alŝutotan dosieron', + UploadProgressLbl : '(Estas alŝutata, bonvolu pacienci...)', + UploadBtn : 'Alŝuti la selektitan dosieron', + UploadBtnCancel : 'Rezigni', + + UploadNoFileMsg : 'Selekti dosieron el via komputilo.', + UploadNoFolder : 'Bonvolu selekti dosierujon antaŭ la alŝuto.', + UploadNoPerms : 'La dosieralŝuto ne estas permesita.', + UploadUnknError : 'Eraro dum la dosieralŝuto.', + UploadExtIncorrect : 'La dosiernoma finaĵo ne estas permesita en tiu dosierujo.', + + // Flash Uploads + UploadLabel : 'Alŝutotaj dosieroj', + UploadTotalFiles : 'Dosieroj:', + UploadTotalSize : 'Grando de la dosieroj:', + UploadSend : 'Alŝuti', + UploadAddFiles : 'Almeti dosierojn', + UploadClearFiles : 'Forigi dosierojn', + UploadCancel : 'Rezigni la alŝuton', + UploadRemove : 'Forigi', + UploadRemoveTip : 'Forigi !f', + UploadUploaded : 'Alŝutita !n%', + UploadProcessing : 'Estas alŝutata...', + + // Settings Panel + SetTitle : 'Agordo', + SetView : 'Vidi:', + SetViewThumb : 'Miniaturoj', + SetViewList : 'Listo', + SetDisplay : 'Vidigi:', + SetDisplayName : 'Dosiernomo', + SetDisplayDate : 'Dato', + SetDisplaySize : 'Dosiergrando', + SetSort : 'Ordigo:', + SetSortName : 'laŭ dosiernomo', + SetSortDate : 'laŭ dato', + SetSortSize : 'laŭ grando', + SetSortExtension : 'laŭ dosiernoma finaĵo', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 dosiero', + FilesCountMany : '%1 dosieroj', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Ne eblis plenumi la peton. (Eraro %1)', + Errors : + { + 10 : 'Nevalida komando.', + 11 : 'La risurctipo ne estas indikita en la komando.', + 12 : 'La risurctipo ne estas valida.', + 102 : 'La dosier- aŭ dosierujnomo ne estas valida.', + 103 : 'Ne eblis plenumi la peton pro rajtaj limigoj.', + 104 : 'Ne eblis plenumi la peton pro atingopermesaj limigoj.', + 105 : 'Nevalida dosiernoma finaĵo.', + 109 : 'Nevalida peto.', + 110 : 'Nekonata eraro.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Dosiero aŭ dosierujo kun tiu nomo jam ekzistas.', + 116 : 'Tiu dosierujo ne ekzistas. Bonvolu aktualigi kaj reprovi.', + 117 : 'Tiu dosiero ne ekzistas. Bonvolu aktualigi kaj reprovi.', + 118 : 'La vojoj al la fonto kaj al la celo estas samaj.', + 201 : 'Dosiero kun la sama nomo jam ekzistas. La alŝutita dosiero estas renomita al "%1".', + 202 : 'Nevalida dosiero.', + 203 : 'Nevalida dosiero. La grando estas tro alta.', + 204 : 'La alŝutita dosiero estas difektita.', + 205 : 'Neniu provizora dosierujo estas disponebla por alŝuto al la servilo.', + 206 : 'Alŝuto nuligita pro kialoj pri sekureco. La dosiero entenas datenojn de HTMLtipo.', + 207 : 'La alŝutita dosiero estas renomita al "%1".', + 300 : 'La movo de la dosieroj malsukcesis.', + 301 : 'La kopio de la dosieroj malsukcesis.', + 500 : 'La dosieradministra sistemo estas malvalidigita. Kontaktu vian administranton kaj kontrolu la agordodosieron de CKFinder.', + 501 : 'La eblo de miniaturoj estas malvalidigita.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'La dosiernomo ne povas esti malplena.', + FileExists : 'La dosiero %s jam ekzistas.', + FolderEmpty : 'La dosierujnomo ne povas esti malplena.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'La dosiernomo ne povas enhavi la sekvajn signojn : \n\\ / : * ? " < > |', + FolderInvChar : 'La dosierujnomo ne povas enhavi la sekvajn signojn : \n\\ / : * ? " < > |', + + PopupBlockView : 'Ne eblis malfermi la dosieron en nova fenestro. Agordu vian retumilon kaj malŝaltu vian ŝprucfenestran blokilon por tiu retpaĝaro.', + XmlError : 'Ne eblis kontentige elŝuti la XML respondon el la servilo.', + XmlEmpty : 'Ne eblis elŝuti la XML respondon el la servilo. La servilo resendis malplenan respondon.', + XmlRawResponse : 'Kruda respondo el la servilo: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Plimalpligrandigi %s', + sizeTooBig : 'Ne eblas ŝanĝi la alton aŭ larĝon de tiu bildo ĝis valoro pli granda ol la origina grando (%size).', + resizeSuccess : 'La bildgrando estas sukcese ŝanĝita.', + thumbnailNew : 'Krei novan miniaturon', + thumbnailSmall : 'Malgranda (%s)', + thumbnailMedium : 'Meza (%s)', + thumbnailLarge : 'Granda (%s)', + newSize : 'Fiksi la novajn grando-erojn', + width : 'Larĝo', + height : 'Alto', + invalidHeight : 'Nevalida alto.', + invalidWidth : 'Nevalida larĝo.', + invalidName : 'Nevalida dosiernomo.', + newImage : 'Krei novan bildon', + noExtensionChange : 'Ne eblas ŝanĝi la dosiernoman finaĵon.', + imageSmall : 'La bildo estas tro malgranda', + contextMenuName : 'Ŝanĝi la grandon', + lockRatio : 'Konservi proporcion', + resetSize : 'Origina grando' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Konservi', + fileOpenError : 'Ne eblas malfermi la dosieron', + fileSaveSuccess : 'La dosiero estas sukcese konservita.', + contextMenuName : 'Redakti', + loadingFile : 'La dosiero estas elŝutata, bonvolu pacienci...' + }, + + Maximize : + { + maximize : 'Pligrandigi', + minimize : 'Malpligrandigi' + }, + + Gallery : + { + current : 'Bildo {current} el {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Serĉi' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/es-mx.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/es-mx.js new file mode 100644 index 0000000..658764b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/es-mx.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Latin American Spanish + * language. +*/ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['es-mx'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, no disponible', + confirmCancel : 'Algunas opciones se han cambiado\r\n¿Está seguro de querer cerrar el diálogo?', + ok : 'Aceptar', + cancel : 'Cancelar', + confirmationTitle : 'Confirmación', + messageTitle : 'Información', + inputTitle : 'Pregunta', + undo : 'Deshacer', + redo : 'Rehacer', + skip : 'Omitir', + skipAll : 'Omitir todos', + makeDecision : '¿Qué acción debe realizarse?', + rememberDecision: 'Recordar mi decisión' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'es-mx', + LangCode : 'es-mx', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Carpetas', + FolderLoading : 'Cargando...', + FolderNew : 'Por favor, escriba el nombre para la nueva carpeta: ', + FolderRename : 'Por favor, escriba el nuevo nombre para la carpeta: ', + FolderDelete : '¿Está seguro de que quiere borrar la carpeta "%1"?', + FolderRenaming : ' (Renombrando...)', + FolderDeleting : ' (Borrando...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Por favor, escriba el nuevo nombre del archivo: ', + FileRenameExt : '¿Está seguro de querer cambiar la extensión del archivo? El archivo puede dejar de ser usable.', + FileRenaming : 'Renombrando...', + FileDelete : '¿Está seguro de que quiere borrar el archivo "%1".?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Cargando...', + FilesEmpty : 'Carpeta vacía', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Cesta', + BasketClear : 'Vaciar cesta', + BasketRemove : 'Quitar de la cesta', + BasketOpenFolder : 'Abrir carpeta padre', + BasketTruncateConfirm : '¿Está seguro de querer quitar todos los archivos de la cesta?', + BasketRemoveConfirm : '¿Está seguro de querer quitar el archivo "%1" de la cesta?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'No hay archivos en la cesta, arrastra y suelta algunos.', + BasketCopyFilesHere : 'Copiar archivos de la cesta', + BasketMoveFilesHere : 'Mover archivos de la cesta', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Añadir', + UploadTip : 'Añadir nuevo archivo', + Refresh : 'Actualizar', + Settings : 'Configuración', + Help : 'Ayuda', + HelpTip : 'Ayuda', + + // Context Menus + Select : 'Seleccionar', + SelectThumbnail : 'Seleccionar el icono', + View : 'Ver', + Download : 'Descargar', + + NewSubFolder : 'Nueva Subcarpeta', + Rename : 'Renombrar', + Delete : 'Borrar', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Copiar aquí', + MoveDragDrop : 'Mover aquí', + + // Dialogs + RenameDlgTitle : 'Renombrar', + NewNameDlgTitle : 'Nuevo nombre', + FileExistsDlgTitle : 'Archivo existente', + SysErrorDlgTitle : 'Error de sistema', + + FileOverwrite : 'Sobreescribir', + FileAutorename : 'Auto-renombrar', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'Aceptar', + CancelBtn : 'Cancelar', + CloseBtn : 'Cerrar', + + // Upload Panel + UploadTitle : 'Añadir nuevo archivo', + UploadSelectLbl : 'Elija el archivo a subir', + UploadProgressLbl : '(Subida en progreso, por favor espere...)', + UploadBtn : 'Subir el archivo elegido', + UploadBtnCancel : 'Cancelar', + + UploadNoFileMsg : 'Por favor, elija un archivo de su computadora.', + UploadNoFolder : 'Por favor, escoja la carpeta antes de iniciar la subida.', + UploadNoPerms : 'No puede subir archivos.', + UploadUnknError : 'Error enviando el archivo.', + UploadExtIncorrect : 'La extensión del archivo no está permitida en esta carpeta.', + + // Flash Uploads + UploadLabel : 'Archivos a subir', + UploadTotalFiles : 'Total de archivos:', + UploadTotalSize : 'Tamaño total:', + UploadSend : 'Añadir', + UploadAddFiles : 'Añadir archivos', + UploadClearFiles : 'Borrar archivos', + UploadCancel : 'Cancelar subida', + UploadRemove : 'Quitar', + UploadRemoveTip : 'Quitar !f', + UploadUploaded : 'Enviado !n%', + UploadProcessing : 'Procesando...', + + // Settings Panel + SetTitle : 'Configuración', + SetView : 'Vista:', + SetViewThumb : 'Iconos', + SetViewList : 'Lista', + SetDisplay : 'Mostrar:', + SetDisplayName : 'Nombre de archivo', + SetDisplayDate : 'Fecha', + SetDisplaySize : 'Tamaño del archivo', + SetSort : 'Ordenar:', + SetSortName : 'por Nombre', + SetSortDate : 'por Fecha', + SetSortSize : 'por Tamaño', + SetSortExtension : 'por Extensión', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 archivo', + FilesCountMany : '%1 archivos', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'No ha sido posible completar la solicitud. (Error %1)', + Errors : + { + 10 : 'Comando incorrecto.', + 11 : 'El tipo de recurso no ha sido especificado en la solicitud.', + 12 : 'El tipo de recurso solicitado no es válido.', + 102 : 'Nombre de archivo o carpeta no válido.', + 103 : 'No se ha podido completar la solicitud debido a las restricciones de autorización.', + 104 : 'No ha sido posible completar la solicitud debido a restricciones en el sistema de archivos.', + 105 : 'La extensión del archivo no es válida.', + 109 : 'Petición inválida.', + 110 : 'Error desconocido.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Ya existe un archivo o carpeta con ese nombre.', + 116 : 'No se ha encontrado la carpeta. Por favor, actualice y pruebe de nuevo.', + 117 : 'No se ha encontrado el archivo. Por favor, actualice la lista de archivos y pruebe de nuevo.', + 118 : 'Las rutas origen y destino son iguales.', + 201 : 'Ya existía un archivo con ese nombre. El archivo subido ha sido renombrado como "%1".', + 202 : 'Archivo inválido.', + 203 : 'Archivo inválido. El tamaño es demasiado grande.', + 204 : 'El archivo subido está corrupto.', + 205 : 'La carpeta temporal no está disponible en el servidor para las subidas.', + 206 : 'La subida se ha cancelado por razones de seguridad. El archivo contenía código HTML.', + 207 : 'El archivo subido ha sido renombrado como "%1".', + 300 : 'Ha fallado el mover el(los) archivo(s).', + 301 : 'Ha fallado el copiar el(los) archivo(s).', + 500 : 'El navegador de archivos está deshabilitado por razones de seguridad. Por favor, contacte con el administrador de su sistema y compruebe el archivo de configuración de CKFinder.', + 501 : 'El soporte para iconos está deshabilitado.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'El nombre del archivo no puede estar vacío.', + FileExists : 'El archivo %s ya existe.', + FolderEmpty : 'El nombre de la carpeta no puede estar vacío.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'El nombre del archivo no puede contener ninguno de los caracteres siguientes: \n\\ / : * ? " < > |', + FolderInvChar : 'El nombre de la carpeta no puede contener ninguno de los caracteres siguientes: \n\\ / : * ? " < > |', + + PopupBlockView : 'No ha sido posible abrir el archivo en una nueva ventana. Por favor, configure su navegador y desactive todos los bloqueadores de ventanas para esta página.', + XmlError : 'No ha sido posible cargar correctamente la respuesta XML del servidor.', + XmlEmpty : 'No ha sido posible cargar correctamente la respuesta XML del servidor. El servidor envió una cadena vacía.', + XmlRawResponse : 'Respuesta del servidor: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Redimensionar %s', + sizeTooBig : 'No se puede poner la altura o anchura de la imagen mayor que las dimensiones originales (%size).', + resizeSuccess : 'Imagen redimensionada correctamente.', + thumbnailNew : 'Crear nueva minuatura', + thumbnailSmall : 'Pequeña (%s)', + thumbnailMedium : 'Mediana (%s)', + thumbnailLarge : 'Grande (%s)', + newSize : 'Establecer nuevo tamaño', + width : 'Ancho', + height : 'Alto', + invalidHeight : 'Altura inválida.', + invalidWidth : 'Anchura inválida.', + invalidName : 'Nombre no válido.', + newImage : 'Crear nueva imagen', + noExtensionChange : 'La extensión no se puede cambiar.', + imageSmall : 'La imagen original es demasiado pequeña.', + contextMenuName : 'Redimensionar', + lockRatio : 'Proporcional', + resetSize : 'Tamaño Original' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Guardar', + fileOpenError : 'No se puede abrir el archivo.', + fileSaveSuccess : 'Archivo guardado correctamente.', + contextMenuName : 'Editar', + loadingFile : 'Cargando archivo, por favor espere...' + }, + + Maximize : + { + maximize : 'Maximizar', + minimize : 'Minimizar' + }, + + Gallery : + { + current : 'Imagen {current} de {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Buscar' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/es.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/es.js new file mode 100644 index 0000000..31d8ecf --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/es.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Spanish + * language. +*/ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['es'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, no disponible', + confirmCancel : 'Algunas opciones se han cambiado\r\n¿Está seguro de querer cerrar el diálogo?', + ok : 'Aceptar', + cancel : 'Cancelar', + confirmationTitle : 'Confirmación', + messageTitle : 'Información', + inputTitle : 'Pregunta', + undo : 'Deshacer', + redo : 'Rehacer', + skip : 'Omitir', + skipAll : 'Omitir todos', + makeDecision : '¿Qué acción debe realizarse?', + rememberDecision: 'Recordar mi decisión' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'es', + LangCode : 'es', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Carpetas', + FolderLoading : 'Cargando...', + FolderNew : 'Por favor, escriba el nombre para la nueva carpeta: ', + FolderRename : 'Por favor, escriba el nuevo nombre para la carpeta: ', + FolderDelete : '¿Está seguro de que quiere borrar la carpeta "%1"?', + FolderRenaming : ' (Renombrando...)', + FolderDeleting : ' (Borrando...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Por favor, escriba el nuevo nombre del fichero: ', + FileRenameExt : '¿Está seguro de querer cambiar la extensión del fichero? El fichero puede dejar de ser usable.', + FileRenaming : 'Renombrando...', + FileDelete : '¿Está seguro de que quiere borrar el fichero "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Cargando...', + FilesEmpty : 'Carpeta vacía', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Cesta', + BasketClear : 'Vaciar cesta', + BasketRemove : 'Quitar de la cesta', + BasketOpenFolder : 'Abrir carpeta padre', + BasketTruncateConfirm : '¿Está seguro de querer quitar todos los ficheros de la cesta?', + BasketRemoveConfirm : '¿Está seguro de querer quitar el fichero "%1" de la cesta?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'No hay ficheros en la cesta, arrastra y suelta algunos.', + BasketCopyFilesHere : 'Copiar ficheros de la cesta', + BasketMoveFilesHere : 'Mover ficheros de la cesta', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Añadir', + UploadTip : 'Añadir nuevo fichero', + Refresh : 'Actualizar', + Settings : 'Configuración', + Help : 'Ayuda', + HelpTip : 'Ayuda', + + // Context Menus + Select : 'Seleccionar', + SelectThumbnail : 'Seleccionar el icono', + View : 'Ver', + Download : 'Descargar', + + NewSubFolder : 'Nueva Subcarpeta', + Rename : 'Renombrar', + Delete : 'Borrar', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Copiar aquí', + MoveDragDrop : 'Mover aquí', + + // Dialogs + RenameDlgTitle : 'Renombrar', + NewNameDlgTitle : 'Nuevo nombre', + FileExistsDlgTitle : 'Fichero existente', + SysErrorDlgTitle : 'Error de sistema', + + FileOverwrite : 'Sobreescribir', + FileAutorename : 'Auto-renombrar', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'Aceptar', + CancelBtn : 'Cancelar', + CloseBtn : 'Cerrar', + + // Upload Panel + UploadTitle : 'Añadir nuevo fichero', + UploadSelectLbl : 'Elija el fichero a subir', + UploadProgressLbl : '(Subida en progreso, por favor espere...)', + UploadBtn : 'Subir el fichero elegido', + UploadBtnCancel : 'Cancelar', + + UploadNoFileMsg : 'Por favor, elija un fichero de su ordenador.', + UploadNoFolder : 'Por favor, escoja la carpeta antes de iniciar la subida.', + UploadNoPerms : 'No puede subir ficheros.', + UploadUnknError : 'Error enviando el fichero.', + UploadExtIncorrect : 'La extensión del fichero no está permitida en esta carpeta.', + + // Flash Uploads + UploadLabel : 'Ficheros a subir', + UploadTotalFiles : 'Total de ficheros:', + UploadTotalSize : 'Tamaño total:', + UploadSend : 'Añadir', + UploadAddFiles : 'Añadir ficheros', + UploadClearFiles : 'Borrar ficheros', + UploadCancel : 'Cancelar subida', + UploadRemove : 'Quitar', + UploadRemoveTip : 'Quitar !f', + UploadUploaded : 'Enviado !n%', + UploadProcessing : 'Procesando...', + + // Settings Panel + SetTitle : 'Configuración', + SetView : 'Vista:', + SetViewThumb : 'Iconos', + SetViewList : 'Lista', + SetDisplay : 'Mostrar:', + SetDisplayName : 'Nombre de fichero', + SetDisplayDate : 'Fecha', + SetDisplaySize : 'Tamaño del fichero', + SetSort : 'Ordenar:', + SetSortName : 'por Nombre', + SetSortDate : 'por Fecha', + SetSortSize : 'por Tamaño', + SetSortExtension : 'por Extensión', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fichero', + FilesCountMany : '%1 ficheros', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'No ha sido posible completar la solicitud. (Error %1)', + Errors : + { + 10 : 'Comando incorrecto.', + 11 : 'El tipo de recurso no ha sido especificado en la solicitud.', + 12 : 'El tipo de recurso solicitado no es válido.', + 102 : 'Nombre de fichero o carpeta no válido.', + 103 : 'No se ha podido completar la solicitud debido a las restricciones de autorización.', + 104 : 'No ha sido posible completar la solicitud debido a restricciones en el sistema de ficheros.', + 105 : 'La extensión del archivo no es válida.', + 109 : 'Petición inválida.', + 110 : 'Error desconocido.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Ya existe un fichero o carpeta con ese nombre.', + 116 : 'No se ha encontrado la carpeta. Por favor, actualice y pruebe de nuevo.', + 117 : 'No se ha encontrado el fichero. Por favor, actualice la lista de ficheros y pruebe de nuevo.', + 118 : 'Las rutas origen y destino son iguales.', + 201 : 'Ya existía un fichero con ese nombre. El fichero subido ha sido renombrado como "%1".', + 202 : 'Fichero inválido.', + 203 : 'Fichero inválido. El peso es demasiado grande.', + 204 : 'El fichero subido está corrupto.', + 205 : 'La carpeta temporal no está disponible en el servidor para las subidas.', + 206 : 'La subida se ha cancelado por razones de seguridad. El fichero contenía código HTML.', + 207 : 'El fichero subido ha sido renombrado como "%1".', + 300 : 'Ha fallado el mover el(los) fichero(s).', + 301 : 'Ha fallado el copiar el(los) fichero(s).', + 500 : 'El navegador de archivos está deshabilitado por razones de seguridad. Por favor, contacte con el administrador de su sistema y compruebe el fichero de configuración de CKFinder.', + 501 : 'El soporte para iconos está deshabilitado.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'El nombre del fichero no puede estar vacío.', + FileExists : 'El fichero %s ya existe.', + FolderEmpty : 'El nombre de la carpeta no puede estar vacío.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'El nombre del fichero no puede contener ninguno de los caracteres siguientes: \n\\ / : * ? " < > |', + FolderInvChar : 'El nombre de la carpeta no puede contener ninguno de los caracteres siguientes: \n\\ / : * ? " < > |', + + PopupBlockView : 'No ha sido posible abrir el fichero en una nueva ventana. Por favor, configure su navegador y desactive todos los bloqueadores de ventanas para esta página.', + XmlError : 'No ha sido posible cargar correctamente la respuesta XML del servidor.', + XmlEmpty : 'No ha sido posible cargar correctamente la respuesta XML del servidor. El servidor envió una cadena vacía.', + XmlRawResponse : 'Respuesta del servidor: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Redimensionar %s', + sizeTooBig : 'No se puede poner la altura o anchura de la imagen mayor que las dimensiones originales (%size).', + resizeSuccess : 'Imagen redimensionada correctamente.', + thumbnailNew : 'Crear nueva minuatura', + thumbnailSmall : 'Pequeña (%s)', + thumbnailMedium : 'Mediana (%s)', + thumbnailLarge : 'Grande (%s)', + newSize : 'Establecer nuevo tamaño', + width : 'Ancho', + height : 'Alto', + invalidHeight : 'Altura inválida.', + invalidWidth : 'Anchura inválida.', + invalidName : 'Nombre no válido.', + newImage : 'Crear nueva imagen', + noExtensionChange : 'La extensión no se puede cambiar.', + imageSmall : 'La imagen original es demasiado pequeña.', + contextMenuName : 'Redimensionar', + lockRatio : 'Proporcional', + resetSize : 'Tamaño Original' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Guardar', + fileOpenError : 'No se puede abrir el fichero.', + fileSaveSuccess : 'Fichero guardado correctamente.', + contextMenuName : 'Editar', + loadingFile : 'Cargando fichero, por favor espere...' + }, + + Maximize : + { + maximize : 'Maximizar', + minimize : 'Minimizar' + }, + + Gallery : + { + current : 'Imagen {current} de {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Buscar' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/et.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/et.js new file mode 100644 index 0000000..12eade4 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/et.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Estonian + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['et'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, pole saadaval', + confirmCancel : 'Mõned valikud on muudetud. Kas oled kindel, et tahad dialoogiakna sulgeda?', + ok : 'Olgu', + cancel : 'Loobu', + confirmationTitle : 'Kinnitus', + messageTitle : 'Andmed', + inputTitle : 'Küsimus', + undo : 'Võta tagasi', + redo : 'Tee uuesti', + skip : 'Jäta vahele', + skipAll : 'Jäta kõik vahele', + makeDecision : 'Mida tuleks teha?', + rememberDecision: 'Jäta valik meelde' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'et', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'yyyy-mm-dd H:MM', + DateAmPm : ['EL', 'PL'], + + // Folders + FoldersTitle : 'Kaustad', + FolderLoading : 'Laadimine...', + FolderNew : 'Palun sisesta uue kataloogi nimi: ', + FolderRename : 'Palun sisesta uue kataloogi nimi: ', + FolderDelete : 'Kas tahad kindlasti kausta "%1" kustutada?', + FolderRenaming : ' (ümbernimetamine...)', + FolderDeleting : ' (kustutamine...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Palun sisesta faili uus nimi: ', + FileRenameExt : 'Kas oled kindel, et tahad faili laiendit muuta? Fail võib muutuda kasutamatuks.', + FileRenaming : 'Ümbernimetamine...', + FileDelete : 'Kas oled kindel, et tahad kustutada faili "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Laadimine...', + FilesEmpty : 'See kaust on tühi.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Korv', + BasketClear : 'Tühjenda korv', + BasketRemove : 'Eemalda korvist', + BasketOpenFolder : 'Ava ülemine kaust', + BasketTruncateConfirm : 'Kas tahad tõesti eemaldada korvist kõik failid?', + BasketRemoveConfirm : 'Kas tahad tõesti eemaldada korvist faili "%1"?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Korvis ei ole ühtegi faili, lohista mõni siia.', + BasketCopyFilesHere : 'Failide kopeerimine korvist', + BasketMoveFilesHere : 'Failide liigutamine korvist', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Laadi üles', + UploadTip : 'Laadi üles uus fail', + Refresh : 'Värskenda', + Settings : 'Sätted', + Help : 'Abi', + HelpTip : 'Abi', + + // Context Menus + Select : 'Vali', + SelectThumbnail : 'Vali pisipilt', + View : 'Kuva', + Download : 'Laadi alla', + + NewSubFolder : 'Uus alamkaust', + Rename : 'Nimeta ümber', + Delete : 'Kustuta', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Kopeeri siia', + MoveDragDrop : 'Liiguta siia', + + // Dialogs + RenameDlgTitle : 'Ümbernimetamine', + NewNameDlgTitle : 'Uue nime andmine', + FileExistsDlgTitle : 'Fail on juba olemas', + SysErrorDlgTitle : 'Süsteemi viga', + + FileOverwrite : 'Kirjuta üle', + FileAutorename : 'Nimeta automaatselt ümber', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'Olgu', + CancelBtn : 'Loobu', + CloseBtn : 'Sulge', + + // Upload Panel + UploadTitle : 'Uue faili üleslaadimine', + UploadSelectLbl : 'Vali üleslaadimiseks fail', + UploadProgressLbl : '(Üleslaadimine, palun oota...)', + UploadBtn : 'Laadi valitud fail üles', + UploadBtnCancel : 'Loobu', + + UploadNoFileMsg : 'Palun vali fail oma arvutist.', + UploadNoFolder : 'Palun vali enne üleslaadimist kataloog.', + UploadNoPerms : 'Failide üleslaadimine pole lubatud.', + UploadUnknError : 'Viga faili saatmisel.', + UploadExtIncorrect : 'Selline faili laiend pole selles kaustas lubatud.', + + // Flash Uploads + UploadLabel : 'Üleslaaditavad failid', + UploadTotalFiles : 'Faile kokku:', + UploadTotalSize : 'Kogusuurus:', + UploadSend : 'Laadi üles', + UploadAddFiles : 'Lisa faile', + UploadClearFiles : 'Eemalda failid', + UploadCancel : 'Katkesta üleslaadimine', + UploadRemove : 'Eemalda', + UploadRemoveTip : 'Eemalda !f', + UploadUploaded : '!n% üles laaditud', + UploadProcessing : 'Töötlemine...', + + // Settings Panel + SetTitle : 'Sätted', + SetView : 'Vaade:', + SetViewThumb : 'Pisipildid', + SetViewList : 'Loend', + SetDisplay : 'Kuva:', + SetDisplayName : 'Faili nimi', + SetDisplayDate : 'Kuupäev', + SetDisplaySize : 'Faili suurus', + SetSort : 'Sortimine:', + SetSortName : 'faili nime järgi', + SetSortDate : 'kuupäeva järgi', + SetSortSize : 'suuruse järgi', + SetSortExtension : 'laiendi järgi', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fail', + FilesCountMany : '%1 faili', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Päringu täitmine ei olnud võimalik. (Viga %1)', + Errors : + { + 10 : 'Vigane käsk.', + 11 : 'Allika liik ei olnud päringus määratud.', + 12 : 'Päritud liik ei ole sobiv.', + 102 : 'Sobimatu faili või kausta nimi.', + 103 : 'Piiratud õiguste tõttu ei olnud võimalik päringut lõpetada.', + 104 : 'Failisüsteemi piiratud õiguste tõttu ei olnud võimalik päringut lõpetada.', + 105 : 'Sobimatu faililaiend.', + 109 : 'Vigane päring.', + 110 : 'Tundmatu viga.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Sellenimeline fail või kaust on juba olemas.', + 116 : 'Kausta ei leitud. Palun värskenda lehte ja proovi uuesti.', + 117 : 'Faili ei leitud. Palun värskenda lehte ja proovi uuesti.', + 118 : 'Lähte- ja sihtasukoht on sama.', + 201 : 'Samanimeline fail on juba olemas. Üles laaditud faili nimeks pandi "%1".', + 202 : 'Vigane fail.', + 203 : 'Vigane fail. Fail on liiga suur.', + 204 : 'Üleslaaditud fail on rikutud.', + 205 : 'Serverisse üleslaadimiseks pole ühtegi ajutiste failide kataloogi.', + 206 : 'Üleslaadimine katkestati turvakaalutlustel. Fail sisaldab HTMLi sarnaseid andmeid.', + 207 : 'Üleslaaditud faili nimeks pandi "%1".', + 300 : 'Faili(de) liigutamine nurjus.', + 301 : 'Faili(de) kopeerimine nurjus.', + 500 : 'Failide sirvija on turvakaalutlustel keelatud. Palun võta ühendust oma süsteemi administraatoriga ja kontrolli CKFinderi seadistusfaili.', + 501 : 'Pisipiltide tugi on keelatud.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Faili nimi ei tohi olla tühi.', + FileExists : 'Fail nimega %s on juba olemas.', + FolderEmpty : 'Kausta nimi ei tohi olla tühi.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Faili nimi ei tohi sisaldada ühtegi järgnevatest märkidest: \n\\ / : * ? " < > |', + FolderInvChar : 'Faili nimi ei tohi sisaldada ühtegi järgnevatest märkidest: \n\\ / : * ? " < > |', + + PopupBlockView : 'Faili avamine uues aknas polnud võimalik. Palun seadista oma brauserit ning keela kõik hüpikakende blokeerijad selle saidi jaoks.', + XmlError : 'XML vastust veebiserverist polnud võimalik korrektselt laadida.', + XmlEmpty : 'XML vastust veebiserverist polnud võimalik korrektselt laadida. Serveri vastus oli tühi.', + XmlRawResponse : 'Serveri vastus toorkujul: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : '%s suuruse muutmine', + sizeTooBig : 'Pildi kõrgust ega laiust ei saa määrata suuremaks pildi esialgsest vastavast mõõtmest (%size).', + resizeSuccess : 'Pildi suuruse muutmine õnnestus.', + thumbnailNew : 'Tee uus pisipilt', + thumbnailSmall : 'Väike (%s)', + thumbnailMedium : 'Keskmine (%s)', + thumbnailLarge : 'Suur (%s)', + newSize : 'Määra uus suurus', + width : 'Laius', + height : 'Kõrgus', + invalidHeight : 'Sobimatu kõrgus.', + invalidWidth : 'Sobimatu laius.', + invalidName : 'Sobimatu faili nimi.', + newImage : 'Loo uus pilt', + noExtensionChange : 'Faili laiendit pole võimalik muuta.', + imageSmall : 'Lähtepilt on liiga väike.', + contextMenuName : 'Muuda suurust', + lockRatio : 'Lukusta külgede suhe', + resetSize : 'Lähtesta suurus' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Salvesta', + fileOpenError : 'Faili avamine pole võimalik.', + fileSaveSuccess : 'Faili salvestamine õnnestus.', + contextMenuName : 'Muuda', + loadingFile : 'Faili laadimine, palun oota...' + }, + + Maximize : + { + maximize : 'Maksimeeri', + minimize : 'Minimeeri' + }, + + Gallery : + { + current : 'Pilt {current}, kokku {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Otsimine' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/fa.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/fa.js new file mode 100644 index 0000000..f9e1374 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/fa.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Persian + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['fa'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, عدم دسترسی', + confirmCancel : 'برخی از گزینه ها تغییر کرده است، آیا مایل به بستن این پنجره هستید؟', + ok : 'تائید', + cancel : 'لغو', + confirmationTitle : 'تاییدیه', + messageTitle : 'اطلاعات', + inputTitle : 'سوال', + undo : 'حالت قبلی', + redo : 'حالت بعدی', + skip : 'نادیده گرفتن', + skipAll : 'نادیده گرفتن همه', + makeDecision : 'چه عملی انجام شود؟', + rememberDecision: 'انتخاب من را بیاد داشته باش' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'rtl', + HelpLang : 'en', + LangCode : 'fa', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'yyyy/mm/dd h:MM aa', + DateAmPm : ['ق.ظ', 'ب.ظ'], + + // Folders + FoldersTitle : 'پوشه ها', + FolderLoading : 'بارگذاری...', + FolderNew : 'لطفا نام پوشه جدید را وارد کنید: ', + FolderRename : 'لطفا نام پوشه جدید را وارد کنید: ', + FolderDelete : 'آیا اطمینان دارید که قصد حذف کردن پوشه "%1" را دارید؟', + FolderRenaming : ' (در حال تغییر نام...)', + FolderDeleting : ' (در حال حذف...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'لطفا نام جدید فایل را درج کنید: ', + FileRenameExt : 'آیا اطمینان دارید که قصد تغییر نام پسوند این فایل را دارید؟ ممکن است فایل غیر قابل استفاده شود', + FileRenaming : 'در حال تغییر نام...', + FileDelete : 'آیا اطمینان دارید که قصد حذف نمودن فایل "%1" را دارید؟', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'بارگذاری...', + FilesEmpty : 'این پوشه خالی است', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'سبد', + BasketClear : 'پاک کردن سبد', + BasketRemove : 'حذف از سبد', + BasketOpenFolder : 'باز نمودن پوشه والد', + BasketTruncateConfirm : 'تمام فایل های موجود در سبد حذف شود؟', + BasketRemoveConfirm : 'فایل "%1" از سبد حذف شود؟', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'هیچ فایلی در سبد نیست, برای افزودن فایل را به اینجا بکشید و رها کنید', + BasketCopyFilesHere : 'کپی فایلها از سبد', + BasketMoveFilesHere : 'انتقال فایلها از سبد', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'آپلود', + UploadTip : 'آپلود فایل جدید', + Refresh : 'بروزرسانی', + Settings : 'تنظیمات', + Help : 'راهنما', + HelpTip : 'راهنما', + + // Context Menus + Select : 'انتخاب', + SelectThumbnail : 'انتخاب تصویر کوچک', + View : 'نمایش', + Download : 'دانلود', + + NewSubFolder : 'زیرپوشه جدید', + Rename : 'تغییر نام', + Delete : 'حذف', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'کپی فایل به اینجا', + MoveDragDrop : 'انتقال فایل به اینجا', + + // Dialogs + RenameDlgTitle : 'تغییر نام', + NewNameDlgTitle : 'نام جدید', + FileExistsDlgTitle : 'فایلی با این نام وجود دارد', + SysErrorDlgTitle : 'خطای سیستم', + + FileOverwrite : 'رونویسی', + FileAutorename : 'تغییر نام خودکار', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'تایید', + CancelBtn : 'لغو', + CloseBtn : 'بستن', + + // Upload Panel + UploadTitle : 'آپلود فایل جدید', + UploadSelectLbl : 'انتخاب فابل برای آپلود', + UploadProgressLbl : '(درحال ارسال، لطفا صبر کنید...)', + UploadBtn : 'آپلود فایل', + UploadBtnCancel : 'لغو', + + UploadNoFileMsg : 'لطفا یک فایل جهت ارسال انتخاب کنید', + UploadNoFolder : 'لطفا پیش از آپلود، یک پوشه انتخاب کنید.', + UploadNoPerms : 'اجازه ارسال فایل نداده شنده است', + UploadUnknError : 'خطا در ارسال', + UploadExtIncorrect : 'پسوند فایل برای این پوشه مجاز نیست.', + + // Flash Uploads + UploadLabel : 'آپلود فایل', + UploadTotalFiles : 'مجموع فایلها:', + UploadTotalSize : 'مجموع حجم:', + UploadSend : 'آپلود فایل', + UploadAddFiles : 'افزودن فایلها', + UploadClearFiles : 'پاک کردن فایلها', + UploadCancel : 'لغو آپلود', + UploadRemove : 'حذف', + UploadRemoveTip : '!f حذف فایل', + UploadUploaded : '!n% آپلود شد', + UploadProcessing : 'در حال پردازش...', + + // Settings Panel + SetTitle : 'تنظیمات', + SetView : 'نمایش:', + SetViewThumb : 'تصویر کوچک', + SetViewList : 'فهرست', + SetDisplay : 'نمایش:', + SetDisplayName : 'نام فایل', + SetDisplayDate : 'تاریخ', + SetDisplaySize : 'اندازه فایل', + SetSort : 'مرتبسازی:', + SetSortName : 'با نام فایل', + SetSortDate : 'با تاریخ', + SetSortSize : 'با اندازه', + SetSortExtension : 'با پسوند', + + // Status Bar + FilesCountEmpty : '<پوشه خالی>', + FilesCountOne : 'یک فایل', + FilesCountMany : '%1 فایل', + + // Size and Speed + Kb : '%1KB', + Mb : '%1MB', + Gb : '%1GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'امکان تکمیل درخواست فوق وجود ندارد (خطا: %1)', + Errors : + { + 10 : 'دستور نامعتبر.', + 11 : 'نوع منبع در درخواست تعریف نشده است.', + 12 : 'نوع منبع درخواست شده معتبر نیست.', + 102 : 'نام فایل یا پوشه نامعتبر است.', + 103 : 'امکان کامل کردن این درخواست بخاطر محدودیت اختیارات وجود ندارد.', + 104 : 'امکان کامل کردن این درخواست بخاطر محدودیت دسترسی وجود ندارد.', + 105 : 'پسوند فایل نامعتبر است.', + 109 : 'درخواست نامعتبر است.', + 110 : 'خطای ناشناخته.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'فایل یا پوشه ای با این نام وجود دارد', + 116 : 'پوشه یافت نشد. لطفا بروزرسانی کرده و مجددا تلاش کنید.', + 117 : 'فایل یافت نشد. لطفا فهرست فایلها را بروزرسانی کرده و مجددا تلاش کنید.', + 118 : 'منبع و مقصد مسیر یکی است.', + 201 : 'یک فایل با همان نام از قبل موجود است. فایل آپلود شده به "%1" تغییر نام یافت.', + 202 : 'فایل نامعتبر', + 203 : 'فایل نامعتبر. اندازه فایل بیش از حد بزرگ است.', + 204 : 'فایل آپلود شده خراب است.', + 205 : 'هیچ پوشه موقتی برای آپلود فایل در سرور موجود نیست.', + 206 : 'آپلود به دلایل امنیتی متوقف شد. فایل محتوی اطلاعات HTML است.', + 207 : 'فایل آپلود شده به "%1" تغییر نام یافت.', + 300 : 'انتقال فایل (ها) شکست خورد.', + 301 : 'کپی فایل (ها) شکست خورد.', + 500 : 'مرورگر فایل به دلایل امنیتی غیر فعال است. لطفا با مدیر سامانه تماس بگیرید تا تنظیمات این بخش را بررسی نماید.', + 501 : 'پشتیبانی از تصاویر کوچک غیرفعال شده است' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'نام فایل نمیتواند خالی باشد', + FileExists : 'فایل %s از قبل وجود دارد', + FolderEmpty : 'نام پوشه نمیتواند خالی باشد', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'نام فایل نباید شامل این کاراکترها باشد: \n\\ / : * ? " < > |', + FolderInvChar : 'نام پوشه نباید شامل این کاراکترها باشد: \n\\ / : * ? " < > |', + + PopupBlockView : 'امکان بازگشایی فایل در پنجره جدید نیست. لطفا به بخش تنظیمات مرورگر خود مراجعه کنید و امکان بازگشایی پنجرههای بازشور را برای این سایت فعال کنید.', + XmlError : 'امکان بارگیری صحیح پاسخ XML از سرور مقدور نیست.', + XmlEmpty : 'امکان بارگیری صحیح پاسخ XML از سرور مقدور نیست. سرور پاسخ خالی بر میگرداند.', + XmlRawResponse : 'پاسخ اولیه از سرور: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'تغییر اندازه %s', + sizeTooBig : 'امکان تغییر مقادیر ابعاد طول و عرض تصویر به مقداری بیش از ابعاد اصلی ممکن نیست (%size).', + resizeSuccess : 'تصویر با موفقیت تغییر اندازه یافت.', + thumbnailNew : 'ایجاد انگشتی جدید', + thumbnailSmall : 'کوچک (%s)', + thumbnailMedium : 'متوسط (%s)', + thumbnailLarge : 'بزرگ (%s)', + newSize : 'اندازه جدید', + width : 'پهنا', + height : 'ارتفاع', + invalidHeight : 'ارتفاع نامعتبر.', + invalidWidth : 'پهنا نامعتبر.', + invalidName : 'نام فایل نامعتبر.', + newImage : 'ایجاد تصویر جدید', + noExtensionChange : 'تغییر پسوند فایل امکان پذیر نیست.', + imageSmall : 'تصویر اصلی خیلی کوچک است', + contextMenuName : 'تغییر اندازه', + lockRatio : 'قفل کردن تناسب.', + resetSize : 'بازنشانی اندازه.' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'ذخیره', + fileOpenError : 'امکان باز کردن فایل نیست', + fileSaveSuccess : 'فایل با موفقیت ذخیره شد.', + contextMenuName : 'ویرایش', + loadingFile : 'بارگذاری فایل، منتظر باشید...' + }, + + Maximize : + { + maximize : 'بیشینه', + minimize : 'کمینه' + }, + + Gallery : + { + current : 'Image {current} of {total}' // MISSING + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'جستجو' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/fi.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/fi.js new file mode 100644 index 0000000..8ee6f12 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/fi.js @@ -0,0 +1,313 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Finnish + * language. Translated into Finnish 2010-12-15 by Petteri Salmela, + * updated. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['fi'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, ei käytettävissä', + confirmCancel : 'Valintoja on muutettu. Suljetaanko ikkuna kuitenkin?', + ok : 'OK', + cancel : 'Peru', + confirmationTitle : 'Varmistus', + messageTitle : 'Ilmoitus', + inputTitle : 'Kysymys', + undo : 'Peru', + redo : 'Tee uudelleen', + skip : 'Ohita', + skipAll : 'Ohita kaikki', + makeDecision : 'Mikä toiminto suoritetaan?', + rememberDecision: 'Muista valintani' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'fi', + LangCode : 'fi', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'yyyy-mm-dd HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Kansiot', + FolderLoading : 'Lataan...', + FolderNew : 'Kirjoita uuden kansion nimi: ', + FolderRename : 'Kirjoita uusi nimi kansiolle ', + FolderDelete : 'Haluatko varmasti poistaa kansion "%1"?', + FolderRenaming : ' (Uudelleennimeää...)', + FolderDeleting : ' (Poistaa...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Kirjoita uusi tiedostonimi: ', + FileRenameExt : 'Haluatko varmasti muuttaa tiedostotarkennetta? Tiedosto voi muuttua käyttökelvottomaksi.', + FileRenaming : 'Uudelleennimeää...', + FileDelete : 'Haluatko varmasti poistaa tiedoston "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Lataa...', + FilesEmpty : 'Tyhjä kansio.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Kori', + BasketClear : 'Tyhjennä kori', + BasketRemove : 'Poista korista', + BasketOpenFolder : 'Avaa ylemmän tason kansio', + BasketTruncateConfirm : 'Haluatko todella poistaa kaikki tiedostot korista?', + BasketRemoveConfirm : 'Haluatko todella poistaa tiedoston "%1" korista?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Korissa ei ole tiedostoja. Lisää raahaamalla.', + BasketCopyFilesHere : 'Kopioi tiedostot korista.', + BasketMoveFilesHere : 'Siirrä tiedostot korista.', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Lataa palvelimelle', + UploadTip : 'Lataa uusi tiedosto palvelimelle', + Refresh : 'Päivitä', + Settings : 'Asetukset', + Help : 'Apua', + HelpTip : 'Apua', + + // Context Menus + Select : 'Valitse', + SelectThumbnail : 'Valitse esikatselukuva', + View : 'Näytä', + Download : 'Lataa palvelimelta', + + NewSubFolder : 'Uusi alikansio', + Rename : 'Uudelleennimeä ', + Delete : 'Poista', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Kopioi tähän', + MoveDragDrop : 'Siirrä tähän', + + // Dialogs + RenameDlgTitle : 'Nimeä uudelleen', + NewNameDlgTitle : 'Uusi nimi', + FileExistsDlgTitle : 'Tiedostonimi on jo olemassa!', + SysErrorDlgTitle : 'Järjestelmävirhe', + + FileOverwrite : 'Ylikirjoita', + FileAutorename : 'Nimeä uudelleen automaattisesti', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Peru', + CloseBtn : 'Sulje', + + // Upload Panel + UploadTitle : 'Lataa uusi tiedosto palvelimelle', + UploadSelectLbl : 'Valitse ladattava tiedosto', + UploadProgressLbl : '(Lataaminen palvelimelle käynnissä...)', + UploadBtn : 'Lataa valittu tiedosto palvelimelle', + UploadBtnCancel : 'Peru', + + UploadNoFileMsg : 'Valitse tiedosto tietokoneeltasi.', + UploadNoFolder : 'Valitse kansio ennen palvelimelle lataamista.', + UploadNoPerms : 'Tiedoston lataaminen palvelimelle evätty.', + UploadUnknError : 'Tiedoston siirrossa tapahtui virhe.', + UploadExtIncorrect : 'Tiedostotarkenne ei ole sallittu valitussa kansiossa.', + + // Flash Uploads + UploadLabel : 'Ladattavat tiedostot', + UploadTotalFiles : 'Tiedostoja yhteensä:', + UploadTotalSize : 'Yhteenlaskettu tiedostokoko:', + UploadSend : 'Lataa palvelimelle', + UploadAddFiles : 'Lisää tiedostoja', + UploadClearFiles : 'Poista tiedostot', + UploadCancel : 'Peru lataus', + UploadRemove : 'Poista', + UploadRemoveTip : 'Poista !f', + UploadUploaded : 'Ladattu !n%', + UploadProcessing : 'Käsittelee...', + + // Settings Panel + SetTitle : 'Asetukset', + SetView : 'Näkymä:', + SetViewThumb : 'Esikatselukuvat', + SetViewList : 'Luettelo', + SetDisplay : 'Näytä:', + SetDisplayName : 'Tiedostonimi', + SetDisplayDate : 'Päivämäärä', + SetDisplaySize : 'Tiedostokoko', + SetSort : 'Lajittele:', + SetSortName : 'aakkosjärjestykseen', + SetSortDate : 'päivämäärän mukaan', + SetSortSize : 'tiedostokoon mukaan', + SetSortExtension : 'tiedostopäätteen mukaan', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 tiedosto', + FilesCountMany : '%1 tiedostoa', + + // Size and Speed + Kb : '%1 kt', + Mb : '%1 Mt', + Gb : '%1 Gt', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Pyyntöä ei voitu suorittaa. (Virhe %1)', + Errors : + { + 10 : 'Virheellinen komento.', + 11 : 'Pyynnön resurssityyppi on määrittelemättä.', + 12 : 'Pyynnön resurssityyppi on virheellinen.', + 102 : 'Virheellinen tiedosto- tai kansionimi.', + 103 : 'Oikeutesi eivät riitä pyynnön suorittamiseen.', + 104 : 'Tiedosto-oikeudet eivät riitä pyynnön suorittamiseen.', + 105 : 'Virheellinen tiedostotarkenne.', + 109 : 'Virheellinen pyyntö.', + 110 : 'Tuntematon virhe.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Samanniminen tiedosto tai kansio on jo olemassa.', + 116 : 'Kansiota ei löydy. Yritä uudelleen kansiopäivityksen jälkeen.', + 117 : 'Tiedostoa ei löydy. Yritä uudelleen kansiopäivityksen jälkeen.', + 118 : 'Lähde- ja kohdekansio on sama!', + 201 : 'Samanniminen tiedosto on jo olemassa. Palvelimelle ladattu tiedosto on nimetty: "%1".', + 202 : 'Virheellinen tiedosto.', + 203 : 'Virheellinen tiedosto. Tiedostokoko on liian suuri.', + 204 : 'Palvelimelle ladattu tiedosto on vioittunut.', + 205 : 'Väliaikaishakemistoa ei ole määritetty palvelimelle lataamista varten.', + 206 : 'Palvelimelle lataaminen on peruttu turvallisuussyistä. Tiedosto sisältää HTML-tyylistä dataa.', + 207 : 'Palvelimelle ladattu tiedosto on nimetty: "%1".', + 300 : 'Tiedostosiirto epäonnistui.', + 301 : 'Tiedostokopiointi epäonnistui.', + 500 : 'Tiedostoselain on kytketty käytöstä turvallisuussyistä. Pyydä pääkäyttäjää tarkastamaan CKFinderin asetustiedosto.', + 501 : 'Esikatselukuvien tuki on kytketty toiminnasta.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Tiedosto on nimettävä!', + FileExists : 'Tiedosto %s on jo olemassa.', + FolderEmpty : 'Kansio on nimettävä!', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Tiedostonimi ei voi sisältää seuraavia merkkejä: \n\\ / : * ? " < > |', + FolderInvChar : 'Kansionimi ei voi sisältää seuraavia merkkejä: \n\\ / : * ? " < > |', + + PopupBlockView : 'Tiedostoa ei voitu avata uuteen ikkunaan. Salli selaimesi asetuksissa ponnahdusikkunat tälle sivulle.', + XmlError : 'Web-palvelimen XML-vastausta ei pystytty kunnolla lataamaan.', + XmlEmpty : 'Web-palvelimen XML vastausta ei pystytty lataamaan. Palvelin palautti tyhjän vastauksen.', + XmlRawResponse : 'Palvelimen käsittelemätön vastaus: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Muuta kokoa %s', + sizeTooBig : 'Kuvan mittoja ei voi asettaa alkuperäistä suuremmiksi(%size).', + resizeSuccess : 'Kuvan koon muuttaminen onnistui.', + thumbnailNew : 'Luo uusi esikatselukuva.', + thumbnailSmall : 'Pieni (%s)', + thumbnailMedium : 'Keskikokoinen (%s)', + thumbnailLarge : 'Suuri (%s)', + newSize : 'Aseta uusi koko', + width : 'Leveys', + height : 'Korkeus', + invalidHeight : 'Viallinen korkeus.', + invalidWidth : 'Viallinen leveys.', + invalidName : 'Viallinen tiedostonimi.', + newImage : 'Luo uusi kuva', + noExtensionChange : 'Tiedostomäärettä ei voi vaihtaa.', + imageSmall : 'Lähdekuva on liian pieni.', + contextMenuName : 'Muuta kokoa', + lockRatio : 'Lukitse suhteet', + resetSize : 'Alkuperäinen koko' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Tallenna', + fileOpenError : 'Tiedostoa ei voi avata.', + fileSaveSuccess : 'Tiedoston tallennus onnistui.', + contextMenuName : 'Muokkaa', + loadingFile : 'Tiedostoa ladataan ...' + }, + + Maximize : + { + maximize : 'Suurenna', + minimize : 'Pienennä' + }, + + Gallery : + { + current : 'Kuva {current} / {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Haku' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/fr.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/fr.js new file mode 100644 index 0000000..807cab1 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/fr.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the French + * language. +*/ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['fr'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, Inaccessible', + confirmCancel : 'Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer cette fenêtre ?', + ok : 'OK', + cancel : 'Annuler', + confirmationTitle : 'Confirmation', + messageTitle : 'Information', + inputTitle : 'Question', + undo : 'Annuler', + redo : 'Rétablir', + skip : 'Passer', + skipAll : 'Passer tout', + makeDecision : 'Quelle action choisir ?', + rememberDecision: 'Se rappeler de la décision' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'fr', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Dossiers', + FolderLoading : 'Chargement...', + FolderNew : 'Entrez le nouveau nom du dossier: ', + FolderRename : 'Entrez le nouveau nom du dossier: ', + FolderDelete : 'Êtes-vous sûr de vouloir effacer le dossier "%1"?', + FolderRenaming : ' (Renommage en cours...)', + FolderDeleting : ' (Suppression en cours...)', + DestinationFolder : 'Dossier de destination', + + // Files + FileRename : 'Entrez le nouveau nom du fichier: ', + FileRenameExt : 'Êtes-vous sûr de vouloir changer l\'extension de ce fichier? Le fichier pourrait devenir inutilisable.', + FileRenaming : 'Renommage en cours...', + FileDelete : 'Êtes-vous sûr de vouloir effacer le fichier "%1"?', + FilesDelete : 'Êtes-vous sûr de vouloir supprimer %1 fichiers ?', + FilesLoading : 'Chargement...', + FilesEmpty : 'Répertoire vide', + DestinationFile : 'Fichier de destination', + SkippedFiles : 'Liste des fichiers ignorés : ', + + // Basket + BasketFolder : 'Corbeille', + BasketClear : 'Vider la corbeille', + BasketRemove : 'Retirer de la corbeille', + BasketOpenFolder : 'Ouvrir le répertiore parent', + BasketTruncateConfirm : 'Êtes-vous sûr de vouloir supprimer tous les fichiers de la corbeille ?', + BasketRemoveConfirm : 'Êtes-vous sûr de vouloir supprimer le fichier "%1" de la corbeille ?', + BasketRemoveConfirmMultiple : 'Êtes-vous sûr de vouloir supprimer %1 fichiers de la corbeille ?', + BasketEmpty : 'Aucun fichier dans la corbeille, déposez en queques uns.', + BasketCopyFilesHere : 'Copier des fichiers depuis la corbeille', + BasketMoveFilesHere : 'Déplacer des fichiers depuis la corbeille', + + // Global messages + OperationCompletedSuccess : 'Operation terminée avec succès.', + OperationCompletedErrors : 'Operation terminée avec des erreurs.', + FileError : '%s: %e', + + // Move and Copy files + MovedFilesNumber : 'Nombre de fichiers déplacés : %s.', + CopiedFilesNumber : 'Nombre de fichiers copiés : %s.', + MoveFailedList : 'Les fichiers suivants ne peuvent être déplacés :
      %s', + CopyFailedList : 'Les fichiers suivants ne peuvent être copiés :
      %s', + + // Toolbar Buttons (some used elsewhere) + Upload : 'Envoyer', + UploadTip : 'Envoyer un nouveau fichier', + Refresh : 'Rafraîchir', + Settings : 'Configuration', + Help : 'Aide', + HelpTip : 'Aide', + + // Context Menus + Select : 'Choisir', + SelectThumbnail : 'Choisir une miniature', + View : 'Voir', + Download : 'Télécharger', + + NewSubFolder : 'Nouveau sous-dossier', + Rename : 'Renommer', + Delete : 'Effacer', + DeleteFiles : 'Supprimer les fichiers', + + CopyDragDrop : 'Copier ici', + MoveDragDrop : 'Déplacer ici', + + // Dialogs + RenameDlgTitle : 'Renommer', + NewNameDlgTitle : 'Nouveau fichier', + FileExistsDlgTitle : 'Fichier déjà existant', + SysErrorDlgTitle : 'Erreur système', + + FileOverwrite : 'Ré-écrire', + FileAutorename : 'Re-nommage automatique', + ManuallyRename : 'Renommage manuel', + + // Generic + OkBtn : 'OK', + CancelBtn : 'Annuler', + CloseBtn : 'Fermer', + + // Upload Panel + UploadTitle : 'Envoyer un nouveau fichier', + UploadSelectLbl : 'Sélectionner le fichier à télécharger', + UploadProgressLbl : '(Envoi en cours, veuillez patienter...)', + UploadBtn : 'Envoyer le fichier sélectionné', + UploadBtnCancel : 'Annuler', + + UploadNoFileMsg : 'Sélectionner un fichier sur votre ordinateur.', + UploadNoFolder : 'Merci de sélectionner un répertoire avant l\'envoi.', + UploadNoPerms : 'L\'envoi de fichier n\'est pas autorisé.', + UploadUnknError : 'Erreur pendant l\'envoi du fichier.', + UploadExtIncorrect : 'L\'extension du fichier n\'est pas autorisée dans ce dossier.', + + // Flash Uploads + UploadLabel : 'Fichier à envoyer', + UploadTotalFiles : 'Nombre de fichiers :', + UploadTotalSize : 'Poids total :', + UploadSend : 'Envoyer', + UploadAddFiles : 'Ajouter des fichiers', + UploadClearFiles : 'Supprimer les fichiers', + UploadCancel : 'Annuler l\'envoi', + UploadRemove : 'Retirer', + UploadRemoveTip : 'Retirer !f', + UploadUploaded : 'Téléchargement !n%', + UploadProcessing : 'Progression...', + + // Settings Panel + SetTitle : 'Configuration', + SetView : 'Voir :', + SetViewThumb : 'Miniatures', + SetViewList : 'Liste', + SetDisplay : 'Affichage :', + SetDisplayName : 'Nom du fichier', + SetDisplayDate : 'Date', + SetDisplaySize : 'Taille du fichier', + SetSort : 'Classement :', + SetSortName : 'par nom de fichier', + SetSortDate : 'par date', + SetSortSize : 'par taille', + SetSortExtension : 'par extension de fichier', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fichier', + FilesCountMany : '%1 fichiers', + + // Size and Speed + Kb : '%1 Ko', + Mb : '%1 Mo', + Gb : '%1 Go', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'La demande n\'a pas abouti. (Erreur %1)', + Errors : + { + 10 : 'Commande invalide.', + 11 : 'Le type de ressource n\'a pas été spécifié dans la commande.', + 12 : 'Le type de ressource n\'est pas valide.', + 102 : 'Nom de fichier ou de dossier invalide.', + 103 : 'La demande n\'a pas abouti : problème d\'autorisations.', + 104 : 'La demande n\'a pas abouti : problème de restrictions de permissions.', + 105 : 'Extension de fichier invalide.', + 109 : 'Demande invalide.', + 110 : 'Erreur inconnue.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Un fichier ou un dossier avec ce nom existe déjà.', + 116 : 'Ce dossier n\'existe pas. Veuillez rafraîchir la page et réessayer.', + 117 : 'Ce fichier n\'existe pas. Veuillez rafraîchir la page et réessayer.', + 118 : 'Les chemins vers la source et la cible sont les mêmes.', + 201 : 'Un fichier avec ce nom existe déjà. Le fichier téléversé a été renommé en "%1".', + 202 : 'Fichier invalide.', + 203 : 'Fichier invalide. La taille est trop grande.', + 204 : 'Le fichier téléversé est corrompu.', + 205 : 'Aucun dossier temporaire n\'est disponible sur le serveur.', + 206 : 'Envoi interrompu pour raisons de sécurité. Le fichier contient des données de type HTML.', + 207 : 'Le fichier téléchargé a été renommé "%1".', + 300 : 'Le déplacement des fichiers a échoué.', + 301 : 'La copie des fichiers a échoué.', + 500 : 'L\'interface de gestion des fichiers est désactivé. Contactez votre administrateur et vérifier le fichier de configuration de CKFinder.', + 501 : 'La fonction "miniatures" est désactivée.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Le nom du fichier ne peut être vide.', + FileExists : 'Le fichier %s existes déjà.', + FolderEmpty : 'Le nom du dossier ne peut être vide.', + FolderExists : 'Le dossier %s existe déjà.', + FolderNameExists : 'Le dossier existe déjà.', + + FileInvChar : 'Le nom du fichier ne peut pas contenir les charactères suivants : \n\\ / : * ? " < > |', + FolderInvChar : 'Le nom du dossier ne peut pas contenir les charactères suivants : \n\\ / : * ? " < > |', + + PopupBlockView : 'Il n\'a pas été possible d\'ouvrir la nouvelle fenêtre. Désactiver votre bloqueur de fenêtres pour ce site.', + XmlError : 'Impossible de charger correctement la réponse XML du serveur web.', + XmlEmpty : 'Impossible de charger la réponse XML du serveur web. Le serveur a renvoyé une réponse vide.', + XmlRawResponse : 'Réponse du serveur : %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Redimensionner %s', + sizeTooBig : 'Impossible de modifier la hauteur ou la largeur de cette image pour une valeur plus grande que l\'original (%size).', + resizeSuccess : 'L\'image a été redimensionnée avec succès.', + thumbnailNew : 'Créer une nouvelle vignette', + thumbnailSmall : 'Petit (%s)', + thumbnailMedium : 'Moyen (%s)', + thumbnailLarge : 'Gros (%s)', + newSize : 'Déterminer les nouvelles dimensions', + width : 'Largeur', + height : 'Hauteur', + invalidHeight : 'Hauteur invalide.', + invalidWidth : 'Largeur invalide.', + invalidName : 'Nom de fichier incorrect.', + newImage : 'Créer une nouvelle image', + noExtensionChange : 'L\'extension du fichier ne peut pas être changé.', + imageSmall : 'L\'image est trop petit', + contextMenuName : 'Redimensionner', + lockRatio : 'Conserver les proportions', + resetSize : 'Taille d\'origine' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Sauvegarder', + fileOpenError : 'Impossible d\'ouvrir le fichier', + fileSaveSuccess : 'Fichier sauvegardé avec succès.', + contextMenuName : 'Edition', + loadingFile : 'Chargement du fichier, veuillez patientez...' + }, + + Maximize : + { + maximize : 'Agrandir', + minimize : 'Minimiser' + }, + + Gallery : + { + current : 'Image {current} sur {total}' + }, + + Zip : + { + extractHereLabel : 'Décompresser ici', + extractToLabel : 'Décompresser vers...', + downloadZipLabel : 'Zipper et télécharger', + compressZipLabel : 'Zipper', + removeAndExtract : 'Supprimer les fichiers existants et décompresser', + extractAndOverwrite : 'Décompresser et remplacer les fichier existants', + extractSuccess : 'Les fichiers ont été décompressés avec succès.' + }, + + Search : + { + searchPlaceholder : 'Rechercher' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/gu.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/gu.js new file mode 100644 index 0000000..9861e26 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/gu.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Gujarati + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['gu'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, નથી.', + confirmCancel : 'ઘણા વિકલ્પો બદલાયા છે. તમારે શું આ બોક્ષ્ બંધ કરવું છે?', + ok : 'ઓકે', + cancel : 'રદ કરવું', + confirmationTitle : 'કન્ફર્મે', + messageTitle : 'માહિતી', + inputTitle : 'પ્રશ્ન', + undo : 'અન્ડું', + redo : 'રીડુ', + skip : 'સ્કીપ', + skipAll : 'બધા સ્કીપ', + makeDecision : 'તમારે શું કરવું છે?', + rememberDecision: 'મારો વિકલ્પ યાદ રાખો' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'gu', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'm/d/yyyy h:MM aa', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'ફોલ્ડર્સ', + FolderLoading : 'લોડીંગ...', + FolderNew : 'નવું ફોલ્ડર નું નામ આપો: ', + FolderRename : 'નવું ફોલ્ડર નું નામ આપો: ', + FolderDelete : 'શું તમારે "%1" ફોલ્ડર ડિલીટ કરવું છે?', + FolderRenaming : ' (નવું નામ...)', + FolderDeleting : ' (ડિલીટ...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'નવી ફાઈલ નું નામ આપો: ', + FileRenameExt : 'છું તમારે ફાઈલ એક્ષ્તેન્શન્ બદલવું છે? તે ફાઈલ પછી નહી વપરાય.', + FileRenaming : 'નવું નામ...', + FileDelete : 'શું તમારે "%1" ફાઈલ ડિલીટ કરવી છે?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'લોડીંગ...', + FilesEmpty : 'આ ફોલ્ડર ખાલી છે.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'બાસ્કેટ', + BasketClear : 'બાસ્કેટ ખાલી કરવી', + BasketRemove : 'બાસ્કેટ માં થી કાઢી નાખવું', + BasketOpenFolder : 'પેરન્ટ ફોલ્ડર ખોલવું', + BasketTruncateConfirm : 'શું તમારે બાસ્કેટ માંથી બધી ફાઈલ કાઢી નાખવી છે?', + BasketRemoveConfirm : 'તમારે "%1" ફાઈલ બાસ્કેટ માંથી કાઢી નાખવી છે?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'બાસ્કેટ માં એક પણ ફાઈલ નથી, ડ્રેગ અને ડ્રોપ કરો.', + BasketCopyFilesHere : 'બાસ્કેટમાંથી ફાઈલ કોપી કરો', + BasketMoveFilesHere : 'બાસ્કેટમાંથી ફાઈલ મુવ કરો', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'અપલોડ', + UploadTip : 'અપલોડ નવી ફાઈલ', + Refresh : 'રીફ્રેશ', + Settings : 'સેટીંગ્સ', + Help : 'મદદ', + HelpTip : 'મદદ', + + // Context Menus + Select : 'પસંદ કરો', + SelectThumbnail : 'થમ્બનેલ પસંદ કરો', + View : 'વ્યુ', + Download : 'ડાઊનલોડ', + + NewSubFolder : 'નવું સ્બફોલડર', + Rename : 'નવું નામ', + Delete : 'કાઢી નાખવું', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'અહિયાં ફાઈલ કોપી કરો', + MoveDragDrop : 'અહિયાં ફાઈલ મુવ કરો', + + // Dialogs + RenameDlgTitle : 'નવું નામ', + NewNameDlgTitle : 'નવું નામ', + FileExistsDlgTitle : 'ફાઈલ છે', + SysErrorDlgTitle : 'સિસ્ટમ એરર', + + FileOverwrite : 'ફાઈલ બદલવી છે', + FileAutorename : 'આટો-નવું નામ', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'ઓકે', + CancelBtn : 'કેન્સલ', + CloseBtn : 'બંધ', + + // Upload Panel + UploadTitle : 'નવી ફાઈલ અપલોડ કરો', + UploadSelectLbl : 'અપલોડ માટે ફાઈલ પસંદ કરો', + UploadProgressLbl : '(અપલોડ થાય છે, રાહ જુવો...)', + UploadBtn : 'પસંદ કરેલી ફાઈલ અપલોડ કરો', + UploadBtnCancel : 'રદ કરો', + + UploadNoFileMsg : 'તમારા કોમ્પુટર પરથી ફાઈલ પસંદ કરો.', + UploadNoFolder : 'અપલોડ કરતા પેહલાં ફોલ્ડર પસંદ કરો.', + UploadNoPerms : 'ફાઈલ અપલોડ શક્ય નથી.', + UploadUnknError : 'ફાઈલ મોકલવામાં એરર છે.', + UploadExtIncorrect : 'આ ફોલ્ડરમાં આ એક્ષટેનસન શક્ય નથી.', + + // Flash Uploads + UploadLabel : 'અપલોડ કરવાની ફાઈલો', + UploadTotalFiles : 'ટોટલ ફાઈલ્સ:', + UploadTotalSize : 'ટોટલ જગ્યા:', + UploadSend : 'અપલોડ', + UploadAddFiles : 'ફાઈલ ઉમેરો', + UploadClearFiles : 'ક્લીયર ફાઈલ્સ', + UploadCancel : 'અપલોડ રદ કરો', + UploadRemove : 'રીમૂવ', + UploadRemoveTip : 'રીમૂવ !f', + UploadUploaded : 'અપ્લોડેડ !n%', + UploadProcessing : 'પ્રોસેસ ચાલુ છે...', + + // Settings Panel + SetTitle : 'સેટિંગ્સ', + SetView : 'વ્યુ:', + SetViewThumb : 'થામ્ન્બનેલ્સ', + SetViewList : 'લીસ્ટ', + SetDisplay : 'ડિસ્પ્લે:', + SetDisplayName : 'ફાઈલનું નામ', + SetDisplayDate : 'તારીખ', + SetDisplaySize : 'ફાઈલ સાઈઝ', + SetSort : 'સોર્ટિંગ:', + SetSortName : 'ફાઈલના નામ પર', + SetSortDate : 'તારીખ પર', + SetSortSize : 'સાઈઝ પર', + SetSortExtension : 'એક્ષટેનસન પર', + + // Status Bar + FilesCountEmpty : '<ફોલ્ડર ખાલી>', + FilesCountOne : '1 ફાઈલ', + FilesCountMany : '%1 ફાઈલો', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'તમારી રીક્વેસ્ટ માન્ય નથી. (એરર %1)', + Errors : + { + 10 : 'કમાંડ માન્ય નથી.', + 11 : 'તમારી રીક્વેસ્ટ માન્ય નથી.', + 12 : 'તમારી રીક્વેસ્ટ રિસોર્સ માન્ય નથી.', + 102 : 'ફાઈલ અથવા ફોલ્ડરનું નામ માન્ય નથી.', + 103 : 'ઓથોરીટી ન હોવાને કારણે, તમારી રીક્વેસ્ટ માન્ય નથી..', + 104 : 'સિસ્ટમ પરમીસન ન હોવાને કારણે, તમારી રીક્વેસ્ટ માન્ય નથી.', + 105 : 'ફાઈલ એક્ષટેનસન માન્ય નથી.', + 109 : 'ઇનવેલીડ રીક્વેસ્ટ.', + 110 : 'અન્નોન એરર.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'એજ નામ વાળું ફાઈલ અથવા ફોલ્ડર છે.', + 116 : 'ફોલ્ડર નથી. રીફ્રેશ દબાવી ફરી પ્રયત્ન કરો.', + 117 : 'ફાઈલ નથી. રીફ્રેશ દબાવી ફરી પ્રયત્ન કરો..', + 118 : 'સોર્સ અને ટાર્ગેટ ના પાથ સરખા નથી.', + 201 : 'એજ નામ વાળી ફાઈલ છે. અપલોડ કરેલી નવી ફાઈલનું નામ "%1".', + 202 : 'ફાઈલ માન્ય નથી.', + 203 : 'ફાઈલ માન્ય નથી. ફાઈલની સાઈઝ ઘણી મોટી છે.', + 204 : 'અપલોડ કરેલી ફાઈલ કરપ્ટ છે.', + 205 : 'સર્વર પર અપલોડ કરવા માટે ટેમ્પરરી ફોલ્ડર નથી.', + 206 : 'સિક્યોરીટીના કારણે અપલોડ કેન્સલ કરેલ છે. ફાઈલમાં HTML જેવો ડેટા છે.', + 207 : 'અપલોડ ફાઈલનું નવું નામ "%1".', + 300 : 'ફાઈલ મુવ શક્ય નથી.', + 301 : 'ફાઈલ કોપી શક્ય નથી.', + 500 : 'સિક્યોરીટીના કારણે ફાઈલ બ્રાઉઝર બંધ કરેલ છે. તમારા સિક્યોરીટી એડ્મીનીસ્ટેટરની મદદથી CKFinder કોન્ફીગ્યુંરેષન ફાઈલ તપાસો.', + 501 : 'થમ્બનેલનો સપોર્ટ બંધ કરેલો છે.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'ફાઈલનું નામ ખાલીના હોવું જોઈએ', + FileExists : 'ફાઈલ %s હાજર છે.', + FolderEmpty : 'ફોલ્ડરનું નામ ખાલીના હોવું જોઈએ.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'ફાઈલના નામમાં એમના કોઈ પણ કેરેક્ટર ન ચાલે: \n\\ / : * ? " < > |', + FolderInvChar : 'ફોલ્ડરના નામમાં એમના કોઈ પણ કેરેક્ટર ન ચાલે: \n\\ / : * ? " < > |', + + PopupBlockView : 'નવી વિન્ડોમાં ફાઈલ ખોલવી શક્ય નથી. તમારું બ્રાઉઝર કોન્ફીગ કરી અને આ સાઈટ માટેના બથા પોપઅપ બ્લોકર બંધ કરો.', + XmlError : 'વેબ સર્વેરમાંથી XML રીર્સ્પોન્સ લેવો શક્ય નથી.', + XmlEmpty : 'વેબ સર્વેરમાંથી XML રીર્સ્પોન્સ લેવો શક્ય નથી. સર્વરે ખાલી રિસ્પોન્સ આપ્યો.', + XmlRawResponse : 'સર્વર પરનો રો રિસ્પોન્સ: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'રીસાઈઝ %s', + sizeTooBig : 'ચિત્રની પોહાલાઈ અને લંબાઈ ઓરીજીનલ ચિત્ર કરતા મોટી ન હોઈ શકે (%size).', + resizeSuccess : 'ચિત્ર રીસાઈઝ .', + thumbnailNew : 'નવો થમ્બનેલ બનાવો', + thumbnailSmall : 'નાનું (%s)', + thumbnailMedium : 'મધ્યમ (%s)', + thumbnailLarge : 'મોટું (%s)', + newSize : 'નવી સાઈઝ', + width : 'પોહાલાઈ', + height : 'ઊંચાઈ', + invalidHeight : 'ઊંચાઈ ખોટી છે.', + invalidWidth : 'પોહાલાઈ ખોટી છે.', + invalidName : 'ફાઈલનું નામ ખોટું છે.', + newImage : 'નવી ઈમેજ બનાવો', + noExtensionChange : 'ફાઈલ એક્ષ્ટેન્શન બદલી શકાય નહી.', + imageSmall : 'સોર્સ ઈમેજ નાની છે.', + contextMenuName : 'રીસાઈઝ', + lockRatio : 'લોક રેષીઓ', + resetSize : 'રીસેટ સાઈઝ' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'સેવ', + fileOpenError : 'ફાઈલ ખોલી સકાય નહી.', + fileSaveSuccess : 'ફાઈલ સેવ થઈ ગઈ છે.', + contextMenuName : 'એડીટ', + loadingFile : 'લોડીંગ ફાઈલ, રાહ જુવો...' + }, + + Maximize : + { + maximize : 'મેક્ષિમાઈઝ', + minimize : 'મિનીમાઈઝ' + }, + + Gallery : + { + current : 'ઈમેજ {current} બધામાંથી {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'શોધો' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/he.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/he.js new file mode 100644 index 0000000..7d0150c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/he.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Hebrew + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['he'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, לא זמין', + confirmCancel : 'חלק מהאפשרויות שונו. האם לסגור את החלון?', + ok : 'אישור', + cancel : 'ביטול', + confirmationTitle : 'אישור', + messageTitle : 'הודעה', + inputTitle : 'שאלה', + undo : 'לבטל', + redo : 'לעשות שוב', + skip : 'דלג', + skipAll : 'דלג הכל', + makeDecision : 'איזו פעולה לבצע?', + rememberDecision: 'זכור החלטתי' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'rtl', + HelpLang : 'en', + LangCode : 'he', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'd/m/yyyy HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'תיקיות', + FolderLoading : 'טוען...', + FolderNew : 'יש להקליד שם חדש לתיקיה: ', + FolderRename : 'יש להקליד שם חדש לתיקיה: ', + FolderDelete : 'האם למחוק את התיקיה "%1" ?', + FolderRenaming : ' (משנה שם...)', + FolderDeleting : ' (מוחק...)', + DestinationFolder : 'תיקיית יעד', + + // Files + FileRename : 'יש להקליד שם חדש לקובץ: ', + FileRenameExt : 'האם לשנות את הסיומת של הקובץ?', + FileRenaming : 'משנה שם...', + FileDelete : 'האם למחוק את הקובץ "%1"?', + FilesDelete : 'האם למחוק %1 קבצים?', + FilesLoading : 'טוען...', + FilesEmpty : 'תיקיה ריקה', + DestinationFile : 'קובץ יעד', + SkippedFiles : 'רשימת קבצים שדולגו:', + + // Basket + BasketFolder : 'סל קבצים', + BasketClear : 'ניקוי סל הקבצים', + BasketRemove : 'מחיקה מסל הקבצים', + BasketOpenFolder : 'פתיחת תיקיית אב', + BasketTruncateConfirm : 'האם למחוק את כל הקבצים מסל הקבצים?', + BasketRemoveConfirm : 'האם למחוק את הקובץ "%1" מסל הקבצים?', + BasketRemoveConfirmMultiple : 'האם למחוק %1 קבצים מסל הקבצים?', + BasketEmpty : 'אין קבצים בסל הקבצים, יש לגרור לכאן קובץ.', + BasketCopyFilesHere : 'העתקת קבצים מסל הקבצים', + BasketMoveFilesHere : 'הזזת קבצים מסל הקבצים', + + // Global messages + OperationCompletedSuccess : 'הפעולה הושלמה בהצלחה.', + OperationCompletedErrors : 'הפעולה הושלמה עם שגיאות.', + FileError : '%s: %e', + + // Move and Copy files + MovedFilesNumber : 'מספר קבצים שהוזזו: %s.', + CopiedFilesNumber : 'מספר קבצים שהועתקו: %s.', + MoveFailedList : 'המערכת לא הצליחה להזיז את הקבצים הבאים:
      %s', + CopyFailedList : 'המערכת לא הצליחה להעתיק את הקבצים הבאים:
      %s', + + // Toolbar Buttons (some used elsewhere) + Upload : 'העלאה', + UploadTip : 'העלאת קובץ חדש', + Refresh : 'ריענון', + Settings : 'הגדרות', + Help : 'עזרה', + HelpTip : 'עזרה', + + // Context Menus + Select : 'בחירה', + SelectThumbnail : 'בחירת תמונה מוקטנת', + View : 'צפיה', + Download : 'הורדה', + + NewSubFolder : 'תת-תיקיה חדשה', + Rename : 'שינוי שם', + Delete : 'מחיקה', + DeleteFiles : 'מחיקת קבצים', + + CopyDragDrop : 'העתקת קבצים לכאן', + MoveDragDrop : 'הזזת קבצים לכאן', + + // Dialogs + RenameDlgTitle : 'שינוי שם', + NewNameDlgTitle : 'שם חדש', + FileExistsDlgTitle : 'קובץ זה כבר קיים', + SysErrorDlgTitle : 'שגיאת מערכת', + + FileOverwrite : 'החלפה', + FileAutorename : 'שינוי שם אוטומטי', + ManuallyRename : 'שינוי שם ידני', + + // Generic + OkBtn : 'אישור', + CancelBtn : 'ביטול', + CloseBtn : 'סגור', + + // Upload Panel + UploadTitle : 'העלאת קובץ חדש', + UploadSelectLbl : 'בחירת קובץ להעלאה', + UploadProgressLbl : '(העלאה מתבצעת, נא להמתין...)', + UploadBtn : 'העלאת קובץ', + UploadBtnCancel : 'ביטול', + + UploadNoFileMsg : 'יש לבחור קובץ מהמחשב', + UploadNoFolder : 'יש לבחור תיקיה לפני ההעלאה.', + UploadNoPerms : 'העלאת קובץ אסורה.', + UploadUnknError : 'שגיאה בשליחת הקובץ.', + UploadExtIncorrect : 'סוג קובץ זה לא מאושר בתיקיה זאת.', + + // Flash Uploads + UploadLabel : 'קבצים להעלאה', + UploadTotalFiles : 'כמות קבצים:', + UploadTotalSize : 'גודל סופי:', + UploadSend : 'התחלת העלאה', + UploadAddFiles : 'הוספת קבצים', + UploadClearFiles : 'ניקוי קבצים', + UploadCancel : 'ביטול העלאה', + UploadRemove : 'מחיקה מהרשימה', + UploadRemoveTip : 'מחיקת הקובץ !f', + UploadUploaded : '!n% הועלו', + UploadProcessing : 'מעבד...', + + // Settings Panel + SetTitle : 'הגדרות', + SetView : 'צפיה:', + SetViewThumb : 'תמונות מוקטנות', + SetViewList : 'רשימה', + SetDisplay : 'תצוגה:', + SetDisplayName : 'שם קובץ', + SetDisplayDate : 'תאריך', + SetDisplaySize : 'גודל קובץ', + SetSort : 'מיון:', + SetSortName : 'לפי שם', + SetSortDate : 'לפי תאריך', + SetSortSize : 'לפי גודל', + SetSortExtension : 'לפי סיומת (Extension)', + + // Status Bar + FilesCountEmpty : '<תיקיה ריקה>', + FilesCountOne : 'קובץ 1', + FilesCountMany : '%1 קבצים', + + // Size and Speed + Kb : '%1KB', + Mb : '%1MB', + Gb : '%1GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'לא היה ניתן להשלים את הבקשה. (שגיאה %1)', + Errors : + { + 10 : 'הוראה לא תקינה.', + 11 : 'סוג המשאב לא צויין בבקשה לשרת.', + 12 : 'סוג המשאב המצויין לא תקין.', + 102 : 'שם הקובץ או התיקיה לא תקין.', + 103 : 'לא היה ניתן להשלים את הבקשה בשל הרשאות מוגבלות.', + 104 : 'לא היה ניתן להשלים את הבקשה בשל הרשאות מערכת קבצים מוגבלות.', + 105 : 'סיומת הקובץ לא תקינה.', + 109 : 'בקשה לא תקינה.', + 110 : 'שגיאה לא ידועה.', + 111 : 'לא ניתן היה להשלים את הבקשה בשל הגודל החריג של הקובץ הנוצר.', + 115 : 'כבר קיים/ת קובץ או תיקיה באותו השם.', + 116 : 'התיקיה לא נמצאה. נא לרענן ולנסות שוב.', + 117 : 'הקובץ לא נמצא. נא לרענן ולנסות שוב.', + 118 : 'כתובות המקור והיעד זהות.', + 201 : 'קובץ עם אותו השם כבר קיים. שם הקובץ שהועלה שונה ל "%1"', + 202 : 'הקובץ לא תקין.', + 203 : 'הקובץ לא תקין. גודל הקובץ גדול מדי.', + 204 : 'הקובץ המועלה לא תקין', + 205 : 'לא קיימת בשרת תיקיה זמנית להעלאת קבצים.', + 206 : 'ההעלאה בוטלה מסיבות אבטחה. הקובץ מכיל תוכן שדומה ל-HTML.', + 207 : 'שם הקובץ שהועלה שונה ל "%1"', + 300 : 'העברת הקבצים נכשלה.', + 301 : 'העתקת הקבצים נכשלה.', + 500 : 'דפדפן הקבצים מנוטרל מסיבות אבטחה. יש לפנות למנהל המערכת ולבדוק את קובץ התצורה של CKFinder.', + 501 : 'התמיכה בתמונות מוקטנות מבוטלת.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'שם הקובץ לא יכול להיות ריק', + FileExists : 'הקובץ %s כבר קיים', + FolderEmpty : 'שם התיקיה לא יכול להיות ריק', + FolderExists : 'התיקיה %s כבר קיימת.', + FolderNameExists : 'התיקיה כבר קיימת.', + + FileInvChar : 'שם הקובץ לא יכול לכלול תווים הבאים: \n\\ / : * ? " < > |', + FolderInvChar : 'שם התיקיה לא יכול לכלול תווים הבאים: \n\\ / : * ? " < > |', + + PopupBlockView : 'לא היה ניתן לפתוח קובץ בחלון חדש. נא לבדוק את הגדרות הדפדפן ולבטל את חוסמי החלונות הקובצים.', + XmlError : 'לא היה ניתן לטעון מהשרת כהלכה את קובץ ה-XML.', + XmlEmpty : 'לא היה ניתן לטעון מהשרת את קובץ ה-XML. השרת החזיר תגובה ריקה.', + XmlRawResponse : 'תגובה גולמית מהשרת: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'שינוי גודל התמונה %s', + sizeTooBig : 'גובה ורוחב התמונה לא יכולים להיות גדולים מהגודל המקורי שלה (%size).', + resizeSuccess : 'גודל התמונה שונה שהצלחה.', + thumbnailNew : 'יצירת תמונה מוקטנת (Thumbnail)', + thumbnailSmall : 'קטנה (%s)', + thumbnailMedium : 'בינונית (%s)', + thumbnailLarge : 'גדולה (%s)', + newSize : 'קביעת גודל חדש', + width : 'רוחב', + height : 'גובה', + invalidHeight : 'גובה לא חוקי.', + invalidWidth : 'רוחב לא חוקי.', + invalidName : 'שם הקובץ לא חוקי.', + newImage : 'יצירת תמונה חדשה', + noExtensionChange : 'לא ניתן לשנות את סוג הקובץ.', + imageSmall : 'התמונה המקורית קטנה מדי', + contextMenuName : 'שינוי גודל', + lockRatio : 'נעילת היחס', + resetSize : 'איפוס הגודל' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'שמירה', + fileOpenError : 'לא היה ניתן לפתוח את הקובץ.', + fileSaveSuccess : 'הקובץ נשמר בהצלחה.', + contextMenuName : 'עריכה', + loadingFile : 'טוען קובץ, נא להמתין...' + }, + + Maximize : + { + maximize : 'הגדלה למקסימום', + minimize : 'הקטנה למינימום' + }, + + Gallery : + { + current : 'תמונה {current} מתוך {total}' + }, + + Zip : + { + extractHereLabel : 'חילוץ לפה', + extractToLabel : 'חילוץ ל...', + downloadZipLabel : 'הורדה כקובץ ZIP', + compressZipLabel : 'דחיסה לקובץ ZIP', + removeAndExtract : 'מחיקת הקובץ וחילוצו', + extractAndOverwrite : 'חילוץ והחלפת קבצים קיימים', + extractSuccess : 'הקבצים חולצו בהצלחה.' + }, + + Search : + { + searchPlaceholder : 'חיפוש' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/hi.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/hi.js new file mode 100644 index 0000000..50de16d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/hi.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Hindi + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['hi'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, नही है', + confirmCancel : 'काफी विकल्प बदले हुवे है. क्या आपको दाएलोग विंडो बंद करना है?', + ok : 'ओके', + cancel : 'खारिज', + confirmationTitle : 'क्नफ्र्म्रेसं', + messageTitle : 'माहिती', + inputTitle : 'प्रश्न', + undo : 'उन्डू', + redo : 'रीडू', + skip : 'स्किप', + skipAll : 'स्किप ओल', + makeDecision : 'क्या करना चाहिये?', + rememberDecision: 'मेरा विकल्प याद रखो' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'hi', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'm/d/yyyy h:MM aa', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'फ़ोल्डर्स', + FolderLoading : 'लोडिग...', + FolderNew : 'फोल्डरका नया नाम टाईप करो: ', + FolderRename : 'फोल्डरका नया नाम टाईप करो: ', + FolderDelete : 'क्या आपको "%1" फोल्डर डीलिट करना है?', + FolderRenaming : ' (नया नाम...)', + FolderDeleting : ' (डिलिट...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'फाएलका नया नाम टाईप करो: ', + FileRenameExt : 'क्या आपको फाएल एक्सटेंसन बदलना है? फाएल का उपयोग नही कर सकोगे.', + FileRenaming : 'नया नाम...', + FileDelete : 'क्या आपको फाएल डिलिट करना है "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'लोडिग...', + FilesEmpty : 'ये फोल्डर खाली है.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'बास्केट', + BasketClear : 'बास्केट खाली करो', + BasketRemove : 'बास्केटमें से रीमूव करो', + BasketOpenFolder : 'पेरंट फोल्डर को खोलो', + BasketTruncateConfirm : 'क्या आपको बास्केट में से सब फाएल खाली करना हे?', + BasketRemoveConfirm : 'क्या आपको फाएल "%1" बास्केट में से डिलिट करना है?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'बास्केट में कोइ फाएल नहीं है, नई ड्रेग और ड्रॉप करो.', + BasketCopyFilesHere : 'बास्केट में से फाएल कोपी करो', + BasketMoveFilesHere : 'बास्केट में से फाएल मूव करो', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'अपलोड', + UploadTip : 'अपलोड नई फाएल', + Refresh : 'रिफ्रेश', + Settings : 'सेटिंग्स', + Help : 'मदद', + HelpTip : 'मदद', + + // Context Menus + Select : 'सिलेक्ट', + SelectThumbnail : 'सिलेक्ट थम्बनेल', + View : 'व्यू', + Download : 'डाउनलोड', + + NewSubFolder : 'नया सबफोल्डर', + Rename : 'रिनेम', + Delete : 'डिलिट', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'यहाँ कोपी करें', + MoveDragDrop : 'यंहा मूव करें', + + // Dialogs + RenameDlgTitle : 'रीनेम', + NewNameDlgTitle : 'नया नाम', + FileExistsDlgTitle : 'फाएल मौजूद हैं', + SysErrorDlgTitle : 'सिस्टम एरर', + + FileOverwrite : 'ओवरराईट', + FileAutorename : 'ऑटो-रीनेम', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'ओके', + CancelBtn : 'केंसल', + CloseBtn : 'क्लोस', + + // Upload Panel + UploadTitle : 'नया फाएल उपलोड करो', + UploadSelectLbl : 'उपलोड करने के लिये फाएल चुनो', + UploadProgressLbl : '(उपलोड जारी है, राह देखिय...)', + UploadBtn : 'उपलोडके लिये फाएल चुनो', + UploadBtnCancel : 'केन्सल', + + UploadNoFileMsg : 'आपके कोम्पुटर से फाएल चुनो.', + UploadNoFolder : 'फोल्डर चुनके अपलोडिग करिये.', + UploadNoPerms : 'फाएल उपलोड नही कर सकते.', + UploadUnknError : 'फाएल भेजने में मुश्केली हो रही है.', + UploadExtIncorrect : 'ये फोल्डरमें ये फाइल एक्सटेंसन अलाव नही है.', + + // Flash Uploads + UploadLabel : 'अपलोड के लिये फाएल्स', + UploadTotalFiles : 'कुल फाएल्स:', + UploadTotalSize : 'कुल साएज:', + UploadSend : 'अपलोड', + UploadAddFiles : 'फाएल एड करें', + UploadClearFiles : 'फाइल क्लेयर करें', + UploadCancel : 'अपलोड केन्सल करें', + UploadRemove : 'रीमूव', + UploadRemoveTip : 'रीमुव !f', + UploadUploaded : 'अपलोड हो गई !n%', + UploadProcessing : 'अपलोड जारी हैं...', + + // Settings Panel + SetTitle : 'सेटिंग्स', + SetView : 'व्यू:', + SetViewThumb : 'थुम्बनेल्स', + SetViewList : 'लिस्ट', + SetDisplay : 'डिस्प्ले:', + SetDisplayName : 'फाएलका नाम', + SetDisplayDate : 'तारीख', + SetDisplaySize : 'फाएल साईज', + SetSort : 'सोर्टिंग:', + SetSortName : 'फाएलनाम से', + SetSortDate : 'तारिख से', + SetSortSize : 'साईज से', + SetSortExtension : 'एक्सटेंसन से', + + // Status Bar + FilesCountEmpty : '<फोल्डर खाली>', + FilesCountOne : '1 फाएल', + FilesCountMany : '%1 फाएल', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'आपकी रिक्वेस्ट क्मप्लित नही कर सकते. (एरर %1)', + Errors : + { + 10 : 'इन्वेलीड कमांड.', + 11 : 'यह रिसोर्स टाईप उपलब्ध नहीं है.', + 12 : 'यह रिसोर्स टाईप वेलिड नही हैं.', + 102 : 'फाएल या फोल्डर का नाम वेलिड नहीं है.', + 103 : 'ओथोरिसेसंन रिस्त्रिक्सं की वजह से, आपकी रिक्वेस्ट पूरी नही कर सकते.', + 104 : 'सिस्टम परमिशन रिस्त्रिक्सं की वजह से, आपकी रिक्वेस्ट पूरी नही कर सकते..', + 105 : 'फाएल एक्स्त्न्सं गलत है.', + 109 : 'इन्वेलीड रिक्वेस्ट.', + 110 : 'अननोन एरर.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'सेम नाम का फाएल या फोल्डर मोजूद है.', + 116 : 'फोल्डर नही मिला. रिफ्रेस करके वापिस प्रयत्न करे.', + 117 : 'फाएल नही मिला. फाएल लिस्टको रिफ्रेस करके वापिस प्रयत्न करे.', + 118 : 'सोर्स और टारगेट के पाथ एक जैसे है.', + 201 : 'वहि नाम की फाएल मोजोद है. अपलोड फाएल का नया नाम "%1".', + 202 : 'इन्वेलीड फाएल.', + 203 : 'इन्वेलीड फाएल. फाएल बहुत बड़ी है.', + 204 : 'अपलोडकी गयी फाएल करप्ट हो गयी है.', + 205 : 'फाएल अपलोड करनेके लिये, सर्वरपे टेम्पररी फोल्डर उपलब्थ नही है..', + 206 : 'सिक्योरिटी कारण वष, फाएल अपलोड केन्सल किया है. फाएलमें HTML-जैसे डेटा है.', + 207 : 'अपलोडेड फाएल का नया नाम "%1".', + 300 : 'फाएल मूव नहीं कर सके.', + 301 : 'फाएल कोपी नहीं कर सके.', + 500 : 'सिक्योरिटी कारण वष, फाएल ब्राउजर डिसेबल किया गया है. आपके सिस्टम एडमिनिस्ट्रेटर का सम्पर्क करे और CKFinder कोंफिग्युरेसन फाएल तपासे.', + 501 : 'थम्बनेल सपोर्ट डिसेबल किया है.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'फाएलका नाम खाली नही हो सकता.', + FileExists : 'फाएल %s मोजूद है.', + FolderEmpty : 'फोल्डरका नाम खाली नही हो सकता.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'फाएलके नाममें यह केरेक्टर नही हो सकते: \n\\ / : * ? " < > |', + FolderInvChar : 'फोल्डरके नाममें यह केरेक्टर नही हो सकते: \n\\ / : * ? " < > |', + + PopupBlockView : 'यह फाएलको नई विंडोमें नही खोल सकते. आपके ब्राउसरको कोफिग करके सब पोप-अप ब्लोक्र्रको बंध करे.', + XmlError : 'वेब सर्वरसे XML रिस्पोंस नही लोड कर सके.', + XmlEmpty : 'वेब सर्वरसे XML रिस्पोंस नही लोड कर सके. सर्वरने खाली रिस्पोंस भेजा.', + XmlRawResponse : 'सर्वरका रो रिस्पोंस: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'रिसाइज़ %s', + sizeTooBig : 'इमेजकी ओरिजिनल साएजसे बड़ा या छोटा नही कर सके (%size).', + resizeSuccess : 'इमेजको रीसाईज की गई है.', + thumbnailNew : 'नया थम्बनेल बनाये', + thumbnailSmall : 'छोटा (%s)', + thumbnailMedium : 'मध्यम (%s)', + thumbnailLarge : 'बड़ा (%s)', + newSize : 'नई साईज पसंद करे', + width : 'चोदाई', + height : 'ऊंचाई', + invalidHeight : 'इन्वेलीड ऊँचाई.', + invalidWidth : 'इन्वेलीड चोड़ाई.', + invalidName : 'इन्वेलीड फाएलका नाम.', + newImage : 'नई इमेज बनाये', + noExtensionChange : 'फाएल एकस्टेनसन नही बदल सकते.', + imageSmall : 'सोर्स इमेज बहुत छोटा है.', + contextMenuName : 'रीसाईज', + lockRatio : 'लोक रेटिओ', + resetSize : 'रीसेट साईज' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'सेव', + fileOpenError : 'फाएल नहीं खोल सके.', + fileSaveSuccess : 'फाएल सेव हो गई है.', + contextMenuName : 'एडिट', + loadingFile : 'लोडिग फाएल, राह देखे...' + }, + + Maximize : + { + maximize : 'मैक्सीमईज', + minimize : 'मिनीमाईज' + }, + + Gallery : + { + current : 'इमेज {current} कुल्मिलाके {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'खोज' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/hr.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/hr.js new file mode 100644 index 0000000..f96ef7f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/hr.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Croatian + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['hr'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, nedostupno', + confirmCancel : 'Neke od opcija su promjenjene. Sigurno želite zatvoriti prozor??', + ok : 'U redu', + cancel : 'Poništi', + confirmationTitle : 'Potvrda', + messageTitle : 'Informacija', + inputTitle : 'Pitanje', + undo : 'Poništi', + redo : 'Preuredi', + skip : 'Preskoči', + skipAll : 'Preskoči sve', + makeDecision : 'Što bi trebali napraviti?', + rememberDecision: 'Zapamti moj izbor' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'hr', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'm/d/yyyy h:MM aa', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Direktoriji', + FolderLoading : 'Učitavam...', + FolderNew : 'Unesite novo ime direktorija: ', + FolderRename : 'Unesite novo ime direktorija: ', + FolderDelete : 'Sigurno želite obrisati direktorij "%1"?', + FolderRenaming : ' (Mijenjam ime...)', + FolderDeleting : ' (Brišem...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Unesite novo ime datoteke: ', + FileRenameExt : 'Sigurno želite promijeniti vrstu datoteke? Datoteka može postati neiskoristiva.', + FileRenaming : 'Mijenjam ime...', + FileDelete : 'Sigurno želite obrisati datoteku "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Učitavam...', + FilesEmpty : 'Direktorij je prazan.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Košara', + BasketClear : 'Isprazni košaru', + BasketRemove : 'Ukloni iz košare', + BasketOpenFolder : 'Otvori nadređeni direktorij', + BasketTruncateConfirm : 'Sigurno želite obrisati sve datoteke iz košare?', + BasketRemoveConfirm : 'Sigurno želite obrisati datoteku "%1" iz košare?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Nema niti jedne datoteke, ubacite koju.', + BasketCopyFilesHere : 'Kopiraj datoteke iz košare', + BasketMoveFilesHere : 'Premjesti datoteke iz košare', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Pošalji', + UploadTip : 'Pošalji nove datoteke na server', + Refresh : 'Osvježi', + Settings : 'Postavke', + Help : 'Pomoć', + HelpTip : 'Pomoć', + + // Context Menus + Select : 'Odaberi', + SelectThumbnail : 'Odaberi manju sliku', + View : 'Pogledaj', + Download : 'Skini', + + NewSubFolder : 'Novi poddirektorij', + Rename : 'Promijeni naziv', + Delete : 'Obriši', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Kopiraj ovdje', + MoveDragDrop : 'Premjesti ovdje', + + // Dialogs + RenameDlgTitle : 'Promijeni naziv', + NewNameDlgTitle : 'Novi naziv', + FileExistsDlgTitle : 'Datoteka već postoji', + SysErrorDlgTitle : 'Greška sustava', + + FileOverwrite : 'Prepiši', + FileAutorename : 'Automatska promjena naziva', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'U redu', + CancelBtn : 'Poništi', + CloseBtn : 'Zatvori', + + // Upload Panel + UploadTitle : 'Pošalji novu datoteku', + UploadSelectLbl : 'Odaberi datoteku za slanje', + UploadProgressLbl : '(Slanje u tijeku, molimo pričekajte...)', + UploadBtn : 'Pošalji odabranu datoteku', + UploadBtnCancel : 'Poništi', + + UploadNoFileMsg : 'Odaberite datoteku na Vašem računalu.', + UploadNoFolder : 'Odaberite direktorije prije slanja.', + UploadNoPerms : 'Slanje datoteka nije dozvoljeno.', + UploadUnknError : 'Greška kod slanja datoteke.', + UploadExtIncorrect : 'Vrsta datoteka nije dozvoljena.', + + // Flash Uploads + UploadLabel : 'Datoteka za slanje:', + UploadTotalFiles : 'Ukupno datoteka:', + UploadTotalSize : 'Ukupna veličina:', + UploadSend : 'Pošalji', + UploadAddFiles : 'Dodaj datoteke', + UploadClearFiles : 'Izbaci datoteke', + UploadCancel : 'Poništi slanje', + UploadRemove : 'Ukloni', + UploadRemoveTip : 'Ukloni !f', + UploadUploaded : 'Poslano !n%', + UploadProcessing : 'Obrađujem...', + + // Settings Panel + SetTitle : 'Postavke', + SetView : 'Pregled:', + SetViewThumb : 'Mala slika', + SetViewList : 'Lista', + SetDisplay : 'Prikaz:', + SetDisplayName : 'Naziv datoteke', + SetDisplayDate : 'Datum', + SetDisplaySize : 'Veličina datoteke', + SetSort : 'Sortiranje:', + SetSortName : 'po nazivu', + SetSortDate : 'po datumu', + SetSortSize : 'po veličini', + SetSortExtension : 'po vrsti datoteke', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 datoteka', + FilesCountMany : '%1 datoteka', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Nije moguće završiti zahtjev. (Greška %1)', + Errors : + { + 10 : 'Nepoznata naredba.', + 11 : 'Nije navedena vrsta u zahtjevu.', + 12 : 'Zatražena vrsta nije važeća.', + 102 : 'Neispravno naziv datoteke ili direktoija.', + 103 : 'Nije moguće izvršiti zahtjev zbog ograničenja pristupa.', + 104 : 'Nije moguće izvršiti zahtjev zbog ograničenja postavka sustava.', + 105 : 'Nedozvoljena vrsta datoteke.', + 109 : 'Nedozvoljen zahtjev.', + 110 : 'Nepoznata greška.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Datoteka ili direktorij s istim nazivom već postoji.', + 116 : 'Direktorij nije pronađen. Osvježite stranicu i pokušajte ponovo.', + 117 : 'Datoteka nije pronađena. Osvježite listu datoteka i pokušajte ponovo.', + 118 : 'Putanje izvora i odredišta su jednake.', + 201 : 'Datoteka s istim nazivom već postoji. Poslana datoteka je promjenjena u "%1".', + 202 : 'Neispravna datoteka.', + 203 : 'Neispravna datoteka. Veličina datoteke je prevelika.', + 204 : 'Poslana datoteka je neispravna.', + 205 : 'Ne postoji privremeni direktorij za slanje na server.', + 206 : 'Slanje je poništeno zbog sigurnosnih postavki. Naziv datoteke sadrži HTML podatke.', + 207 : 'Poslana datoteka je promjenjena u "%1".', + 300 : 'Premještanje datoteke(a) nije uspjelo.', + 301 : 'Kopiranje datoteke(a) nije uspjelo.', + 500 : 'Pretraživanje datoteka nije dozvoljeno iz sigurnosnih razloga. Molimo kontaktirajte administratora sustava kako bi provjerili postavke CKFinder konfiguracijske datoteke.', + 501 : 'The thumbnails support is disabled.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Naziv datoteke ne može biti prazan.', + FileExists : 'Datoteka %s već postoji.', + FolderEmpty : 'Naziv direktorija ne može biti prazan.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Naziv datoteke ne smije sadržavati niti jedan od sljedećih znakova: \n\\ / : * ? " < > |', + FolderInvChar : 'Naziv direktorija ne smije sadržavati niti jedan od sljedećih znakova: \n\\ / : * ? " < > |', + + PopupBlockView : 'Nije moguće otvoriti datoteku u novom prozoru. Promijenite postavke svog Internet preglednika i isključite sve popup blokere za ove web stranice.', + XmlError : 'Nije moguće učitati XML odgovor od web servera.', + XmlEmpty : 'Nije moguće učitati XML odgovor od web servera. Server je vratio prazan odgovor.', + XmlRawResponse : 'Odgovor servera: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Promijeni veličinu %s', + sizeTooBig : 'Nije moguće postaviti veličinu veću od originala (%size).', + resizeSuccess : 'Slika je uspješno promijenjena.', + thumbnailNew : 'Napravi malu sliku', + thumbnailSmall : 'Mala (%s)', + thumbnailMedium : 'Srednja (%s)', + thumbnailLarge : 'Velika (%s)', + newSize : 'Postavi novu veličinu', + width : 'Širina', + height : 'Visina', + invalidHeight : 'Neispravna visina.', + invalidWidth : 'Neispravna širina.', + invalidName : 'Neispravan naziv datoteke.', + newImage : 'Napravi novu sliku', + noExtensionChange : 'Vrsta datoteke se ne smije mijenjati.', + imageSmall : 'Izvorna slika je premala.', + contextMenuName : 'Promijeni veličinu', + lockRatio : 'Zaključaj odnose', + resetSize : 'Vrati veličinu' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Snimi', + fileOpenError : 'Nije moguće otvoriti datoteku.', + fileSaveSuccess : 'Datoteka je uspješno snimljena.', + contextMenuName : 'Promjeni', + loadingFile : 'Učitavam, molimo pričekajte...' + }, + + Maximize : + { + maximize : 'Povećaj', + minimize : 'Smanji' + }, + + Gallery : + { + current : 'Slika {current} od {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Traži' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/hu.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/hu.js new file mode 100644 index 0000000..fd1855e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/hu.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Hungarian + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['hu'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, nem elérhető', + confirmCancel : 'Az űrlap tartalma megváltozott, ám a változásokat nem rögzítette. Biztosan be szeretné zárni az űrlapot?', + ok : 'Rendben', + cancel : 'Mégsem', + confirmationTitle : 'Megerősítés', + messageTitle : 'Információ', + inputTitle : 'Kérdés', + undo : 'Visszavonás', + redo : 'Ismétlés', + skip : 'Kihagy', + skipAll : 'Mindet kihagy', + makeDecision : 'Mi történjen a fájllal?', + rememberDecision: 'Jegyezze meg a választásomat' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'hu', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'yyyy.mm.dd. HH:MM', + DateAmPm : ['de.', 'du.'], + + // Folders + FoldersTitle : 'Mappák', + FolderLoading : 'Betöltés...', + FolderNew : 'Kérem adja meg a mappa nevét: ', + FolderRename : 'Kérem adja meg a mappa új nevét: ', + FolderDelete : 'Biztosan törölni szeretné a következő mappát: "%1"?', + FolderRenaming : ' (átnevezés...)', + FolderDeleting : ' (törlés...)', + DestinationFolder : 'Cél mappa', + + // Files + FileRename : 'Kérem adja meg a fájl új nevét: ', + FileRenameExt : 'Biztosan szeretné módosítani a fájl kiterjesztését? A fájl esetleg használhatatlan lesz.', + FileRenaming : 'Átnevezés...', + FileDelete : 'Biztosan törli a következő fájlt: "%1"?', + FilesDelete : 'Biztosan törli a kijelölt %1 fájlt?', + FilesLoading : 'Betöltés...', + FilesEmpty : 'A mappa üres.', + DestinationFile : 'Cél fájl', + SkippedFiles : 'A kihagyott fájlok listája:', + + // Basket + BasketFolder : 'Kosár', + BasketClear : 'Kosár ürítése', + BasketRemove : 'Törlés a kosárból', + BasketOpenFolder : 'A fájlt tartalmazó mappa megnyitása', + BasketTruncateConfirm : 'Biztosan szeretne minden fájlt törölni a kosárból?', + BasketRemoveConfirm : 'Biztosan törölni szeretné a(z) "%1" nevű fájlt a kosárból?', + BasketRemoveConfirmMultiple : 'Biztosan törölni szeretné a kijelült %1 fájlt a kosárból?', + BasketEmpty : 'Nincsenek fájlok a kosárban.', + BasketCopyFilesHere : 'Fájlok másolása a kosárból', + BasketMoveFilesHere : 'Fájlok áthelyezése a kosárból', + + // Global messages + OperationCompletedSuccess : 'A művelet sikeresen befejeződött.', + OperationCompletedErrors : 'A művelet közben hiba történt.', + FileError : '%s: %e', + + // Move and Copy files + MovedFilesNumber : 'Az áthelyezett fájlok száma: %s.', + CopiedFilesNumber : 'A másolt fájlok száma: %s.', + MoveFailedList : 'A következő fájlok nem helyezhetőek át:
      %s', + CopyFailedList : 'A következő fájlok nem másolhatóak:
      %s', + + // Toolbar Buttons (some used elsewhere) + Upload : 'Feltöltés', + UploadTip : 'Új fájl feltöltése', + Refresh : 'Frissítés', + Settings : 'Beállítások', + Help : 'Súgó', + HelpTip : 'Súgó (angolul)', + + // Context Menus + Select : 'Kiválaszt', + SelectThumbnail : 'Bélyegkép kiválasztása', + View : 'Megtekintés', + Download : 'Letöltés', + + NewSubFolder : 'Új almappa', + Rename : 'Átnevezés', + Delete : 'Törlés', + DeleteFiles : 'Fájlok törlése', + + CopyDragDrop : 'Másolás ide', + MoveDragDrop : 'Áthelyezés ide', + + // Dialogs + RenameDlgTitle : 'Átnevezés', + NewNameDlgTitle : 'Új név', + FileExistsDlgTitle : 'A fájl már létezik', + SysErrorDlgTitle : 'Rendszerhiba', + + FileOverwrite : 'Felülír', + FileAutorename : 'Automatikus átnevezés', + ManuallyRename : 'Átnevezés', + + // Generic + OkBtn : 'OK', + CancelBtn : 'Mégsem', + CloseBtn : 'Bezárás', + + // Upload Panel + UploadTitle : 'Új fájl feltöltése', + UploadSelectLbl : 'Válassza ki a feltölteni kívánt fájlt', + UploadProgressLbl : '(A feltöltés folyamatban, kérem várjon...)', + UploadBtn : 'A kiválasztott fájl feltöltése', + UploadBtnCancel : 'Mégsem', + + UploadNoFileMsg : 'Kérem válassza ki a fájlt a számítógépéről.', + UploadNoFolder : 'A feltöltés előtt válasszon mappát.', + UploadNoPerms : 'A fájlok feltöltése nem engedélyezett.', + UploadUnknError : 'Hiba a fájl feltöltése közben.', + UploadExtIncorrect : 'A fájl kiterjesztése nem engedélyezett ebben a mappában.', + + // Flash Uploads + UploadLabel : 'Feltöltendő fájlok', + UploadTotalFiles : 'Összes fájl:', + UploadTotalSize : 'Összméret:', + UploadSend : 'Feltöltés', + UploadAddFiles : 'Fájl hozzáadása', + UploadClearFiles : 'Feltöltési lista törlése', + UploadCancel : 'Feltöltés megszakítása', + UploadRemove : 'Eltávolít', + UploadRemoveTip : 'Fájl eltávolítása a listáról: !f', + UploadUploaded : 'Feltöltve !n%', + UploadProcessing : 'Feldolgozás...', + + // Settings Panel + SetTitle : 'Beállítások', + SetView : 'Nézet:', + SetViewThumb : 'bélyegképes', + SetViewList : 'listás', + SetDisplay : 'Megjelenik:', + SetDisplayName : 'fájl neve', + SetDisplayDate : 'dátum', + SetDisplaySize : 'fájlméret', + SetSort : 'Rendezés:', + SetSortName : 'fájlnév', + SetSortDate : 'dátum', + SetSortSize : 'méret', + SetSortExtension : 'kiterjesztés', + + // Status Bar + FilesCountEmpty : '<üres mappa>', + FilesCountOne : '1 fájl', + FilesCountMany : '%1 fájl', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'A parancsot nem sikerült végrehajtani. (Hiba: %1)', + Errors : + { + 10 : 'Érvénytelen parancs.', + 11 : 'A fájl típusa nem lett a kérés során beállítva.', + 12 : 'A kívánt fájl típus érvénytelen.', + 102 : 'Érvénytelen fájl vagy könyvtárnév.', + 103 : 'Hitelesítési problémák miatt nem sikerült a kérést teljesíteni.', + 104 : 'Jogosultsági problémák miatt nem sikerült a kérést teljesíteni.', + 105 : 'Érvénytelen fájl kiterjesztés.', + 109 : 'Érvénytelen kérés.', + 110 : 'Ismeretlen hiba.', + 111 : 'A kérés nem teljesíthető a létrejövő fájl mérete miatt.', + 115 : 'A fálj vagy mappa már létezik ezen a néven.', + 116 : 'Mappa nem található. Kérem frissítsen és próbálja újra.', + 117 : 'Fájl nem található. Kérem frissítsen és próbálja újra.', + 118 : 'A forrás és a cél azonos.', + 201 : 'Ilyen nevű fájl már létezett. A feltöltött fájl a következőre lett átnevezve: "%1".', + 202 : 'Érvénytelen fájl.', + 203 : 'Érvénytelen fájl. A fájl mérete túl nagy.', + 204 : 'A feltöltött fájl hibás.', + 205 : 'A szerveren nem található a feltöltéshez ideiglenes mappa.', + 206 : 'A fájl feltötése biztonsági okból megszakadt. A fájl HTML adatokat tartalmaz.', + 207 : 'El fichero subido ha sido renombrado como "%1".', + 300 : 'A fájl(ok) áthelyezése sikertelen.', + 301 : 'A fájl(ok) másolása sikertelen.', + 500 : 'A fájl-tallózó biztonsági okok miatt nincs engedélyezve. Kérem vegye fel a kapcsolatot a rendszer üzemeltetőjével és ellenőrizze a CKFinder konfigurációs fájlt.', + 501 : 'A bélyegkép támogatás nincs engedélyezve.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'A fájl neve nem lehet üres.', + FileExists : 'A(z) %s fájl már létezik.', + FolderEmpty : 'A mappa neve nem lehet üres.', + FolderExists : 'A(z) %s mappa már létezik.', + FolderNameExists : 'A mappa létezik.', + + FileInvChar : 'A fájl neve nem tartalmazhatja a következő karaktereket: \n\\ / : * ? " < > |', + FolderInvChar : 'A mappa neve nem tartalmazhatja a következő karaktereket: \n\\ / : * ? " < > |', + + PopupBlockView : 'A felugró ablak megnyitása nem sikerült. Kérem ellenőrizze a böngészője beállításait és tiltsa le a felugró ablakokat blokkoló alkalmazásait erre a honlapra.', + XmlError : 'A webszervertől érkező XML válasz nem dolgozható fel megfelelően.', + XmlEmpty : 'A webszervertől érkező XML válasz nem dolgozható fel. A szerver üres választ küldött.', + XmlRawResponse : 'A szerver az alábbi választ adta: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Kép átméretezése: %s', + sizeTooBig : 'Nem adható meg az eredeti fájlnál nagyobb méret (%size).', + resizeSuccess : 'A kép sikeresen átméretezve.', + thumbnailNew : 'Új bélyegkép létrehozása', + thumbnailSmall : 'Kicsi (%s)', + thumbnailMedium : 'Közepes (%s)', + thumbnailLarge : 'Nagy (%s)', + newSize : 'Adja meg az új méretet', + width : 'Szélesség', + height : 'Magasság', + invalidHeight : 'Érvénytelen magasság.', + invalidWidth : 'Érvénytelen szélesség.', + invalidName : 'Érvénytelen fájlnév.', + newImage : 'Létrehozás új fotóként', + noExtensionChange : 'A fájl kiterjesztése nem változtatható.', + imageSmall : 'Az eredeti fotó mérete túl kicsi.', + contextMenuName : 'Átméretezés', + lockRatio : 'Arány megtartása', + resetSize : 'Eredeti méret' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Mentés', + fileOpenError : 'A fájl nem nyitható meg.', + fileSaveSuccess : 'A fájl sikeresen mentve.', + contextMenuName : 'Szerkesztés', + loadingFile : 'Fájl betöltése, kérem várjon...' + }, + + Maximize : + { + maximize : 'Teljes méret', + minimize : 'Kis méret' + }, + + Gallery : + { + current : 'Fotó: {current} / {total}' + }, + + Zip : + { + extractHereLabel : 'Kicsomagolás ide', + extractToLabel : 'Kicsomagolás új mappába...', + downloadZipLabel : 'Letöltés zip fájlként', + compressZipLabel : 'Becsomagolás zip fájlba', + removeAndExtract : 'Létező törlése és kicsomagolás', + extractAndOverwrite : 'Létező felülírása és kicsomagolás', + extractSuccess : 'A fájl kicsomagolása megtörtént.' + }, + + Search : + { + searchPlaceholder : 'Keresés' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/it.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/it.js new file mode 100644 index 0000000..8e94513 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/it.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Italian + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['it'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, non disponibile', + confirmCancel : 'Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?', + ok : 'OK', + cancel : 'Annulla', + confirmationTitle : 'Confermare', + messageTitle : 'Informazione', + inputTitle : 'Domanda', + undo : 'Annulla', + redo : 'Ripristina', + skip : 'Ignora', + skipAll : 'Ignora tutti', + makeDecision : 'Che azione prendere?', + rememberDecision: 'Ricorda mia decisione' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'it', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Cartelle', + FolderLoading : 'Caricando...', + FolderNew : 'Nome della cartella: ', + FolderRename : 'Nuovo nome della cartella: ', + FolderDelete : 'Se sicuro di voler eliminare la cartella "%1"?', + FolderRenaming : ' (Rinominando...)', + FolderDeleting : ' (Eliminando...)', + DestinationFolder : 'Cartella di destinazione', + + // Files + FileRename : 'Nuovo nome del file: ', + FileRenameExt : 'Sei sicure di voler cambiare l\'estensione del file? Il file può risultare inutilizzabile.', + FileRenaming : 'Rinominando...', + FileDelete : 'Sei sicuro di voler eliminare il file "%1"?', + FilesDelete : 'Sei sicuro di voler eliminare %1 file?', + FilesLoading : 'Caricamento in corso...', + FilesEmpty : 'Cartella vuota', + DestinationFile : 'File di destinazione', + SkippedFiles : 'Elenco file trascurati:', + + // Basket + BasketFolder : 'Cestino', + BasketClear : 'Svuota cestino', + BasketRemove : 'Rimuove dal cestino', + BasketOpenFolder : 'Apri cartella superiore', + BasketTruncateConfirm : 'Sei sicuro di voler svuotare il cestino?', + BasketRemoveConfirm : 'Sei sicuro di voler rimuovere il file "%1" dal cestino?', + BasketRemoveConfirmMultiple : 'Sei sicuro di voler rimuovere %1 file dal cestino?', + BasketEmpty : 'Cestino vuoto, trascinare prima almeno un file.', + BasketCopyFilesHere : 'Copia i file dal cestino', + BasketMoveFilesHere : 'Muovi i file dal cestino', + + // Global messages + OperationCompletedSuccess : 'Operazione completata con successo.', + OperationCompletedErrors : 'Operazione completata con errori.', + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Numero di file spostati: %s.', + CopiedFilesNumber : 'Numero di file copiati: %s.', + MoveFailedList : 'I seguenti file non hanno potuto essere spostati:
      %s', + CopyFailedList : 'I seguenti file non hanno potuto essere copiati:
      %s', + + // Toolbar Buttons (some used elsewhere) + Upload : 'Upload', + UploadTip : 'Carica Nuovo File', + Refresh : 'Aggiorna', + Settings : 'Configurazioni', + Help : 'Aiuto', + HelpTip : 'Aiuto (Inglese)', + + // Context Menus + Select : 'Seleziona', + SelectThumbnail : 'Seleziona la miniatura', + View : 'Vedi', + Download : 'Scarica', + + NewSubFolder : 'Nuova Sottocartella', + Rename : 'Rinomina', + Delete : 'Elimina', + DeleteFiles : 'Elimina i file', + + CopyDragDrop : 'Copia qui', + MoveDragDrop : 'Sposta qui', + + // Dialogs + RenameDlgTitle : 'Rinomina', + NewNameDlgTitle : 'Nuovo nome', + FileExistsDlgTitle : 'File già esistente', + SysErrorDlgTitle : 'Errore di Sistema', + + FileOverwrite : 'Sovrascrivi', + FileAutorename : 'Rinomina automaticamente', + ManuallyRename : 'Rinomina manualmente', + + // Generic + OkBtn : 'OK', + CancelBtn : 'Annulla', + CloseBtn : 'Chiudi', + + // Upload Panel + UploadTitle : 'Carica Nuovo File', + UploadSelectLbl : 'Seleziona il file', + UploadProgressLbl : '(Caricamento in corso, attendere prego...)', + UploadBtn : 'Carica File', + UploadBtnCancel : 'Annulla', + + UploadNoFileMsg : 'Seleziona il file da caricare', + UploadNoFolder : 'Seleziona la cartella prima di caricare.', + UploadNoPerms : 'Non è permesso il caricamento di file.', + UploadUnknError : 'Errore nel caricamento del file.', + UploadExtIncorrect : 'In questa cartella non sono permessi file con questa estensione.', + + // Flash Uploads + UploadLabel : 'File da caricare', + UploadTotalFiles : 'File:', + UploadTotalSize : 'Dimensione:', + UploadSend : 'Upload', + UploadAddFiles : 'Aggiungi file', + UploadClearFiles : 'Elimina file', + UploadCancel : 'Annulla il caricamento', + UploadRemove : 'Rimuovi', + UploadRemoveTip : 'Rimuove !f', + UploadUploaded : '!n% caricato', + UploadProcessing : 'Attendere...', + + // Settings Panel + SetTitle : 'Configurazioni', + SetView : 'Vedi:', + SetViewThumb : 'Anteprima', + SetViewList : 'Lista', + SetDisplay : 'Informazioni:', + SetDisplayName : 'Nome del file', + SetDisplayDate : 'Data', + SetDisplaySize : 'Dimensione', + SetSort : 'Ordina:', + SetSortName : 'per Nome', + SetSortDate : 'per Data', + SetSortSize : 'per Dimensione', + SetSortExtension : 'per Estensione', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 file', + FilesCountMany : '%1 file', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Impossibile completare la richiesta. (Errore %1)', + Errors : + { + 10 : 'Comando non valido.', + 11 : 'Il tipo di risorsa non è stato specificato nella richiesta.', + 12 : 'Il tipo di risorsa richiesto non è valido.', + 102 : 'Nome di file o cartella non valido.', + 103 : 'Non è stato possibile completare la richiesta a causa di restrizioni di autorizzazione.', + 104 : 'Non è stato possibile completare la richiesta a causa di restrizioni nei permessi del file system.', + 105 : 'L\'estensione del file non è valida.', + 109 : 'Richiesta non valida.', + 110 : 'Errore sconosciuto.', + 111 : 'È stato impossibile completare la richiesta a causa della dimensione finale del file.', + 115 : 'Un file o cartella con lo stesso nome è già esistente.', + 116 : 'Cartella non trovata. Aggiornare e riprovare.', + 117 : 'File non trovato. Aggiornare la lista dei file e riprovare.', + 118 : 'I percorsi di origine e di destinazione sono uguali.', + 201 : 'Un file con lo stesso nome è già presente. Il file caricato è stato rinominato in "%1".', + 202 : 'File invalido.', + 203 : 'File invalido. La dimensione del file eccede i limiti del sistema.', + 204 : 'Il file caricato è corrotto.', + 205 : 'Directory temporanea non disponibile sul server.', + 206 : 'Caricamento annullato per motivi di sicurezza. Il file contiene dati in formato HTML.', + 207 : 'Il file caricato è stato rinominato in "%1".', + 300 : 'Non è stato possibile muovere i file.', + 301 : 'Non è stato possibile copiare i file.', + 500 : 'Questo programma è disabilitato per motivi di sicurezza. Contattare l\'amministratore del sistema e verificare le configurazioni di CKFinder.', + 501 : 'Il supporto alle anteprime non è attivo.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Il nome del file non può essere vuoto.', + FileExists : 'File %s già esistente.', + FolderEmpty : 'Il nome della cartella non può essere vuoto.', + FolderExists : 'Cartella %s già esistente.', + FolderNameExists : 'Cartella già esistente.', + + FileInvChar : 'I seguenti caratteri non possono essere usati per comporre il nome del file: \n\\ / : * ? " < > |', + FolderInvChar : 'I seguenti caratteri non possono essere usati per comporre il nome della cartella: \n\\ / : * ? " < > |', + + PopupBlockView : 'Non è stato possile aprire il file in una nuova finestra. Configurare il browser e disabilitare il blocco delle popup.', + XmlError : 'Non è stato possibile caricare la risposta XML dal server.', + XmlEmpty : 'Non è stato possibile caricare la risposta XML dal server. La risposta è vuota.', + XmlRawResponse : 'Risposta originale inviata dal server: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Ridimensiona %s', + sizeTooBig : 'Non è possibile usare valori di altezza e larghezza maggiori delle dimensioni originali (%size).', + resizeSuccess : 'Immagine ridimensionata.', + thumbnailNew : 'Crea una nuova thumbnail', + thumbnailSmall : 'Piccolo (%s)', + thumbnailMedium : 'Medio (%s)', + thumbnailLarge : 'Grande (%s)', + newSize : 'Nuove dimensioni', + width : 'Larghezza', + height : 'Altezza', + invalidHeight : 'Altezza non valida.', + invalidWidth : 'Larghezza non valida.', + invalidName : 'Nome del file non valido.', + newImage : 'Crea nuova immagine', + noExtensionChange : 'L\'estensione del file non può essere cambiata.', + imageSmall : 'L\'immagine originale è molto piccola.', + contextMenuName : 'Ridimensiona', + lockRatio : 'Blocca rapporto', + resetSize : 'Reimposta dimensione' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Salva', + fileOpenError : 'Non è stato possibile aprire il file.', + fileSaveSuccess : 'File salvato.', + contextMenuName : 'Modifica', + loadingFile : 'Attendere prego. Caricamento del file in corso...' + }, + + Maximize : + { + maximize : 'Massimizza', + minimize : 'Minimizza' + }, + + Gallery : + { + current : 'Immagine {current} di {total}' + }, + + Zip : + { + extractHereLabel : 'Estrai qui', + extractToLabel : 'Estrai come...', + downloadZipLabel : 'Scarica come zip', + compressZipLabel : 'Compremi in zip', + removeAndExtract : 'Rimuovi esistente ed estrai', + extractAndOverwrite : 'Estrai sovrascrivendo file esistenti', + extractSuccess : 'File estratto con successo.' + }, + + Search : + { + searchPlaceholder : 'Ricerca' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ja.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ja.js new file mode 100644 index 0000000..9f9c177 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ja.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Japanese + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['ja'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, は利用できません。', + confirmCancel : '変更された項目があります。ウィンドウを閉じてもいいですか?', + ok : 'OK', + cancel : 'キャンセル', + confirmationTitle : '確認', + messageTitle : 'インフォメーション', + inputTitle : '質問', + undo : '元に戻す', + redo : 'やり直す', + skip : 'スキップ', + skipAll : 'すべてスキップ', + makeDecision : 'どうしますか?', + rememberDecision: '全てに適用する' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'ja', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'm/d/yyyy h:MM aa', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'フォルダ', + FolderLoading : '読み込み中...', + FolderNew : '新しいフォルダ名を入力してください: ', + FolderRename : '新しいフォルダ名を入力してください: ', + FolderDelete : '本当にフォルダ「"%1"」を削除してもよろしいですか?', + FolderRenaming : ' (リネーム中...)', + FolderDeleting : ' (削除中...)', + DestinationFolder : '適用するフォルダ', + + // Files + FileRename : '新しいファイル名を入力してください: ', + FileRenameExt : 'ファイルが使えなくなる可能性がありますが、本当に拡張子を変更してもよろしいですか?', + FileRenaming : 'リネーム中...', + FileDelete : '本当に「"%1"」を削除してもよろしいですか?', + FilesDelete : 'これらの %1 つのファイルを削除してもよろしいですか? ', + FilesLoading : '読み込み中...', + FilesEmpty : 'ファイルがありません', + DestinationFile : '適用するファイル', + SkippedFiles : 'スキップしたファイルのリスト:', + + // Basket + BasketFolder : 'Basket', + BasketClear : 'バスケットを空にする', + BasketRemove : 'バスケットから削除', + BasketOpenFolder : '親フォルダを開く', + BasketTruncateConfirm : '本当にバスケットの中身を空にしますか?', + BasketRemoveConfirm : '本当に「"%1"」をバスケットから削除しますか?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'バスケットの中にファイルがありません。このエリアにドラッグ&ドロップして追加することができます。', + BasketCopyFilesHere : 'バスケットからファイルをコピー', + BasketMoveFilesHere : 'バスケットからファイルを移動', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'アップロード', + UploadTip : '新しいファイルのアップロード', + Refresh : '表示の更新', + Settings : 'カスタマイズ', + Help : 'ヘルプ', + HelpTip : 'ヘルプ', + + // Context Menus + Select : 'この画像を選択', + SelectThumbnail : 'この画像のサムネイルを選択', + View : '画像だけを表示', + Download : 'ダウンロード', + + NewSubFolder : '新しいフォルダに入れる', + Rename : 'ファイル名の変更', + Delete : '削除', + DeleteFiles : 'ファイルを削除する', + + CopyDragDrop : 'コピーするファイルをここにドロップしてください', + MoveDragDrop : '移動するファイルをここにドロップしてください', + + // Dialogs + RenameDlgTitle : 'リネーム', + NewNameDlgTitle : '新しい名前', + FileExistsDlgTitle : 'ファイルはすでに存在します。', + SysErrorDlgTitle : 'システムエラー', + + FileOverwrite : '上書き', + FileAutorename : '自動でリネーム', + ManuallyRename : '手動でリネーム', + + // Generic + OkBtn : 'OK', + CancelBtn : 'キャンセル', + CloseBtn : '閉じる', + + // Upload Panel + UploadTitle : 'ファイルのアップロード', + UploadSelectLbl : 'アップロードするファイルを選択してください', + UploadProgressLbl : '(ファイルのアップロード中...)', + UploadBtn : 'アップロード', + UploadBtnCancel : 'キャンセル', + + UploadNoFileMsg : 'ファイルを選んでください。', + UploadNoFolder : 'アップロードの前にフォルダを選択してください。', + UploadNoPerms : 'ファイルのアップロード権限がありません。', + UploadUnknError : 'ファイルの送信に失敗しました。', + UploadExtIncorrect : '選択されたファイルの拡張子は許可されていません。', + + // Flash Uploads + UploadLabel : 'アップロード', + UploadTotalFiles : 'アップロードしたファイル数:', + UploadTotalSize : 'ファイルサイズ:', + UploadSend : 'アップロード', + UploadAddFiles : 'ファイルを追加', + UploadClearFiles : 'クリア', + UploadCancel : 'キャンセル', + UploadRemove : '削除', + UploadRemoveTip : '!fを削除しました', + UploadUploaded : '!n%をアップロードしました', + UploadProcessing : 'アップロード中...', + + // Settings Panel + SetTitle : '表示のカスタマイズ', + SetView : '表示方法:', + SetViewThumb : 'サムネイル', + SetViewList : '表示形式', + SetDisplay : '表示する項目:', + SetDisplayName : 'ファイル名', + SetDisplayDate : '日時', + SetDisplaySize : 'ファイルサイズ', + SetSort : '表示の順番:', + SetSortName : 'ファイル名', + SetSortDate : '日付', + SetSortSize : 'サイズ', + SetSortExtension : '拡張子', + + // Status Bar + FilesCountEmpty : '<フォルダ内にファイルがありません>', + FilesCountOne : '1つのファイル', + FilesCountMany : '%1個のファイル', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', // MISSING + Gb : '%1 GB', // MISSING + SizePerSecond : '%1/s', // MISSING + + // Connector Error Messages. + ErrorUnknown : 'リクエストの処理に失敗しました。 (Error %1)', + Errors : + { + 10 : '不正なコマンドです。', + 11 : 'リソースタイプが特定できませんでした。', + 12 : '要求されたリソースのタイプが正しくありません。', + 102 : 'ファイル名/フォルダ名が正しくありません。', + 103 : 'リクエストを完了できませんでした。認証エラーです。', + 104 : 'リクエストを完了できませんでした。ファイルのパーミッションが許可されていません。', + 105 : '拡張子が正しくありません。', + 109 : '不正なリクエストです。', + 110 : '不明なエラーが発生しました。', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : '同じ名前のファイル/フォルダがすでに存在しています。', + 116 : 'フォルダが見つかりませんでした。ページを更新して再度お試し下さい。', + 117 : 'ファイルが見つかりませんでした。ページを更新して再度お試し下さい。', + 118 : '対象が移動元と同じ場所を指定されています。', + 201 : '同じ名前のファイルがすでに存在しています。"%1" にリネームして保存されました。', + 202 : '不正なファイルです。', + 203 : 'ファイルのサイズが大きすぎます。', + 204 : 'アップロードされたファイルは壊れています。', + 205 : 'サーバ内の一時作業フォルダが利用できません。', + 206 : 'セキュリティ上の理由からアップロードが取り消されました。このファイルにはHTMLに似たデータが含まれています。', + 207 : 'ファイルは "%1" にリネームして保存されました。', + 300 : 'ファイルの移動に失敗しました。', + 301 : 'ファイルのコピーに失敗しました。', + 500 : 'ファイルブラウザはセキュリティ上の制限から無効になっています。システム担当者に連絡をして、CKFinderの設定をご確認下さい。', + 501 : 'サムネイル機能は無効になっています。' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'ファイル名を入力してください', + FileExists : ' %s はすでに存在しています。別の名前を入力してください。', + FolderEmpty : 'フォルダ名を入力してください。', + FolderExists : 'フォルダ %s は既に存在しています。', + FolderNameExists : 'フォルダは既に存在しています。', + + FileInvChar : 'ファイルに以下の文字は使えません: \n\\ / : * ? " < > |', + FolderInvChar : 'フォルダに以下の文字は使えません: \n\\ / : * ? " < > |', + + PopupBlockView : 'ファイルを新しいウィンドウで開くことに失敗しました。 お使いのブラウザの設定でポップアップをブロックする設定を解除してください。', + XmlError : 'It was not possible to properly load the XML response from the web server.', // MISSING + XmlEmpty : 'It was not possible to load the XML response from the web server. The server returned an empty response.', // MISSING + XmlRawResponse : 'Raw response from the server: %s' // MISSING + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'リサイズ: %s', + sizeTooBig : 'オリジナルの画像よりも大きいサイズは指定できません。 (%size).', + resizeSuccess : '画像のリサイズに成功しました', + thumbnailNew : 'サムネイルをつくる', + thumbnailSmall : '小 (%s)', + thumbnailMedium : '中 (%s)', + thumbnailLarge : '大 (%s)', + newSize : 'Set new size', + width : '幅', + height : '高さ', + invalidHeight : '高さの値が不正です。', + invalidWidth : '幅の値が不正です。', + invalidName : 'ファイル名が不正です。', + newImage : '新しい画像を作成', + noExtensionChange : '拡張子は変更できません。', + imageSmall : '元画像が小さすぎます。', + contextMenuName : 'リサイズ', + lockRatio : 'ロック比率', + resetSize : 'サイズリセット' + }, + + // Fileeditor plugin + Fileeditor : + { + save : '保存', + fileOpenError : 'ファイルを開けませんでした。', + fileSaveSuccess : 'ファイルの保存が完了しました。', + contextMenuName : '編集', + loadingFile : 'ファイルの読み込み中...' + }, + + Maximize : + { + maximize : '最大化', + minimize : '最小化' + }, + + Gallery : + { + current : 'Image {current} of {total}' // MISSING + }, + + Zip : + { + extractHereLabel : 'ここに解凍する', + extractToLabel : 'フォルダを指定して解凍する', + downloadZipLabel : 'zipファイルでダウンロード', + compressZipLabel : 'zipファイルにする', + removeAndExtract : '既存のファイルを削除して解凍しました。', + extractAndOverwrite : '解凍して既存のファイルに上書きしました。', + extractSuccess : '解凍が完了しました。' + }, + + Search : + { + searchPlaceholder : '検索' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/lt.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/lt.js new file mode 100644 index 0000000..7dbed05 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/lt.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Lithuanian + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['lt'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, nėra', + confirmCancel : 'Kai kurie nustatymai buvo pakeisti. Ar tikrai norite uždaryti šį langą?', + ok : 'Gerai', + cancel : 'Atšaukti', + confirmationTitle : 'Patvirtinimas', + messageTitle : 'Informacija', + inputTitle : 'Klausimas', + undo : 'Veiksmas atgal', + redo : 'Veiksmas pirmyn', + skip : 'Praleisti', + skipAll : 'Praleisti viską', + makeDecision : 'Ką pasirinksite?', + rememberDecision: 'Atsiminti mano pasirinkimą' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'lt', + LangCode : 'lt', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'yyyy.mm.dd H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Segtuvai', + FolderLoading : 'Prašau palaukite...', + FolderNew : 'Prašau įrašykite naujo segtuvo pavadinimą: ', + FolderRename : 'Prašau įrašykite naujo segtuvo pavadinimą: ', + FolderDelete : 'Ar tikrai norite ištrinti "%1" segtuvą?', + FolderRenaming : ' (Pervadinama...)', + FolderDeleting : ' (Trinama...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Prašau įrašykite naujo failo pavadinimą: ', + FileRenameExt : 'Ar tikrai norite pakeisti šio failo plėtinį? Failas gali būti nebepanaudojamas', + FileRenaming : 'Pervadinama...', + FileDelete : 'Ar tikrai norite ištrinti failą "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Prašau palaukite...', + FilesEmpty : 'Tuščias segtuvas', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Krepšelis', + BasketClear : 'Ištuštinti krepšelį', + BasketRemove : 'Ištrinti krepšelį', + BasketOpenFolder : 'Atidaryti failo segtuvą', + BasketTruncateConfirm : 'Ar tikrai norite ištrinti visus failus iš krepšelio?', + BasketRemoveConfirm : 'Ar tikrai norite ištrinti failą "%1" iš krepšelio?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Krepšelyje failų nėra, nuvilkite ir įmeskite juos į krepšelį.', + BasketCopyFilesHere : 'Kopijuoti failus iš krepšelio', + BasketMoveFilesHere : 'Perkelti failus iš krepšelio', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Įkelti', + UploadTip : 'Įkelti naują failą', + Refresh : 'Atnaujinti', + Settings : 'Nustatymai', + Help : 'Pagalba', + HelpTip : 'Patarimai', + + // Context Menus + Select : 'Pasirinkti', + SelectThumbnail : 'Pasirinkti miniatiūrą', + View : 'Peržiūrėti', + Download : 'Atsisiųsti', + + NewSubFolder : 'Naujas segtuvas', + Rename : 'Pervadinti', + Delete : 'Ištrinti', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Nukopijuoti čia', + MoveDragDrop : 'Perkelti čia', + + // Dialogs + RenameDlgTitle : 'Pervadinti', + NewNameDlgTitle : 'Naujas pavadinimas', + FileExistsDlgTitle : 'Toks failas jau egzistuoja', + SysErrorDlgTitle : 'Sistemos klaida', + + FileOverwrite : 'Užrašyti ant viršaus', + FileAutorename : 'Automatiškai pervadinti', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'Gerai', + CancelBtn : 'Atšaukti', + CloseBtn : 'Uždaryti', + + // Upload Panel + UploadTitle : 'Įkelti naują failą', + UploadSelectLbl : 'Pasirinkite failą įkėlimui', + UploadProgressLbl : '(Vykdomas įkėlimas, prašau palaukite...)', + UploadBtn : 'Įkelti pasirinktą failą', + UploadBtnCancel : 'Atšaukti', + + UploadNoFileMsg : 'Pasirinkite failą iš savo kompiuterio', + UploadNoFolder : 'Pasirinkite segtuvą prieš įkeliant.', + UploadNoPerms : 'Failų įkėlimas uždraustas.', + UploadUnknError : 'Įvyko klaida siunčiant failą.', + UploadExtIncorrect : 'Šiame segtuve toks failų plėtinys yra uždraustas.', + + // Flash Uploads + UploadLabel : 'Įkeliami failai', + UploadTotalFiles : 'Iš viso failų:', + UploadTotalSize : 'Visa apimtis:', + UploadSend : 'Įkelti', + UploadAddFiles : 'Pridėti failus', + UploadClearFiles : 'Išvalyti failus', + UploadCancel : 'Atšaukti nusiuntimą', + UploadRemove : 'Pašalinti', + UploadRemoveTip : 'Pašalinti !f', + UploadUploaded : 'Įkeltas !n%', + UploadProcessing : 'Apdorojama...', + + // Settings Panel + SetTitle : 'Nustatymai', + SetView : 'Peržiūrėti:', + SetViewThumb : 'Miniatiūros', + SetViewList : 'Sąrašas', + SetDisplay : 'Rodymas:', + SetDisplayName : 'Failo pavadinimas', + SetDisplayDate : 'Data', + SetDisplaySize : 'Failo dydis', + SetSort : 'Rūšiavimas:', + SetSortName : 'pagal failo pavadinimą', + SetSortDate : 'pagal datą', + SetSortSize : 'pagal apimtį', + SetSortExtension : 'pagal plėtinį', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 failas', + FilesCountMany : '%1 failai', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Užklausos įvykdyti nepavyko. (Klaida %1)', + Errors : + { + 10 : 'Neteisinga komanda.', + 11 : 'Resurso rūšis nenurodyta užklausoje.', + 12 : 'Neteisinga resurso rūšis.', + 102 : 'Netinkamas failas arba segtuvo pavadinimas.', + 103 : 'Nepavyko įvykdyti užklausos dėl autorizavimo apribojimų.', + 104 : 'Nepavyko įvykdyti užklausos dėl failų sistemos leidimų apribojimų.', + 105 : 'Netinkamas failo plėtinys.', + 109 : 'Netinkama užklausa.', + 110 : 'Nežinoma klaida.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Failas arba segtuvas su tuo pačiu pavadinimu jau yra.', + 116 : 'Segtuvas nerastas. Pabandykite atnaujinti.', + 117 : 'Failas nerastas. Pabandykite atnaujinti failų sąrašą.', + 118 : 'Šaltinio ir nurodomos vietos nuorodos yra vienodos.', + 201 : 'Failas su tuo pačiu pavadinimu jau tra. Įkeltas failas buvo pervadintas į "%1"', + 202 : 'Netinkamas failas', + 203 : 'Netinkamas failas. Failo apimtis yra per didelė.', + 204 : 'Įkeltas failas yra pažeistas.', + 205 : 'Nėra laikinojo segtuvo skirto failams įkelti.', + 206 : 'Įkėlimas bus nutrauktas dėl saugumo sumetimų. Šiame faile yra HTML duomenys.', + 207 : 'Įkeltas failas buvo pervadintas į "%1"', + 300 : 'Failų perkėlimas nepavyko.', + 301 : 'Failų kopijavimas nepavyko.', + 500 : 'Failų naršyklė yra išjungta dėl saugumo nustaymų. Prašau susisiekti su sistemų administratoriumi ir patikrinkite CKFinder konfigūracinį failą.', + 501 : 'Miniatiūrų palaikymas išjungtas.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Failo pavadinimas negali būti tuščias', + FileExists : 'Failas %s jau egzistuoja', + FolderEmpty : 'Segtuvo pavadinimas negali būti tuščias', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Failo pavadinimas negali turėti bent vieno iš šių simbolių: \n\\ / : * ? " < > |', + FolderInvChar : 'Segtuvo pavadinimas negali turėti bent vieno iš šių simbolių: \n\\ / : * ? " < > |', + + PopupBlockView : 'Nepavyko atidaryti failo naujame lange. Prašau pakeiskite savo naršyklės nustatymus, kad būtų leidžiami iškylantys langai šiame tinklapyje.', + XmlError : 'Nepavyko įkrauti XML atsako iš web serverio.', + XmlEmpty : 'Nepavyko įkrauti XML atsako iš web serverio. Serveris gražino tuščią užklausą.', + XmlRawResponse : 'Vientisas atsakas iš serverio: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Keisti matmenis %s', + sizeTooBig : 'Negalima nustatyti aukščio ir pločio į didesnius nei originalaus paveiksliuko (%size).', + resizeSuccess : 'Paveiksliuko matmenys pakeisti.', + thumbnailNew : 'Sukurti naują miniatiūrą', + thumbnailSmall : 'Mažas (%s)', + thumbnailMedium : 'Vidutinis (%s)', + thumbnailLarge : 'Didelis (%s)', + newSize : 'Nustatyti naujus matmenis', + width : 'Plotis', + height : 'Aukštis', + invalidHeight : 'Neteisingas aukštis.', + invalidWidth : 'Neteisingas plotis.', + invalidName : 'Neteisingas pavadinimas.', + newImage : 'Sukurti naują paveiksliuką', + noExtensionChange : 'Failo plėtinys negali būti pakeistas.', + imageSmall : 'Šaltinio paveiksliukas yra per mažas', + contextMenuName : 'Pakeisti matmenis', + lockRatio : 'Išlaikyti matmenų santykį', + resetSize : 'Nustatyti dydį iš naujo' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Išsaugoti', + fileOpenError : 'Nepavyko atidaryti failo.', + fileSaveSuccess : 'Failas sėkmingai išsaugotas.', + contextMenuName : 'Redaguoti', + loadingFile : 'Įkraunamas failas, prašau palaukite...' + }, + + Maximize : + { + maximize : 'Padidinti', + minimize : 'Sumažinti' + }, + + Gallery : + { + current : 'Nuotrauka {current} iš {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Paieška' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/lv.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/lv.js new file mode 100644 index 0000000..d906ae2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/lv.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Latvian + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['lv'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, unavailable', // MISSING + confirmCancel : 'Some of the options were changed. Are you sure you want to close the dialog window?', // MISSING + ok : 'Darīts!', + cancel : 'Atcelt', + confirmationTitle : 'Confirmation', // MISSING + messageTitle : 'Information', // MISSING + inputTitle : 'Question', // MISSING + undo : 'Atcelt', + redo : 'Atkārtot', + skip : 'Skip', // MISSING + skipAll : 'Skip all', // MISSING + makeDecision : 'What action should be taken?', // MISSING + rememberDecision: 'Remember my decision' // MISSING + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'lv', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Mapes', + FolderLoading : 'Ielādē...', + FolderNew : 'Lūdzu ierakstiet mapes nosaukumu: ', + FolderRename : 'Lūdzu ierakstiet jauno mapes nosaukumu: ', + FolderDelete : 'Vai tiešām vēlaties neatgriezeniski dzēst mapi "%1"?', + FolderRenaming : ' (Pārsauc...)', + FolderDeleting : ' (Dzēš...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Lūdzu ierakstiet jauno faila nosaukumu: ', + FileRenameExt : 'Vai tiešām vēlaties mainīt faila paplašinājumu? Fails var palikt nelietojams.', + FileRenaming : 'Pārsauc...', + FileDelete : 'Vai tiešām vēlaties neatgriezeniski dzēst failu "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Ielādē...', + FilesEmpty : 'The folder is empty.', // MISSING + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Basket', // MISSING + BasketClear : 'Clear Basket', // MISSING + BasketRemove : 'Remove from Basket', // MISSING + BasketOpenFolder : 'Open Parent Folder', // MISSING + BasketTruncateConfirm : 'Do you really want to remove all files from the basket?', // MISSING + BasketRemoveConfirm : 'Do you really want to remove the file "%1" from the basket?', // MISSING + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'No files in the basket, drag and drop some.', // MISSING + BasketCopyFilesHere : 'Copy Files from Basket', // MISSING + BasketMoveFilesHere : 'Move Files from Basket', // MISSING + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Augšupielādēt', + UploadTip : 'Augšupielādēt jaunu failu', + Refresh : 'Pārlādēt', + Settings : 'Uzstādījumi', + Help : 'Palīdzība', + HelpTip : 'Palīdzība', + + // Context Menus + Select : 'Izvēlēties', + SelectThumbnail : 'Izvēlēties sīkbildi', + View : 'Skatīt', + Download : 'Lejupielādēt', + + NewSubFolder : 'Jauna apakšmape', + Rename : 'Pārsaukt', + Delete : 'Dzēst', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Copy Here', // MISSING + MoveDragDrop : 'Move Here', // MISSING + + // Dialogs + RenameDlgTitle : 'Rename', // MISSING + NewNameDlgTitle : 'New Name', // MISSING + FileExistsDlgTitle : 'File Already Exists', // MISSING + SysErrorDlgTitle : 'System Error', // MISSING + + FileOverwrite : 'Overwrite', // MISSING + FileAutorename : 'Auto-rename', // MISSING + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'Labi', + CancelBtn : 'Atcelt', + CloseBtn : 'Aizvērt', + + // Upload Panel + UploadTitle : 'Jauna faila augšupielādēšana', + UploadSelectLbl : 'Izvēlaties failu, ko augšupielādēt', + UploadProgressLbl : '(Augšupielādē, lūdzu uzgaidiet...)', + UploadBtn : 'Augšupielādēt izvēlēto failu', + UploadBtnCancel : 'Atcelt', + + UploadNoFileMsg : 'Lūdzu izvēlaties failu no sava datora.', + UploadNoFolder : 'Please select a folder before uploading.', // MISSING + UploadNoPerms : 'File upload not allowed.', // MISSING + UploadUnknError : 'Error sending the file.', // MISSING + UploadExtIncorrect : 'File extension not allowed in this folder.', // MISSING + + // Flash Uploads + UploadLabel : 'Files to Upload', // MISSING + UploadTotalFiles : 'Total Files:', // MISSING + UploadTotalSize : 'Total Size:', // MISSING + UploadSend : 'Augšupielādēt', + UploadAddFiles : 'Add Files', // MISSING + UploadClearFiles : 'Clear Files', // MISSING + UploadCancel : 'Cancel Upload', // MISSING + UploadRemove : 'Remove', // MISSING + UploadRemoveTip : 'Remove !f', // MISSING + UploadUploaded : 'Uploaded !n%', // MISSING + UploadProcessing : 'Processing...', // MISSING + + // Settings Panel + SetTitle : 'Uzstādījumi', + SetView : 'Attēlot:', + SetViewThumb : 'Sīkbildes', + SetViewList : 'Failu Sarakstu', + SetDisplay : 'Rādīt:', + SetDisplayName : 'Faila Nosaukumu', + SetDisplayDate : 'Datumu', + SetDisplaySize : 'Faila Izmēru', + SetSort : 'Kārtot:', + SetSortName : 'pēc Faila Nosaukuma', + SetSortDate : 'pēc Datuma', + SetSortSize : 'pēc Izmēra', + SetSortExtension : 'by Extension', // MISSING + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fails', + FilesCountMany : '%1 faili', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Nebija iespējams pabeigt pieprasījumu. (Kļūda %1)', + Errors : + { + 10 : 'Nederīga komanda.', + 11 : 'Resursa veids netika norādīts pieprasījumā.', + 12 : 'Pieprasītais resursa veids nav derīgs.', + 102 : 'Nederīgs faila vai mapes nosaukums.', + 103 : 'Nav iespējams pabeigt pieprasījumu, autorizācijas aizliegumu dēļ.', + 104 : 'Nav iespējams pabeigt pieprasījumu, failu sistēmas atļauju ierobežojumu dēļ.', + 105 : 'Neatļauts faila paplašinājums.', + 109 : 'Nederīgs pieprasījums.', + 110 : 'Nezināma kļūda.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Fails vai mape ar šādu nosaukumu jau pastāv.', + 116 : 'Mape nav atrasta. Lūdzu pārlādējiet šo logu un mēģiniet vēlreiz.', + 117 : 'Fails nav atrasts. Lūdzu pārlādējiet failu sarakstu un mēģiniet vēlreiz.', + 118 : 'Source and target paths are equal.', // MISSING + 201 : 'Fails ar šādu nosaukumu jau eksistē. Augšupielādētais fails tika pārsaukts par "%1".', + 202 : 'Nederīgs fails.', + 203 : 'Nederīgs fails. Faila izmērs pārsniedz pieļaujamo.', + 204 : 'Augšupielādētais fails ir bojāts.', + 205 : 'Neviena pagaidu mape nav pieejama priekš augšupielādēšanas uz servera.', + 206 : 'Augšupielāde atcelta drošības apsvērumu dēļ. Fails satur HTML veida datus.', + 207 : 'Augšupielādētais fails tika pārsaukts par "%1".', + 300 : 'Moving file(s) failed.', // MISSING + 301 : 'Copying file(s) failed.', // MISSING + 500 : 'Failu pārlūks ir atslēgts drošības apsvērumu dēļ. Lūdzu sazinieties ar šīs sistēmas tehnisko administratoru vai pārbaudiet CKFinder konfigurācijas failu.', + 501 : 'Sīkbilžu atbalsts ir atslēgts.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Faila nosaukumā nevar būt tukšums.', + FileExists : 'File %s already exists.', // MISSING + FolderEmpty : 'Mapes nosaukumā nevar būt tukšums.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Faila nosaukums nedrīkst saturēt nevienu no sekojošajām zīmēm: \n\\ / : * ? " < > |', + FolderInvChar : 'Mapes nosaukums nedrīkst saturēt nevienu no sekojošajām zīmēm: \n\\ / : * ? " < > |', + + PopupBlockView : 'Nav iespējams failu atvērt jaunā logā. Lūdzu veiciet izmaiņas uzstādījumos savai interneta pārlūkprogrammai un izslēdziet visus uznirstošo logu bloķētājus šai adresei.', + XmlError : 'It was not possible to properly load the XML response from the web server.', // MISSING + XmlEmpty : 'It was not possible to load the XML response from the web server. The server returned an empty response.', // MISSING + XmlRawResponse : 'Raw response from the server: %s' // MISSING + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Resize %s', // MISSING + sizeTooBig : 'Cannot set image height or width to a value bigger than the original size (%size).', // MISSING + resizeSuccess : 'Image resized successfully.', // MISSING + thumbnailNew : 'Create a new thumbnail', // MISSING + thumbnailSmall : 'Small (%s)', // MISSING + thumbnailMedium : 'Medium (%s)', // MISSING + thumbnailLarge : 'Large (%s)', // MISSING + newSize : 'Set a new size', // MISSING + width : 'Platums', + height : 'Augstums', + invalidHeight : 'Invalid height.', // MISSING + invalidWidth : 'Invalid width.', // MISSING + invalidName : 'Invalid file name.', // MISSING + newImage : 'Create a new image', // MISSING + noExtensionChange : 'File extension cannot be changed.', // MISSING + imageSmall : 'Source image is too small.', // MISSING + contextMenuName : 'Resize', // MISSING + lockRatio : 'Nemainīga Augstuma/Platuma attiecība', + resetSize : 'Atjaunot sākotnējo izmēru' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Saglabāt', + fileOpenError : 'Unable to open file.', // MISSING + fileSaveSuccess : 'File saved successfully.', // MISSING + contextMenuName : 'Edit', // MISSING + loadingFile : 'Loading file, please wait...' // MISSING + }, + + Maximize : + { + maximize : 'Maximize', // MISSING + minimize : 'Minimize' // MISSING + }, + + Gallery : + { + current : 'Image {current} of {total}' // MISSING + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Meklēt' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/nb.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/nb.js new file mode 100644 index 0000000..d307fe3 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/nb.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Norwegian + * Bokmål language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['nb'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, utilgjenglig', + confirmCancel : 'Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?', + ok : 'OK', + cancel : 'Avbryt', + confirmationTitle : 'Bekreftelse', + messageTitle : 'Informasjon', + inputTitle : 'Spørsmål', + undo : 'Angre', + redo : 'Gjør om', + skip : 'Hopp over', + skipAll : 'Hopp over alle', + makeDecision : 'Hvilken handling skal utføres?', + rememberDecision: 'Husk mitt valg' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'nb', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Mapper', + FolderLoading : 'Laster...', + FolderNew : 'Skriv inn det nye mappenavnet: ', + FolderRename : 'Skriv inn det nye mappenavnet: ', + FolderDelete : 'Er du sikker på at du vil slette mappen "%1"?', + FolderRenaming : ' (Endrer mappenavn...)', + FolderDeleting : ' (Sletter...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Skriv inn det nye filnavnet: ', + FileRenameExt : 'Er du sikker på at du vil endre filtypen? Filen kan bli ubrukelig.', + FileRenaming : 'Endrer filnavn...', + FileDelete : 'Er du sikker på at du vil slette denne filen "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Laster...', + FilesEmpty : 'Denne katalogen er tom.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Kurv', + BasketClear : 'Tøm kurv', + BasketRemove : 'Fjern fra kurv', + BasketOpenFolder : 'Åpne foreldremappen', + BasketTruncateConfirm : 'Vil du virkelig fjerne alle filer fra kurven?', + BasketRemoveConfirm : 'Vil du virkelig fjerne filen "%1" fra kurven?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Ingen filer i kurven, dra og slipp noen.', + BasketCopyFilesHere : 'Kopier filer fra kurven', + BasketMoveFilesHere : 'Flytt filer fra kurven', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Last opp', + UploadTip : 'Last opp en ny fil', + Refresh : 'Oppdater', + Settings : 'Innstillinger', + Help : 'Hjelp', + HelpTip : 'Hjelp finnes kun på engelsk', + + // Context Menus + Select : 'Velg', + SelectThumbnail : 'Velg miniatyr', + View : 'Vis fullversjon', + Download : 'Last ned', + + NewSubFolder : 'Ny undermappe', + Rename : 'Endre navn', + Delete : 'Slett', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Kopier hit', + MoveDragDrop : 'Flytt hit', + + // Dialogs + RenameDlgTitle : 'Gi nytt navn', + NewNameDlgTitle : 'Nytt navn', + FileExistsDlgTitle : 'Filen finnes allerede', + SysErrorDlgTitle : 'Systemfeil', + + FileOverwrite : 'Overskriv', + FileAutorename : 'Gi nytt navn automatisk', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Avbryt', + CloseBtn : 'Lukk', + + // Upload Panel + UploadTitle : 'Last opp ny fil', + UploadSelectLbl : 'Velg filen du vil laste opp', + UploadProgressLbl : '(Laster opp filen, vennligst vent...)', + UploadBtn : 'Last opp valgt fil', + UploadBtnCancel : 'Avbryt', + + UploadNoFileMsg : 'Du må velge en fil fra din datamaskin', + UploadNoFolder : 'Vennligst velg en mappe før du laster opp.', + UploadNoPerms : 'Filopplastning er ikke tillatt.', + UploadUnknError : 'Feil ved sending av fil.', + UploadExtIncorrect : 'Filtypen er ikke tillatt i denne mappen.', + + // Flash Uploads + UploadLabel : 'Filer for opplastning', + UploadTotalFiles : 'Totalt antall filer:', + UploadTotalSize : 'Total størrelse:', + UploadSend : 'Last opp', + UploadAddFiles : 'Legg til filer', + UploadClearFiles : 'Tøm filer', + UploadCancel : 'Avbryt opplastning', + UploadRemove : 'Fjern', + UploadRemoveTip : 'Fjern !f', + UploadUploaded : 'Lastet opp !n%', + UploadProcessing : 'Behandler...', + + // Settings Panel + SetTitle : 'Innstillinger', + SetView : 'Filvisning:', + SetViewThumb : 'Miniatyrbilder', + SetViewList : 'Liste', + SetDisplay : 'Vis:', + SetDisplayName : 'Filnavn', + SetDisplayDate : 'Dato', + SetDisplaySize : 'Filstørrelse', + SetSort : 'Sorter etter:', + SetSortName : 'Filnavn', + SetSortDate : 'Dato', + SetSortSize : 'Størrelse', + SetSortExtension : 'Filetternavn', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fil', + FilesCountMany : '%1 filer', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Det var ikke mulig å utføre forespørselen. (Feil %1)', + Errors : + { + 10 : 'Ugyldig kommando.', + 11 : 'Ressurstypen ble ikke spesifisert i forepørselen.', + 12 : 'Ugyldig ressurstype.', + 102 : 'Ugyldig fil- eller mappenavn.', + 103 : 'Kunne ikke utføre forespørselen pga manglende autorisasjon.', + 104 : 'Kunne ikke utføre forespørselen pga manglende tilgang til filsystemet.', + 105 : 'Ugyldig filtype.', + 109 : 'Ugyldig forespørsel.', + 110 : 'Ukjent feil.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Det finnes allerede en fil eller mappe med dette navnet.', + 116 : 'Kunne ikke finne mappen. Oppdater vinduet og prøv igjen.', + 117 : 'Kunne ikke finne filen. Oppdater vinduet og prøv igjen.', + 118 : 'Kilde- og mål-bane er like.', + 201 : 'Det fantes allerede en fil med dette navnet. Den opplastede filens navn har blitt endret til "%1".', + 202 : 'Ugyldig fil.', + 203 : 'Ugyldig fil. Filen er for stor.', + 204 : 'Den opplastede filen er korrupt.', + 205 : 'Det finnes ingen midlertidig mappe for filopplastinger.', + 206 : 'Opplastingen ble avbrutt av sikkerhetshensyn. Filen inneholder HTML-aktig data.', + 207 : 'Den opplastede filens navn har blitt endret til "%1".', + 300 : 'Klarte ikke å flytte fil(er).', + 301 : 'Klarte ikke å kopiere fil(er).', + 500 : 'Filvelgeren ikke tilgjengelig av sikkerhetshensyn. Kontakt systemansvarlig og be han sjekke CKFinder\'s konfigurasjonsfil.', + 501 : 'Funksjon for minityrbilder er skrudd av.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Filnavnet kan ikke være tomt.', + FileExists : 'Filen %s finnes alt.', + FolderEmpty : 'Mappenavnet kan ikke være tomt.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Filnavnet kan ikke inneholde følgende tegn: \n\\ / : * ? " < > |', + FolderInvChar : 'Mappenavnet kan ikke inneholde følgende tegn: \n\\ / : * ? " < > |', + + PopupBlockView : 'Du må skru av popup-blockeren for å se bildet i nytt vindu.', + XmlError : 'Det var ikke mulig å laste XML-dataene i svaret fra serveren.', + XmlEmpty : 'Det var ikke mulig å laste XML-dataene fra serverne, svaret var tomt.', + XmlRawResponse : 'Rått datasvar fra serveren: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Endre størrelse %s', + sizeTooBig : 'Kan ikke sette høyde og bredde til større enn orginalstørrelse (%size).', + resizeSuccess : 'Endring av bildestørrelse var vellykket.', + thumbnailNew : 'Lag ett nytt miniatyrbilde', + thumbnailSmall : 'Liten (%s)', + thumbnailMedium : 'Medium (%s)', + thumbnailLarge : 'Stor (%s)', + newSize : 'Sett en ny størrelse', + width : 'Bredde', + height : 'Høyde', + invalidHeight : 'Ugyldig høyde.', + invalidWidth : 'Ugyldig bredde.', + invalidName : 'Ugyldig filnavn.', + newImage : 'Lag ett nytt bilde', + noExtensionChange : 'Filendelsen kan ikke endres.', + imageSmall : 'Kildebildet er for lite.', + contextMenuName : 'Endre størrelse', + lockRatio : 'Lås forhold', + resetSize : 'Tilbakestill størrelse' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Lagre', + fileOpenError : 'Klarte ikke å åpne filen.', + fileSaveSuccess : 'Fillagring var vellykket.', + contextMenuName : 'Rediger', + loadingFile : 'Laster fil, vennligst vent...' + }, + + Maximize : + { + maximize : 'Maksimer', + minimize : 'Minimer' + }, + + Gallery : + { + current : 'Bilde {current} av {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Søk' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/nl.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/nl.js new file mode 100644 index 0000000..ff2b48d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/nl.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Dutch + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['nl'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, niet beschikbaar', + confirmCancel : 'Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?', + ok : 'OK', + cancel : 'Annuleren', + confirmationTitle : 'Bevestigen', + messageTitle : 'Informatie', + inputTitle : 'Vraag', + undo : 'Ongedaan maken', + redo : 'Opnieuw uitvoeren', + skip : 'Overslaan', + skipAll : 'Alles overslaan', + makeDecision : 'Welke actie moet uitgevoerd worden?', + rememberDecision: 'Onthoud mijn keuze' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'nl', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'd-m-yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Mappen', + FolderLoading : 'Laden...', + FolderNew : 'Vul de mapnaam in: ', + FolderRename : 'Vul de nieuwe mapnaam in: ', + FolderDelete : 'Weet je het zeker dat je de map "%1" wilt verwijderen?', + FolderRenaming : ' (Aanpassen...)', + FolderDeleting : ' (Verwijderen...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Vul de nieuwe bestandsnaam in: ', + FileRenameExt : 'Weet je zeker dat je de extensie wilt wijzigen? Het bestand kan onbruikbaar worden.', + FileRenaming : 'Aanpassen...', + FileDelete : 'Weet je zeker dat je het bestand "%1" wilt verwijderen?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Laden...', + FilesEmpty : 'De map is leeg.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Mandje', + BasketClear : 'Mandje legen', + BasketRemove : 'Verwijder uit het mandje', + BasketOpenFolder : 'Bovenliggende map openen', + BasketTruncateConfirm : 'Weet je zeker dat je alle bestand uit het mandje wilt verwijderen?', + BasketRemoveConfirm : 'Weet je zeker dat je het bestand "%1" uit het mandje wilt verwijderen?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Geen bestanden in het mandje, sleep bestanden hierheen.', + BasketCopyFilesHere : 'Bestanden kopiëren uit het mandje', + BasketMoveFilesHere : 'Bestanden verplaatsen uit het mandje', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Uploaden', + UploadTip : 'Nieuw bestand uploaden', + Refresh : 'Vernieuwen', + Settings : 'Instellingen', + Help : 'Help', + HelpTip : 'Help', + + // Context Menus + Select : 'Selecteer', + SelectThumbnail : 'Selecteer miniatuurafbeelding', + View : 'Bekijken', + Download : 'Downloaden', + + NewSubFolder : 'Nieuwe onderliggende map', + Rename : 'Naam wijzigen', + Delete : 'Verwijderen', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Hierheen kopiëren', + MoveDragDrop : 'Hierheen verplaatsen', + + // Dialogs + RenameDlgTitle : 'Naam wijzigen', + NewNameDlgTitle : 'Nieuwe naam', + FileExistsDlgTitle : 'Bestand bestaat al', + SysErrorDlgTitle : 'Systeemfout', + + FileOverwrite : 'Overschrijven', + FileAutorename : 'Automatisch hernoemen', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Annuleren', + CloseBtn : 'Sluiten', + + // Upload Panel + UploadTitle : 'Nieuw bestand uploaden', + UploadSelectLbl : 'Selecteer het bestand om te uploaden', + UploadProgressLbl : '(Bezig met uploaden, even geduld a.u.b...)', + UploadBtn : 'Upload geselecteerde bestand', + UploadBtnCancel : 'Annuleren', + + UploadNoFileMsg : 'Kies een bestand van je computer.', + UploadNoFolder : 'Selecteer a.u.b. een map voordat je gaat uploaden.', + UploadNoPerms : 'Uploaden bestand niet toegestaan.', + UploadUnknError : 'Fout bij het versturen van het bestand.', + UploadExtIncorrect : 'Bestandsextensie is niet toegestaan in deze map.', + + // Flash Uploads + UploadLabel : 'Te uploaden bestanden', + UploadTotalFiles : 'Totaal aantal bestanden:', + UploadTotalSize : 'Totale grootte:', + UploadSend : 'Uploaden', + UploadAddFiles : 'Bestanden toevoegen', + UploadClearFiles : 'Bestanden wissen', + UploadCancel : 'Upload annuleren', + UploadRemove : 'Verwijderen', + UploadRemoveTip : 'Verwijder !f', + UploadUploaded : '!n% geüpload', + UploadProcessing : 'Verwerken...', + + // Settings Panel + SetTitle : 'Instellingen', + SetView : 'Bekijken:', + SetViewThumb : 'Miniatuurafbeelding', + SetViewList : 'Lijst', + SetDisplay : 'Weergave:', + SetDisplayName : 'Bestandsnaam', + SetDisplayDate : 'Datum', + SetDisplaySize : 'Bestandsgrootte', + SetSort : 'Sorteren op:', + SetSortName : 'Op bestandsnaam', + SetSortDate : 'Op datum', + SetSortSize : 'Op grootte', + SetSortExtension : 'Op bestandsextensie', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 bestand', + FilesCountMany : '%1 bestanden', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Het was niet mogelijk om deze actie uit te voeren. (Fout %1)', + Errors : + { + 10 : 'Ongeldig commando.', + 11 : 'Het bestandstype komt niet voor in de aanvraag.', + 12 : 'Het gevraagde brontype is niet geldig.', + 102 : 'Ongeldige bestands- of mapnaam.', + 103 : 'Het verzoek kon niet worden voltooid vanwege autorisatie beperkingen.', + 104 : 'Het verzoek kon niet worden voltooid door beperkingen in de rechten op het bestandssysteem.', + 105 : 'Ongeldige bestandsextensie.', + 109 : 'Ongeldige aanvraag.', + 110 : 'Onbekende fout.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Er bestaat al een bestand of map met deze naam.', + 116 : 'Map niet gevonden, vernieuw de mappenlijst of kies een andere map.', + 117 : 'Bestand niet gevonden, vernieuw de mappenlijst of kies een andere map.', + 118 : 'Bron- en doelmap zijn gelijk.', + 201 : 'Er bestaat al een bestand met dezelfde naam. Het geüploade bestand is hernoemd naar: "%1".', + 202 : 'Ongeldige bestand.', + 203 : 'Ongeldige bestand. Het bestand is te groot.', + 204 : 'De geüploade file is kapot.', + 205 : 'Er is geen hoofdmap gevonden.', + 206 : 'Het uploaden van het bestand is om veiligheidsredenen afgebroken. Er is HTML code in het bestand aangetroffen.', + 207 : 'Het geüploade bestand is hernoemd naar: "%1".', + 300 : 'Bestand(en) verplaatsen is mislukt.', + 301 : 'Bestand(en) kopiëren is mislukt.', + 500 : 'Het uploaden van een bestand is momenteel niet mogelijk. Contacteer de beheerder en controleer het CKFinder configuratiebestand.', + 501 : 'De ondersteuning voor miniatuurafbeeldingen is uitgeschakeld.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'De bestandsnaam mag niet leeg zijn.', + FileExists : 'Bestand %s bestaat al.', + FolderEmpty : 'De mapnaam mag niet leeg zijn.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'De bestandsnaam mag de volgende tekens niet bevatten: \n\\ / : * ? " < > |', + FolderInvChar : 'De mapnaam mag de volgende tekens niet bevatten: \n\\ / : * ? " < > |', + + PopupBlockView : 'Het was niet mogelijk om dit bestand in een nieuw venster te openen. Configureer de browser zodat het de popups van deze website niet blokkeert.', + XmlError : 'Het is niet gelukt om de XML van de webserver te laden.', + XmlEmpty : 'Het is niet gelukt om de XML van de webserver te laden. De server gaf een leeg resultaat terug.', + XmlRawResponse : 'Origineel resultaat van de server: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : '%s herschalen', + sizeTooBig : 'Het is niet mogelijk om een breedte of hoogte in te stellen die groter is dan de originele afmetingen (%size).', + resizeSuccess : 'De afbeelding is met succes herschaald.', + thumbnailNew : 'Miniatuurafbeelding maken', + thumbnailSmall : 'Klein (%s)', + thumbnailMedium : 'Medium (%s)', + thumbnailLarge : 'Groot (%s)', + newSize : 'Nieuwe afmetingen instellen', + width : 'Breedte', + height : 'Hoogte', + invalidHeight : 'Ongeldige hoogte.', + invalidWidth : 'Ongeldige breedte.', + invalidName : 'Ongeldige bestandsnaam.', + newImage : 'Nieuwe afbeelding maken', + noExtensionChange : 'De bestandsextensie kan niet worden gewijzigd.', + imageSmall : 'Bronafbeelding is te klein.', + contextMenuName : 'Herschalen', + lockRatio : 'Afmetingen vergrendelen', + resetSize : 'Afmetingen resetten' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Opslaan', + fileOpenError : 'Kan het bestand niet openen.', + fileSaveSuccess : 'Bestand is succesvol opgeslagen.', + contextMenuName : 'Wijzigen', + loadingFile : 'Bestand laden, even geduld a.u.b...' + }, + + Maximize : + { + maximize : 'Maximaliseren', + minimize : 'Minimaliseren' + }, + + Gallery : + { + current : 'Afbeelding {current} van {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Zoeken' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/nn.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/nn.js new file mode 100644 index 0000000..4ee812b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/nn.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Norwegian + * Nynorsk language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['nn'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, utilgjenglig', + confirmCancel : 'Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?', + ok : 'OK', + cancel : 'Avbryt', + confirmationTitle : 'Bekreftelse', + messageTitle : 'Informasjon', + inputTitle : 'Spørsmål', + undo : 'Angre', + redo : 'Gjør om', + skip : 'Hopp over', + skipAll : 'Hopp over alle', + makeDecision : 'Hvilken handling skal utføres?', + rememberDecision: 'Husk mitt valg' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'nn', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Mapper', + FolderLoading : 'Laster...', + FolderNew : 'Skriv inn det nye mappenavnet: ', + FolderRename : 'Skriv inn det nye mappenavnet: ', + FolderDelete : 'Er du sikker på at du vil slette mappen "%1"?', + FolderRenaming : ' (Endrer mappenavn...)', + FolderDeleting : ' (Sletter...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Skriv inn det nye filnavnet: ', + FileRenameExt : 'Er du sikker på at du vil endre filtypen? Filen kan bli ubrukelig.', + FileRenaming : 'Endrer filnavn...', + FileDelete : 'Er du sikker på at du vil slette denne filen "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Laster...', + FilesEmpty : 'Denne katalogen er tom.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Kurv', + BasketClear : 'Tøm kurv', + BasketRemove : 'Fjern fra kurv', + BasketOpenFolder : 'Åpne foreldremappen', + BasketTruncateConfirm : 'Vil du virkelig fjerne alle filer fra kurven?', + BasketRemoveConfirm : 'Vil du virkelig fjerne filen "%1" fra kurven?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Ingen filer i kurven, dra og slipp noen.', + BasketCopyFilesHere : 'Kopier filer fra kurven', + BasketMoveFilesHere : 'Flytt filer fra kurven', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Last opp', + UploadTip : 'Last opp en ny fil', + Refresh : 'Oppdater', + Settings : 'Innstillinger', + Help : 'Hjelp', + HelpTip : 'Hjelp finnes kun på engelsk', + + // Context Menus + Select : 'Velg', + SelectThumbnail : 'Velg miniatyr', + View : 'Vis fullversjon', + Download : 'Last ned', + + NewSubFolder : 'Ny undermappe', + Rename : 'Endre navn', + Delete : 'Slett', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Kopier hit', + MoveDragDrop : 'Flytt hit', + + // Dialogs + RenameDlgTitle : 'Gi nytt navn', + NewNameDlgTitle : 'Nytt navn', + FileExistsDlgTitle : 'Filen finnes allerede', + SysErrorDlgTitle : 'Systemfeil', + + FileOverwrite : 'Overskriv', + FileAutorename : 'Gi nytt navn automatisk', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Avbryt', + CloseBtn : 'Lukk', + + // Upload Panel + UploadTitle : 'Last opp ny fil', + UploadSelectLbl : 'Velg filen du vil laste opp', + UploadProgressLbl : '(Laster opp filen, vennligst vent...)', + UploadBtn : 'Last opp valgt fil', + UploadBtnCancel : 'Avbryt', + + UploadNoFileMsg : 'Du må velge en fil fra din datamaskin', + UploadNoFolder : 'Vennligst velg en mappe før du laster opp.', + UploadNoPerms : 'Filopplastning er ikke tillatt.', + UploadUnknError : 'Feil ved sending av fil.', + UploadExtIncorrect : 'Filtypen er ikke tillatt i denne mappen.', + + // Flash Uploads + UploadLabel : 'Filer for opplastning', + UploadTotalFiles : 'Totalt antall filer:', + UploadTotalSize : 'Total størrelse:', + UploadSend : 'Last opp', + UploadAddFiles : 'Legg til filer', + UploadClearFiles : 'Tøm filer', + UploadCancel : 'Avbryt opplastning', + UploadRemove : 'Fjern', + UploadRemoveTip : 'Fjern !f', + UploadUploaded : 'Lastet opp !n%', + UploadProcessing : 'Behandler...', + + // Settings Panel + SetTitle : 'Innstillinger', + SetView : 'Filvisning:', + SetViewThumb : 'Miniatyrbilder', + SetViewList : 'Liste', + SetDisplay : 'Vis:', + SetDisplayName : 'Filnavn', + SetDisplayDate : 'Dato', + SetDisplaySize : 'Filstørrelse', + SetSort : 'Sorter etter:', + SetSortName : 'Filnavn', + SetSortDate : 'Dato', + SetSortSize : 'Størrelse', + SetSortExtension : 'Filetternavn', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fil', + FilesCountMany : '%1 filer', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Det var ikke mulig å utføre forespørselen. (Feil %1)', + Errors : + { + 10 : 'Ugyldig kommando.', + 11 : 'Ressurstypen ble ikke spesifisert i forepørselen.', + 12 : 'Ugyldig ressurstype.', + 102 : 'Ugyldig fil- eller mappenavn.', + 103 : 'Kunne ikke utføre forespørselen pga manglende autorisasjon.', + 104 : 'Kunne ikke utføre forespørselen pga manglende tilgang til filsystemet.', + 105 : 'Ugyldig filtype.', + 109 : 'Ugyldig forespørsel.', + 110 : 'Ukjent feil.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Det finnes allerede en fil eller mappe med dette navnet.', + 116 : 'Kunne ikke finne mappen. Oppdater vinduet og prøv igjen.', + 117 : 'Kunne ikke finne filen. Oppdater vinduet og prøv igjen.', + 118 : 'Kilde- og mål-bane er like.', + 201 : 'Det fantes allerede en fil med dette navnet. Den opplastede filens navn har blitt endret til "%1".', + 202 : 'Ugyldig fil.', + 203 : 'Ugyldig fil. Filen er for stor.', + 204 : 'Den opplastede filen er korrupt.', + 205 : 'Det finnes ingen midlertidig mappe for filopplastinger.', + 206 : 'Opplastingen ble avbrutt av sikkerhetshensyn. Filen inneholder HTML-aktig data.', + 207 : 'Den opplastede filens navn har blitt endret til "%1".', + 300 : 'Klarte ikke å flytte fil(er).', + 301 : 'Klarte ikke å kopiere fil(er).', + 500 : 'Filvelgeren ikke tilgjengelig av sikkerhetshensyn. Kontakt systemansvarlig og be han sjekke CKFinder\'s konfigurasjonsfil.', + 501 : 'Funksjon for minityrbilder er skrudd av.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Filnavnet kan ikke være tomt.', + FileExists : 'Filen %s finnes alt.', + FolderEmpty : 'Mappenavnet kan ikke være tomt.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Filnavnet kan ikke inneholde følgende tegn: \n\\ / : * ? " < > |', + FolderInvChar : 'Mappenavnet kan ikke inneholde følgende tegn: \n\\ / : * ? " < > |', + + PopupBlockView : 'Du må skru av popup-blockeren for å se bildet i nytt vindu.', + XmlError : 'Det var ikke mulig å laste XML-dataene i svaret fra serveren.', + XmlEmpty : 'Det var ikke mulig å laste XML-dataene fra serverne, svaret var tomt.', + XmlRawResponse : 'Rått datasvar fra serveren: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Endre størrelse %s', + sizeTooBig : 'Kan ikke sette høyde og bredde til større enn orginalstørrelse (%size).', + resizeSuccess : 'Endring av bildestørrelse var vellykket.', + thumbnailNew : 'Lag ett nytt miniatyrbilde', + thumbnailSmall : 'Liten (%s)', + thumbnailMedium : 'Medium (%s)', + thumbnailLarge : 'Stor (%s)', + newSize : 'Sett en ny størrelse', + width : 'Bredde', + height : 'Høyde', + invalidHeight : 'Ugyldig høyde.', + invalidWidth : 'Ugyldig bredde.', + invalidName : 'Ugyldig filnavn.', + newImage : 'Lag ett nytt bilde', + noExtensionChange : 'Filendelsen kan ikke endres.', + imageSmall : 'Kildebildet er for lite.', + contextMenuName : 'Endre størrelse', + lockRatio : 'Lås forhold', + resetSize : 'Tilbakestill størrelse' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Lagre', + fileOpenError : 'Klarte ikke å åpne filen.', + fileSaveSuccess : 'Fillagring var vellykket.', + contextMenuName : 'Rediger', + loadingFile : 'Laster fil, vennligst vent...' + }, + + Maximize : + { + maximize : 'Maksimer', + minimize : 'Minimer' + }, + + Gallery : + { + current : 'Bilde {current} av {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Søk' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/no.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/no.js new file mode 100644 index 0000000..028eb71 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/no.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Norwegian + * Bokmål language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['no'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, utilgjenglig', + confirmCancel : 'Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?', + ok : 'OK', + cancel : 'Avbryt', + confirmationTitle : 'Bekreftelse', + messageTitle : 'Informasjon', + inputTitle : 'Spørsmål', + undo : 'Angre', + redo : 'Gjør om', + skip : 'Hopp over', + skipAll : 'Hopp over alle', + makeDecision : 'Hvilken handling skal utføres?', + rememberDecision: 'Husk mitt valg' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'no', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Mapper', + FolderLoading : 'Laster...', + FolderNew : 'Skriv inn det nye mappenavnet: ', + FolderRename : 'Skriv inn det nye mappenavnet: ', + FolderDelete : 'Er du sikker på at du vil slette mappen "%1"?', + FolderRenaming : ' (Endrer mappenavn...)', + FolderDeleting : ' (Sletter...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Skriv inn det nye filnavnet: ', + FileRenameExt : 'Er du sikker på at du vil endre filtypen? Filen kan bli ubrukelig.', + FileRenaming : 'Endrer filnavn...', + FileDelete : 'Er du sikker på at du vil slette denne filen "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Laster...', + FilesEmpty : 'Denne katalogen er tom.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Kurv', + BasketClear : 'Tøm kurv', + BasketRemove : 'Fjern fra kurv', + BasketOpenFolder : 'Åpne foreldremappen', + BasketTruncateConfirm : 'Vil du virkelig fjerne alle filer fra kurven?', + BasketRemoveConfirm : 'Vil du virkelig fjerne filen "%1" fra kurven?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Ingen filer i kurven, dra og slipp noen.', + BasketCopyFilesHere : 'Kopier filer fra kurven', + BasketMoveFilesHere : 'Flytt filer fra kurven', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Last opp', + UploadTip : 'Last opp en ny fil', + Refresh : 'Oppdater', + Settings : 'Innstillinger', + Help : 'Hjelp', + HelpTip : 'Hjelp finnes kun på engelsk', + + // Context Menus + Select : 'Velg', + SelectThumbnail : 'Velg miniatyr', + View : 'Vis fullversjon', + Download : 'Last ned', + + NewSubFolder : 'Ny undermappe', + Rename : 'Endre navn', + Delete : 'Slett', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Kopier hit', + MoveDragDrop : 'Flytt hit', + + // Dialogs + RenameDlgTitle : 'Gi nytt navn', + NewNameDlgTitle : 'Nytt navn', + FileExistsDlgTitle : 'Filen finnes allerede', + SysErrorDlgTitle : 'Systemfeil', + + FileOverwrite : 'Overskriv', + FileAutorename : 'Gi nytt navn automatisk', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Avbryt', + CloseBtn : 'Lukk', + + // Upload Panel + UploadTitle : 'Last opp ny fil', + UploadSelectLbl : 'Velg filen du vil laste opp', + UploadProgressLbl : '(Laster opp filen, vennligst vent...)', + UploadBtn : 'Last opp valgt fil', + UploadBtnCancel : 'Avbryt', + + UploadNoFileMsg : 'Du må velge en fil fra din datamaskin', + UploadNoFolder : 'Vennligst velg en mappe før du laster opp.', + UploadNoPerms : 'Filopplastning er ikke tillatt.', + UploadUnknError : 'Feil ved sending av fil.', + UploadExtIncorrect : 'Filtypen er ikke tillatt i denne mappen.', + + // Flash Uploads + UploadLabel : 'Filer for opplastning', + UploadTotalFiles : 'Totalt antall filer:', + UploadTotalSize : 'Total størrelse:', + UploadSend : 'Last opp', + UploadAddFiles : 'Legg til filer', + UploadClearFiles : 'Tøm filer', + UploadCancel : 'Avbryt opplastning', + UploadRemove : 'Fjern', + UploadRemoveTip : 'Fjern !f', + UploadUploaded : 'Lastet opp !n%', + UploadProcessing : 'Behandler...', + + // Settings Panel + SetTitle : 'Innstillinger', + SetView : 'Filvisning:', + SetViewThumb : 'Miniatyrbilder', + SetViewList : 'Liste', + SetDisplay : 'Vis:', + SetDisplayName : 'Filnavn', + SetDisplayDate : 'Dato', + SetDisplaySize : 'Filstørrelse', + SetSort : 'Sorter etter:', + SetSortName : 'Filnavn', + SetSortDate : 'Dato', + SetSortSize : 'Størrelse', + SetSortExtension : 'Filetternavn', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fil', + FilesCountMany : '%1 filer', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Det var ikke mulig å utføre forespørselen. (Feil %1)', + Errors : + { + 10 : 'Ugyldig kommando.', + 11 : 'Ressurstypen ble ikke spesifisert i forepørselen.', + 12 : 'Ugyldig ressurstype.', + 102 : 'Ugyldig fil- eller mappenavn.', + 103 : 'Kunne ikke utføre forespørselen pga manglende autorisasjon.', + 104 : 'Kunne ikke utføre forespørselen pga manglende tilgang til filsystemet.', + 105 : 'Ugyldig filtype.', + 109 : 'Ugyldig forespørsel.', + 110 : 'Ukjent feil.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Det finnes allerede en fil eller mappe med dette navnet.', + 116 : 'Kunne ikke finne mappen. Oppdater vinduet og prøv igjen.', + 117 : 'Kunne ikke finne filen. Oppdater vinduet og prøv igjen.', + 118 : 'Kilde- og mål-bane er like.', + 201 : 'Det fantes allerede en fil med dette navnet. Den opplastede filens navn har blitt endret til "%1".', + 202 : 'Ugyldig fil.', + 203 : 'Ugyldig fil. Filen er for stor.', + 204 : 'Den opplastede filen er korrupt.', + 205 : 'Det finnes ingen midlertidig mappe for filopplastinger.', + 206 : 'Opplastingen ble avbrutt av sikkerhetshensyn. Filen inneholder HTML-aktig data.', + 207 : 'Den opplastede filens navn har blitt endret til "%1".', + 300 : 'Klarte ikke å flytte fil(er).', + 301 : 'Klarte ikke å kopiere fil(er).', + 500 : 'Filvelgeren ikke tilgjengelig av sikkerhetshensyn. Kontakt systemansvarlig og be han sjekke CKFinder\'s konfigurasjonsfil.', + 501 : 'Funksjon for minityrbilder er skrudd av.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Filnavnet kan ikke være tomt.', + FileExists : 'Filen %s finnes alt.', + FolderEmpty : 'Mappenavnet kan ikke være tomt.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Filnavnet kan ikke inneholde følgende tegn: \n\\ / : * ? " < > |', + FolderInvChar : 'Mappenavnet kan ikke inneholde følgende tegn: \n\\ / : * ? " < > |', + + PopupBlockView : 'Du må skru av popup-blockeren for å se bildet i nytt vindu.', + XmlError : 'Det var ikke mulig å laste XML-dataene i svaret fra serveren.', + XmlEmpty : 'Det var ikke mulig å laste XML-dataene fra serverne, svaret var tomt.', + XmlRawResponse : 'Rått datasvar fra serveren: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Endre størrelse %s', + sizeTooBig : 'Kan ikke sette høyde og bredde til større enn orginalstørrelse (%size).', + resizeSuccess : 'Endring av bildestørrelse var vellykket.', + thumbnailNew : 'Lag ett nytt miniatyrbilde', + thumbnailSmall : 'Liten (%s)', + thumbnailMedium : 'Medium (%s)', + thumbnailLarge : 'Stor (%s)', + newSize : 'Sett en ny størrelse', + width : 'Bredde', + height : 'Høyde', + invalidHeight : 'Ugyldig høyde.', + invalidWidth : 'Ugyldig bredde.', + invalidName : 'Ugyldig filnavn.', + newImage : 'Lag ett nytt bilde', + noExtensionChange : 'Filendelsen kan ikke endres.', + imageSmall : 'Kildebildet er for lite.', + contextMenuName : 'Endre størrelse', + lockRatio : 'Lås forhold', + resetSize : 'Tilbakestill størrelse' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Lagre', + fileOpenError : 'Klarte ikke å åpne filen.', + fileSaveSuccess : 'Fillagring var vellykket.', + contextMenuName : 'Rediger', + loadingFile : 'Laster fil, vennligst vent...' + }, + + Maximize : + { + maximize : 'Maksimer', + minimize : 'Minimer' + }, + + Gallery : + { + current : 'Bilde {current} av {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Søk' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/pl.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/pl.js new file mode 100644 index 0000000..2c2ada5 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/pl.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Polish + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['pl'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, wyłączone', + confirmCancel : 'Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe?', + ok : 'OK', + cancel : 'Anuluj', + confirmationTitle : 'Potwierdzenie', + messageTitle : 'Informacja', + inputTitle : 'Pytanie', + undo : 'Cofnij', + redo : 'Ponów', + skip : 'Pomiń', + skipAll : 'Pomiń wszystkie', + makeDecision : 'Wybierz jedną z opcji:', + rememberDecision: 'Zapamiętaj mój wybór' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'pl', + LangCode : 'pl', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'yyyy-mm-dd HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Foldery', + FolderLoading : 'Ładowanie...', + FolderNew : 'Podaj nazwę nowego folderu: ', + FolderRename : 'Podaj nową nazwę folderu: ', + FolderDelete : 'Czy na pewno chcesz usunąć folder "%1"?', + FolderRenaming : ' (Zmieniam nazwę...)', + FolderDeleting : ' (Kasowanie...)', + DestinationFolder : 'Folder docelowy', + + // Files + FileRename : 'Podaj nową nazwę pliku: ', + FileRenameExt : 'Czy na pewno chcesz zmienić rozszerzenie pliku? Może to spowodować problemy z otwieraniem pliku przez innych użytkowników.', + FileRenaming : 'Zmieniam nazwę...', + FileDelete : 'Czy na pewno chcesz usunąć plik "%1"?', + FilesDelete : 'Czy na pewno chcesz usunąć pliki (razem: %1)?', + FilesLoading : 'Ładowanie...', + FilesEmpty : 'Folder jest pusty', + DestinationFile : 'Plik docelowy', + SkippedFiles : 'Lista pominiętych plików:', + + // Basket + BasketFolder : 'Koszyk', + BasketClear : 'Wyczyść koszyk', + BasketRemove : 'Usuń z koszyka', + BasketOpenFolder : 'Otwórz folder z plikiem', + BasketTruncateConfirm : 'Czy naprawdę chcesz usunąć wszystkie pliki z koszyka?', + BasketRemoveConfirm : 'Czy naprawdę chcesz usunąć plik "%1" z koszyka?', + BasketRemoveConfirmMultiple : 'Czy naprawdę chcesz usunąć pliki (razem: %1) z koszyka?', + BasketEmpty : 'Brak plików w koszyku. Aby dodać plik, przeciągnij i upuść (drag\'n\'drop) dowolny plik do koszyka.', + BasketCopyFilesHere : 'Skopiuj pliki z koszyka', + BasketMoveFilesHere : 'Przenieś pliki z koszyka', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Wyślij', + UploadTip : 'Wyślij plik', + Refresh : 'Odśwież', + Settings : 'Ustawienia', + Help : 'Pomoc', + HelpTip : 'Wskazówka', + + // Context Menus + Select : 'Wybierz', + SelectThumbnail : 'Wybierz miniaturkę', + View : 'Zobacz', + Download : 'Pobierz', + + NewSubFolder : 'Nowy podfolder', + Rename : 'Zmień nazwę', + Delete : 'Usuń', + DeleteFiles : 'Usuń pliki', + + CopyDragDrop : 'Skopiuj tutaj', + MoveDragDrop : 'Przenieś tutaj', + + // Dialogs + RenameDlgTitle : 'Zmiana nazwy', + NewNameDlgTitle : 'Nowa nazwa', + FileExistsDlgTitle : 'Plik już istnieje', + SysErrorDlgTitle : 'Błąd systemu', + + FileOverwrite : 'Nadpisz', + FileAutorename : 'Zmień automatycznie nazwę', + ManuallyRename : 'Zmień nazwę ręcznie', + + // Generic + OkBtn : 'OK', + CancelBtn : 'Anuluj', + CloseBtn : 'Zamknij', + + // Upload Panel + UploadTitle : 'Wyślij plik', + UploadSelectLbl : 'Wybierz plik', + UploadProgressLbl : '(Trwa wysyłanie pliku, proszę czekać...)', + UploadBtn : 'Wyślij wybrany plik', + UploadBtnCancel : 'Anuluj', + + UploadNoFileMsg : 'Wybierz plik ze swojego komputera.', + UploadNoFolder : 'Wybierz folder przed wysłaniem pliku.', + UploadNoPerms : 'Wysyłanie plików nie jest dozwolone.', + UploadUnknError : 'Błąd podczas wysyłania pliku.', + UploadExtIncorrect : 'Rozszerzenie pliku nie jest dozwolone w tym folderze.', + + // Flash Uploads + UploadLabel : 'Pliki do wysłania', + UploadTotalFiles : 'Ilość razem:', + UploadTotalSize : 'Rozmiar razem:', + UploadSend : 'Wyślij', + UploadAddFiles : 'Dodaj pliki', + UploadClearFiles : 'Wyczyść wszystko', + UploadCancel : 'Anuluj wysyłanie', + UploadRemove : 'Usuń', + UploadRemoveTip : 'Usuń !f', + UploadUploaded : 'Wysłano: !n%', + UploadProcessing : 'Przetwarzanie...', + + // Settings Panel + SetTitle : 'Ustawienia', + SetView : 'Widok:', + SetViewThumb : 'Miniaturki', + SetViewList : 'Lista', + SetDisplay : 'Wyświetlanie:', + SetDisplayName : 'Nazwa pliku', + SetDisplayDate : 'Data', + SetDisplaySize : 'Rozmiar pliku', + SetSort : 'Sortowanie:', + SetSortName : 'wg nazwy pliku', + SetSortDate : 'wg daty', + SetSortSize : 'wg rozmiaru', + SetSortExtension : 'wg rozszerzenia', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 plik', + FilesCountMany : 'Ilość plików: %1', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Wykonanie operacji zakończyło się niepowodzeniem. (Błąd %1)', + Errors : + { + 10 : 'Nieprawidłowe polecenie (command).', + 11 : 'Brak wymaganego parametru: typ danych (resource type).', + 12 : 'Nieprawidłowy typ danych (resource type).', + 102 : 'Nieprawidłowa nazwa pliku lub folderu.', + 103 : 'Wykonanie operacji nie jest możliwe: brak uprawnień.', + 104 : 'Wykonanie operacji nie powiodło się z powodu niewystarczających uprawnień do systemu plików.', + 105 : 'Nieprawidłowe rozszerzenie.', + 109 : 'Nieprawiłowe żądanie.', + 110 : 'Niezidentyfikowany błąd.', + 111 : 'Wykonanie operacji nie powiodło się z powodu zbyt dużego rozmiaru pliku wynikowego.', + 115 : 'Plik lub folder o podanej nazwie już istnieje.', + 116 : 'Nie znaleziono folderu. Odśwież panel i spróbuj ponownie.', + 117 : 'Nie znaleziono pliku. Odśwież listę plików i spróbuj ponownie.', + 118 : 'Ścieżki źródłowa i docelowa są jednakowe.', + 201 : 'Plik o podanej nazwie już istnieje. Nazwa przesłanego pliku została zmieniona na "%1".', + 202 : 'Nieprawidłowy plik.', + 203 : 'Nieprawidłowy plik. Plik przekracza dozwolony rozmiar.', + 204 : 'Przesłany plik jest uszkodzony.', + 205 : 'Brak folderu tymczasowego na serwerze do przesyłania plików.', + 206 : 'Przesyłanie pliku zakończyło się niepowodzeniem z powodów bezpieczeństwa. Plik zawiera dane przypominające HTML.', + 207 : 'Nazwa przesłanego pliku została zmieniona na "%1".', + 300 : 'Przenoszenie nie powiodło się.', + 301 : 'Kopiowanie nie powiodo się.', + 500 : 'Menedżer plików jest wyłączony z powodów bezpieczeństwa. Skontaktuj się z administratorem oraz sprawdź plik konfiguracyjny CKFindera.', + 501 : 'Tworzenie miniaturek jest wyłączone.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Nazwa pliku nie może być pusta.', + FileExists : 'Plik %s już istnieje.', + FolderEmpty : 'Nazwa folderu nie może być pusta.', + FolderExists : 'Folder %s już istnieje.', + FolderNameExists : 'Folder już istnieje.', + + FileInvChar : 'Nazwa pliku nie może zawierać żadnego z podanych znaków: \n\\ / : * ? " < > |', + FolderInvChar : 'Nazwa folderu nie może zawierać żadnego z podanych znaków: \n\\ / : * ? " < > |', + + PopupBlockView : 'Otwarcie pliku w nowym oknie nie powiodło się. Należy zmienić konfigurację przeglądarki i wyłączyć wszelkie blokady okienek popup dla tej strony.', + XmlError : 'Nie można poprawnie załadować odpowiedzi XML z serwera WWW.', + XmlEmpty : 'Nie można załadować odpowiedzi XML z serwera WWW. Serwer zwrócił pustą odpowiedź.', + XmlRawResponse : 'Odpowiedź serwera: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Zmiana rozmiaru %s', + sizeTooBig : 'Nie możesz zmienić wysokości lub szerokości na wartość większą od oryginalnego rozmiaru (%size).', + resizeSuccess : 'Obrazek został pomyślnie przeskalowany.', + thumbnailNew : 'Utwórz nową miniaturkę', + thumbnailSmall : 'Mała (%s)', + thumbnailMedium : 'Średnia (%s)', + thumbnailLarge : 'Duża (%s)', + newSize : 'Podaj nowe wymiary', + width : 'Szerokość', + height : 'Wysokość', + invalidHeight : 'Nieprawidłowa wysokość.', + invalidWidth : 'Nieprawidłowa szerokość.', + invalidName : 'Nieprawidłowa nazwa pliku.', + newImage : 'Utwórz nowy obrazek', + noExtensionChange : 'Rozszerzenie pliku nie może zostac zmienione.', + imageSmall : 'Plik źródłowy jest zbyt mały.', + contextMenuName : 'Zmień rozmiar', + lockRatio : 'Zablokuj proporcje', + resetSize : 'Przywróć rozmiar' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Zapisz', + fileOpenError : 'Nie udało się otworzyć pliku.', + fileSaveSuccess : 'Plik został zapisany pomyślnie.', + contextMenuName : 'Edytuj', + loadingFile : 'Trwa ładowanie pliku, proszę czekać...' + }, + + Maximize : + { + maximize : 'Maksymalizuj', + minimize : 'Minimalizuj' + }, + + Gallery : + { + current : 'Obrazek {current} z {total}' + }, + + Zip : + { + extractHereLabel : 'Wypakuj tutaj', + extractToLabel : 'Wypakuj do...', + downloadZipLabel : 'Pobierz jako zip', + compressZipLabel : 'Kompresuj do zip', + removeAndExtract : 'Usuń poprzedni i wypakuj', + extractAndOverwrite : 'Wypakuj do bieżącego nadpisując istniejące pliki', + extractSuccess : 'Plik został pomyślnie wypakowany.' + }, + + Search : + { + searchPlaceholder : 'Szukaj' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/pt-br.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/pt-br.js new file mode 100644 index 0000000..7859a66 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/pt-br.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Brazilian Portuguese + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['pt-br'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, indisponível', + confirmCancel : 'Algumas opções foram modificadas. Deseja fechar a janela realmente?', + ok : 'OK', + cancel : 'Cancelar', + confirmationTitle : 'Confirmação', + messageTitle : 'Informação', + inputTitle : 'Pergunta', + undo : 'Desfazer', + redo : 'Refazer', + skip : 'Ignorar', + skipAll : 'Ignorar todos', + makeDecision : 'Que ação deve ser tomada?', + rememberDecision: 'Lembra minha decisão' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'pt-br', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Pastas', + FolderLoading : 'Carregando...', + FolderNew : 'Favor informar o nome da nova pasta: ', + FolderRename : 'Favor informar o nome da nova pasta: ', + FolderDelete : 'Você tem certeza que deseja apagar a pasta "%1"?', + FolderRenaming : ' (Renomeando...)', + FolderDeleting : ' (Apagando...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Favor informar o nome do novo arquivo: ', + FileRenameExt : 'Você tem certeza que deseja alterar a extensão do arquivo? O arquivo pode ser danificado.', + FileRenaming : 'Renomeando...', + FileDelete : 'Você tem certeza que deseja apagar o arquivo "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Carregando...', + FilesEmpty : 'Pasta vazia', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Cesta', + BasketClear : 'Limpa Cesta', + BasketRemove : 'Remove da cesta', + BasketOpenFolder : 'Abre a pasta original', + BasketTruncateConfirm : 'Remover todos os arquivas da cesta?', + BasketRemoveConfirm : 'Remover o arquivo "%1" da cesta?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Nenhum arquivo na cesta, arraste alguns antes.', + BasketCopyFilesHere : 'Copia Arquivos da Cesta', + BasketMoveFilesHere : 'Move os Arquivos da Cesta', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Enviar arquivo', + UploadTip : 'Enviar novo arquivo', + Refresh : 'Atualizar', + Settings : 'Configurações', + Help : 'Ajuda', + HelpTip : 'Ajuda', + + // Context Menus + Select : 'Selecionar', + SelectThumbnail : 'Selecionar miniatura', + View : 'Visualizar', + Download : 'Download', + + NewSubFolder : 'Nova sub-pasta', + Rename : 'Renomear', + Delete : 'Apagar', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Copia aqui', + MoveDragDrop : 'Move aqui', + + // Dialogs + RenameDlgTitle : 'Renomeia', + NewNameDlgTitle : 'Novo nome', + FileExistsDlgTitle : 'O arquivo já existe', + SysErrorDlgTitle : 'Erro de Sistema', + + FileOverwrite : 'Sobrescrever', + FileAutorename : 'Renomeia automaticamente', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Cancelar', + CloseBtn : 'Fechar', + + // Upload Panel + UploadTitle : 'Enviar novo arquivo', + UploadSelectLbl : 'Selecione o arquivo para enviar', + UploadProgressLbl : '(Enviado arquivo, favor aguardar...)', + UploadBtn : 'Enviar arquivo selecionado', + UploadBtnCancel : 'Cancelar', + + UploadNoFileMsg : 'Favor selecionar o arquivo no seu computador.', + UploadNoFolder : 'Favor selecionar a pasta antes the enviar o arquivo.', + UploadNoPerms : 'Não é permitido o envio de arquivos.', + UploadUnknError : 'Erro no envio do arquivo.', + UploadExtIncorrect : 'A extensão deste arquivo não é permitida nesat pasta.', + + // Flash Uploads + UploadLabel : 'Arquivos para Enviar', + UploadTotalFiles : 'Arquivos:', + UploadTotalSize : 'Tamanho:', + UploadSend : 'Enviar arquivo', + UploadAddFiles : 'Adicionar Arquivos', + UploadClearFiles : 'Remover Arquivos', + UploadCancel : 'Cancelar Envio', + UploadRemove : 'Remover', + UploadRemoveTip : 'Remover !f', + UploadUploaded : '!n% enviado', + UploadProcessing : 'Processando...', + + // Settings Panel + SetTitle : 'Configurações', + SetView : 'Visualizar:', + SetViewThumb : 'Miniaturas', + SetViewList : 'Lista', + SetDisplay : 'Exibir:', + SetDisplayName : 'Arquivo', + SetDisplayDate : 'Data', + SetDisplaySize : 'Tamanho', + SetSort : 'Ordenar:', + SetSortName : 'por Nome do arquivo', + SetSortDate : 'por Data', + SetSortSize : 'por Tamanho', + SetSortExtension : 'por Extensão', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 arquivo', + FilesCountMany : '%1 arquivos', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Não foi possível completer o seu pedido. (Erro %1)', + Errors : + { + 10 : 'Comando inválido.', + 11 : 'O tipo de recurso não foi especificado na solicitação.', + 12 : 'O recurso solicitado não é válido.', + 102 : 'Nome do arquivo ou pasta inválido.', + 103 : 'Não foi possível completar a solicitação por restrições de acesso.', + 104 : 'Não foi possível completar a solicitação por restrições de acesso do sistema de arquivos.', + 105 : 'Extensão de arquivo inválida.', + 109 : 'Solicitação inválida.', + 110 : 'Erro desconhecido.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Uma arquivo ou pasta já existe com esse nome.', + 116 : 'Pasta não encontrada. Atualize e tente novamente.', + 117 : 'Arquivo não encontrado. Atualize a lista de arquivos e tente novamente.', + 118 : 'Origem e destino são iguais.', + 201 : 'Um arquivo com o mesmo nome já está disponível. O arquivo enviado foi renomeado para "%1".', + 202 : 'Arquivo inválido.', + 203 : 'Arquivo inválido. O tamanho é muito grande.', + 204 : 'O arquivo enviado está corrompido.', + 205 : 'Nenhuma pasta temporária para envio está disponível no servidor.', + 206 : 'Transmissão cancelada por razões de segurança. O arquivo contem dados HTML.', + 207 : 'O arquivo enviado foi renomeado para "%1".', + 300 : 'Não foi possível mover o(s) arquivo(s).', + 301 : 'Não foi possível copiar o(s) arquivos(s).', + 500 : 'A navegação de arquivos está desativada por razões de segurança. Contacte o administrador do sistema.', + 501 : 'O suporte a miniaturas está desabilitado.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'O nome do arquivo não pode ser vazio.', + FileExists : 'O nome %s já é em uso.', + FolderEmpty : 'O nome da pasta não pode ser vazio.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'O nome do arquivo não pode conter nenhum desses caracteres: \n\\ / : * ? " < > |', + FolderInvChar : 'O nome da pasta não pode conter nenhum desses caracteres: \n\\ / : * ? " < > |', + + PopupBlockView : 'Não foi possível abrir o arquivo em outra janela. Configure seu navegador e desabilite o bloqueio a popups para esse site.', + XmlError : 'Não foi possível carregar a resposta XML enviada pelo servidor.', + XmlEmpty : 'Não foi possível carregar a resposta XML enviada pelo servidor. Resposta vazia..', + XmlRawResponse : 'Resposta original enviada pelo servidor: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Redimensionar %s', + sizeTooBig : 'Não possível usar dimensões maiores do que as originais (%size).', + resizeSuccess : 'Imagem redimensionada corretamente.', + thumbnailNew : 'Cria nova anteprima', + thumbnailSmall : 'Pequeno (%s)', + thumbnailMedium : 'Médio (%s)', + thumbnailLarge : 'Grande (%s)', + newSize : 'Novas dimensões', + width : 'Largura', + height : 'Altura', + invalidHeight : 'Altura incorreta.', + invalidWidth : 'Largura incorreta.', + invalidName : 'O nome do arquivo não é válido.', + newImage : 'Cria nova imagem', + noExtensionChange : 'A extensão do arquivo não pode ser modificada.', + imageSmall : 'A imagem original é muito pequena.', + contextMenuName : 'Redimensionar', + lockRatio : 'Travar Proporções', + resetSize : 'Redefinir para o Tamanho Original' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Salva', + fileOpenError : 'Não é possível abrir o arquivo.', + fileSaveSuccess : 'Arquivo salvado corretamente.', + contextMenuName : 'Modificar', + loadingFile : 'Carregando arquivo. Por favor aguarde...' + }, + + Maximize : + { + maximize : 'Maximizar', + minimize : 'Minimizar' + }, + + Gallery : + { + current : 'Imagem {current} de {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Pesquisar' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ro.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ro.js new file mode 100644 index 0000000..4038616 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ro.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Romanian + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['ro'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, indisponibil', + confirmCancel : 'Unele opțiuni au fost schimbate. Ești sigur că vrei să închizi fereastra de dialog?', + ok : 'OK', + cancel : 'Anulează', + confirmationTitle : 'Confirmă', + messageTitle : 'Informații', + inputTitle : 'Întreabă', + undo : 'Starea anterioară', + redo : 'Starea ulterioară(redo)', + skip : 'Sări', + skipAll : 'Sări peste toate', + makeDecision : 'Ce acțiune trebuie luată?', + rememberDecision: 'Reține acțiunea pe viitor' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'ro', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd/mm/yyyy HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Dosare', + FolderLoading : 'Încărcare...', + FolderNew : 'Te rugăm să introduci numele dosarului nou: ', + FolderRename : 'Te rugăm să introduci numele nou al dosarului: ', + FolderDelete : 'Ești sigur că vrei să ștergi dosarul "%1"?', + FolderRenaming : ' (Redenumire...)', + FolderDeleting : ' (Ștergere...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Te rugăm să introduci numele nou al fișierului: ', + FileRenameExt : 'Ești sigur că vrei să schimbi extensia fișierului? Fișierul poate deveni inutilizabil.', + FileRenaming : 'Redenumire...', + FileDelete : 'Ești sigur că vrei să ștergi fișierul "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Încărcare...', + FilesEmpty : 'Dosarul este gol.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Coș', + BasketClear : 'Golește coș', + BasketRemove : 'Elimină din coș', + BasketOpenFolder : 'Deschide dosarul părinte', + BasketTruncateConfirm : 'Sigur dorești să elimini toate fișierele din coș?', + BasketRemoveConfirm : 'Sigur dorești să elimini fișierul "%1" din coș?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Niciun fișier în coș, trage și așează cu mouse-ul.', + BasketCopyFilesHere : 'Copiază fișiere din coș', + BasketMoveFilesHere : 'Mută fișiere din coș', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Încarcă', + UploadTip : 'Încarcă un fișier nou', + Refresh : 'Reîmprospătare', + Settings : 'Setări', + Help : 'Ajutor', + HelpTip : 'Ajutor', + + // Context Menus + Select : 'Selectează', + SelectThumbnail : 'Selectează Thumbnail', + View : 'Vizualizează', + Download : 'Descarcă', + + NewSubFolder : 'Subdosar nou', + Rename : 'Redenumește', + Delete : 'Șterge', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Copiază aici', + MoveDragDrop : 'Mută aici', + + // Dialogs + RenameDlgTitle : 'Redenumește', + NewNameDlgTitle : 'Nume nou', + FileExistsDlgTitle : 'Fișierul există deja', + SysErrorDlgTitle : 'Eroare de sistem', + + FileOverwrite : 'Suprascriere', + FileAutorename : 'Auto-redenumire', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Anulează', + CloseBtn : 'Închide', + + // Upload Panel + UploadTitle : 'Încarcă un fișier nou', + UploadSelectLbl : 'Selectează un fișier de încărcat', + UploadProgressLbl : '(Încărcare în progres, te rog așteaptă...)', + UploadBtn : 'Încarcă fișierul selectat', + UploadBtnCancel : 'Anulează', + + UploadNoFileMsg : 'Te rugăm să selectezi un fișier din computer.', + UploadNoFolder : 'Te rugăm să selectezi un dosar înainte de a încărca.', + UploadNoPerms : 'Încărcare fișier nepermisă.', + UploadUnknError : 'Eroare la trimiterea fișierului.', + UploadExtIncorrect : 'Extensie fișier nepermisă în acest dosar.', + + // Flash Uploads + UploadLabel : 'Fișiere de încărcat', + UploadTotalFiles : 'Total fișiere:', + UploadTotalSize : 'Total mărime:', + UploadSend : 'Încarcă', + UploadAddFiles : 'Adaugă fișiere', + UploadClearFiles : 'Renunță la toate', + UploadCancel : 'Anulează încărcare', + UploadRemove : 'Elimină', + UploadRemoveTip : 'Elimină !f', + UploadUploaded : 'Încarcă !n%', + UploadProcessing : 'Prelucrare...', + + // Settings Panel + SetTitle : 'Setări', + SetView : 'Vizualizează:', + SetViewThumb : 'Thumbnails', + SetViewList : 'Listă', + SetDisplay : 'Afișează:', + SetDisplayName : 'Nume fișier', + SetDisplayDate : 'Dată', + SetDisplaySize : 'Mărime fișier', + SetSort : 'Sortare:', + SetSortName : 'după nume fișier', + SetSortDate : 'după dată', + SetSortSize : 'după mărime', + SetSortExtension : 'după extensie', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fișier', + FilesCountMany : '%1 fișiere', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Nu a fost posibilă finalizarea cererii. (Eroare %1)', + Errors : + { + 10 : 'Comandă invalidă.', + 11 : 'Tipul de resursă nu a fost specificat în cerere.', + 12 : 'Tipul de resursă cerut nu este valid.', + 102 : 'Nume fișier sau nume dosar invalid.', + 103 : 'Nu a fost posibiliă finalizarea cererii din cauza restricțiilor de autorizare.', + 104 : 'Nu a fost posibiliă finalizarea cererii din cauza restricțiilor de permisiune la sistemul de fișiere.', + 105 : 'Extensie fișier invalidă.', + 109 : 'Cerere invalidă.', + 110 : 'Eroare necunoscută.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Există deja un fișier sau un dosar cu același nume.', + 116 : 'Dosar negăsit. Te rog împrospătează și încearcă din nou.', + 117 : 'Fișier negăsit. Te rog împrospătează lista de fișiere și încearcă din nou.', + 118 : 'Calea sursei și a țintei sunt egale.', + 201 : 'Un fișier cu același nume este deja disponibil. Fișierul încărcat a fost redenumit cu "%1".', + 202 : 'Fișier invalid.', + 203 : 'Fișier invalid. Mărimea fișierului este prea mare.', + 204 : 'Fișierul încărcat este corupt.', + 205 : 'Niciun dosar temporar nu este disponibil pentru încărcarea pe server.', + 206 : 'Încărcare anulată din motive de securitate. Fișierul conține date asemănătoare cu HTML.', + 207 : 'Fișierul încărcat a fost redenumit cu "%1".', + 300 : 'Mutare fișier(e) eșuată.', + 301 : 'Copiere fișier(e) eșuată.', + 500 : 'Browser-ul de fișiere este dezactivat din motive de securitate. Te rog contactează administratorul de sistem și verifică configurarea de fișiere CKFinder.', + 501 : 'Funcționalitatea de creat thumbnails este dezactivată.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Numele fișierului nu poate fi gol.', + FileExists : 'Fișierul %s există deja.', + FolderEmpty : 'Numele dosarului nu poate fi gol.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Numele fișierului nu poate conține niciunul din următoarele caractere: \n\\ / : * ? " < > |', + FolderInvChar : 'Numele dosarului nu poate conține niciunul din următoarele caractere: \n\\ / : * ? " < > |', + + PopupBlockView : 'Nu a fost posibilă deschiderea fișierului într-o fereastră nouă. Te rugăm să configurezi browser-ul și să dezactivezi toate popup-urile blocate pentru acest site.', + XmlError : 'Nu a fost posibilă încărcarea în mod corespunzător a răspunsului XML de pe serverul web.', + XmlEmpty : 'Nu a fost posibilă încărcarea răspunsului XML de pe serverul web. Serverul a returnat un răspuns gol.', + XmlRawResponse : 'Răspuns brut de la server: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Redimensionează %s', + sizeTooBig : 'Nu se pot seta înălțimea sau lățimea unei imagini la o valoare mai mare decât dimesiunea originală (%size).', + resizeSuccess : 'Imagine redimensionată cu succes.', + thumbnailNew : 'Crează un thumbnail nou', + thumbnailSmall : 'Mic (%s)', + thumbnailMedium : 'Mediu (%s)', + thumbnailLarge : 'Mare (%s)', + newSize : 'Setează o dimensiune nouă', + width : 'Lățime', + height : 'Înălțime', + invalidHeight : 'Înălțime invalidă.', + invalidWidth : 'Lățime invalidă.', + invalidName : 'Nume fișier invalid.', + newImage : 'Creează o imagine nouă', + noExtensionChange : 'Extensia fișierului nu poate fi schimbată.', + imageSmall : 'Imaginea sursă este prea mică.', + contextMenuName : 'Redimensionează', + lockRatio : 'Blochează raport', + resetSize : 'Resetează dimensiunea' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Salvează', + fileOpenError : 'Fișierul nu a putut fi deschis.', + fileSaveSuccess : 'Fișier salvat cu succes.', + contextMenuName : 'Editează', + loadingFile : 'Încărcare fișier, te rog așteaptă...' + }, + + Maximize : + { + maximize : 'Maximizare', + minimize : 'Minimizare' + }, + + Gallery : + { + current : 'Imaginea {current} din {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Căutare' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ru.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ru.js new file mode 100644 index 0000000..32960a2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/ru.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Russian + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['ru'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, недоступно', + confirmCancel : 'Внесенные вами изменения будут утеряны. Вы уверены?', + ok : 'OK', + cancel : 'Отмена', + confirmationTitle : 'Подтверждение', + messageTitle : 'Информация', + inputTitle : 'Вопрос', + undo : 'Отменить', + redo : 'Повторить', + skip : 'Пропустить', + skipAll : 'Пропустить все', + makeDecision : 'Что следует сделать?', + rememberDecision: 'Запомнить мой выбор' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'ru', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'dd.mm.yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Папки', + FolderLoading : 'Загрузка...', + FolderNew : 'Пожалуйста, введите новое имя папки: ', + FolderRename : 'Пожалуйста, введите новое имя папки: ', + FolderDelete : 'Вы уверены, что хотите удалить папку "%1"?', + FolderRenaming : ' (Переименовываю...)', + FolderDeleting : ' (Удаляю...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Пожалуйста, введите новое имя файла: ', + FileRenameExt : 'Вы уверены, что хотите изменить расширение файла? Файл может стать недоступным.', + FileRenaming : 'Переименовываю...', + FileDelete : 'Вы уверены, что хотите удалить файл "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Загрузка...', + FilesEmpty : 'Пустая папка', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Корзина', + BasketClear : 'Очистить корзину', + BasketRemove : 'Убрать из корзины', + BasketOpenFolder : 'Перейти в папку этого файла', + BasketTruncateConfirm : 'Вы точно хотите очистить корзину?', + BasketRemoveConfirm : 'Вы точно хотите убрать файл "%1" из корзины?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'В корзине пока нет файлов, добавьте новые с помощью драг-н-дропа (перетащите файл в корзину).', + BasketCopyFilesHere : 'Скопировать файл из корзины', + BasketMoveFilesHere : 'Переместить файл из корзины', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Загрузить файл', + UploadTip : 'Загрузить новый файл', + Refresh : 'Обновить список', + Settings : 'Настройка', + Help : 'Помощь', + HelpTip : 'Помощь', + + // Context Menus + Select : 'Выбрать', + SelectThumbnail : 'Выбрать миниатюру', + View : 'Посмотреть', + Download : 'Сохранить', + + NewSubFolder : 'Новая папка', + Rename : 'Переименовать', + Delete : 'Удалить', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Копировать', + MoveDragDrop : 'Переместить', + + // Dialogs + RenameDlgTitle : 'Переименовать', + NewNameDlgTitle : 'Новое имя', + FileExistsDlgTitle : 'Файл уже существует', + SysErrorDlgTitle : 'Системная ошибка', + + FileOverwrite : 'Заменить файл', + FileAutorename : 'Автоматически переименовывать', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'ОК', + CancelBtn : 'Отмена', + CloseBtn : 'Закрыть', + + // Upload Panel + UploadTitle : 'Загрузить новый файл', + UploadSelectLbl : 'Выбрать файл для загрузки', + UploadProgressLbl : '(Загрузка в процессе, пожалуйста подождите...)', + UploadBtn : 'Загрузить выбранный файл', + UploadBtnCancel : 'Отмена', + + UploadNoFileMsg : 'Пожалуйста, выберите файл на вашем компьютере.', + UploadNoFolder : 'Пожалуйста, выберите папку, в которую вы хотите загрузить файл.', + UploadNoPerms : 'Загрузка файлов запрещена.', + UploadUnknError : 'Ошибка при передаче файла.', + UploadExtIncorrect : 'В эту папку нельзя загружать файлы с таким расширением.', + + // Flash Uploads + UploadLabel : 'Файлы для загрузки', + UploadTotalFiles : 'Всего файлов:', + UploadTotalSize : 'Общий размер:', + UploadSend : 'Загрузить файл', + UploadAddFiles : 'Добавить файлы', + UploadClearFiles : 'Очистить', + UploadCancel : 'Отменить загрузку', + UploadRemove : 'Убрать', + UploadRemoveTip : 'Убрать !f', + UploadUploaded : 'Загружено !n%', + UploadProcessing : 'Загружаю...', + + // Settings Panel + SetTitle : 'Настройка', + SetView : 'Внешний вид:', + SetViewThumb : 'Миниатюры', + SetViewList : 'Список', + SetDisplay : 'Показывать:', + SetDisplayName : 'Имя файла', + SetDisplayDate : 'Дата', + SetDisplaySize : 'Размер файла', + SetSort : 'Сортировка:', + SetSortName : 'по имени файла', + SetSortDate : 'по дате', + SetSortSize : 'по размеру', + SetSortExtension : 'по расширению', + + // Status Bar + FilesCountEmpty : '<Пустая папка>', + FilesCountOne : '1 файл', + FilesCountMany : '%1 файлов', + + // Size and Speed + Kb : '%1 KБ', + Mb : '%1 MB', // MISSING + Gb : '%1 GB', // MISSING + SizePerSecond : '%1/s', // MISSING + + // Connector Error Messages. + ErrorUnknown : 'Невозможно завершить запрос. (Ошибка %1)', + Errors : + { + 10 : 'Неверная команда.', + 11 : 'Тип ресурса не указан в запросе.', + 12 : 'Неверный запрошенный тип ресурса.', + 102 : 'Неверное имя файла или папки.', + 103 : 'Невозможно завершить запрос из-за ограничений авторизации.', + 104 : 'Невозможно завершить запрос из-за ограничения разрешений файловой системы.', + 105 : 'Неверное расширение файла.', + 109 : 'Неверный запрос.', + 110 : 'Неизвестная ошибка.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Файл или папка с таким именем уже существует.', + 116 : 'Папка не найдена. Пожалуйста, обновите вид папок и попробуйте еще раз.', + 117 : 'Файл не найден. Пожалуйста, обновите список файлов и попробуйте еще раз.', + 118 : 'Исходное расположение файла совпадает с указанным.', + 201 : 'Файл с таким именем уже существует. Загруженный файл был переименован в "%1".', + 202 : 'Неверный файл.', + 203 : 'Неверный файл. Размер файла слишком большой.', + 204 : 'Загруженный файл поврежден.', + 205 : 'Недоступна временная папка для загрузки файлов на сервер.', + 206 : 'Загрузка отменена из-за соображений безопасности. Файл содержит похожие на HTML данные.', + 207 : 'Загруженный файл был переименован в "%1".', + 300 : 'Произошла ошибка при перемещении файла(ов).', + 301 : 'Произошла ошибка при копировании файла(ов).', + 500 : 'Браузер файлов отключен из-за соображений безопасности. Пожалуйста, сообщите вашему системному администратру и проверьте конфигурационный файл CKFinder.', + 501 : 'Поддержка миниатюр отключена.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Имя файла не может быть пустым.', + FileExists : 'Файл %s уже существует.', + FolderEmpty : 'Имя папки не может быть пустым.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Имя файла не может содержать любой из перечисленных символов: \n\\ / : * ? " < > |', + FolderInvChar : 'Имя папки не может содержать любой из перечисленных символов: \n\\ / : * ? " < > |', + + PopupBlockView : 'Невозможно открыть файл в новом окне. Пожалуйста, проверьте настройки браузера и отключите блокировку всплывающих окон для этого сайта.', + XmlError : 'Ошибка при разборе XML-ответа сервера.', + XmlEmpty : 'Невозможно прочитать XML-ответ сервера, получена пустая строка.', + XmlRawResponse : 'Необработанный ответ сервера: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Изменить размеры %s', + sizeTooBig : 'Нельзя указывать размеры больше, чем у оригинального файла (%size).', + resizeSuccess : 'Размеры успешно изменены.', + thumbnailNew : 'Создать миниатюру(ы)', + thumbnailSmall : 'Маленькая (%s)', + thumbnailMedium : 'Средняя (%s)', + thumbnailLarge : 'Большая (%s)', + newSize : 'Установить новые размеры', + width : 'Ширина', + height : 'Высота', + invalidHeight : 'Высота должна быть числом больше нуля.', + invalidWidth : 'Ширина должна быть числом больше нуля.', + invalidName : 'Неверное имя файла.', + newImage : 'Сохранить как новый файл', + noExtensionChange : 'Не удалось поменять расширение файла.', + imageSmall : 'Исходная картинка слишком маленькая.', + contextMenuName : 'Изменить размер', + lockRatio : 'Сохранять пропорции', + resetSize : 'Вернуть обычные размеры' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Сохранить', + fileOpenError : 'Не удалось открыть файл.', + fileSaveSuccess : 'Файл успешно сохранен.', + contextMenuName : 'Редактировать', + loadingFile : 'Файл загружается, пожалуйста подождите...' + }, + + Maximize : + { + maximize : 'Развернуть', + minimize : 'Свернуть' + }, + + Gallery : + { + current : 'Image {current} of {total}' // MISSING + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Поиск' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sk.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sk.js new file mode 100644 index 0000000..eb915fe --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sk.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Slovak + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['sk'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, nedostupné', + confirmCancel : 'Niektoré možnosti boli zmenené. Naozaj chcete zavrieť okno?', + ok : 'OK', + cancel : 'Zrušiť', + confirmationTitle : 'Potvrdenie', + messageTitle : 'Informácia', + inputTitle : 'Otázka', + undo : 'Späť', + redo : 'Znovu', + skip : 'Preskočiť', + skipAll : 'Preskočiť všetko', + makeDecision : 'Aký úkon sa má vykonať?', + rememberDecision: 'Pamätať si rozhodnutie' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'sk', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'mm/dd/yyyy HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Adresáre', + FolderLoading : 'Nahrávam...', + FolderNew : 'Zadajte prosím meno nového adresára: ', + FolderRename : 'Zadajte prosím meno nového adresára: ', + FolderDelete : 'Skutočne zmazať adresár "%1"?', + FolderRenaming : ' (Prebieha premenovanie adresára...)', + FolderDeleting : ' (Prebieha zmazanie adresára...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Zadajte prosím meno nového súboru: ', + FileRenameExt : 'Skutočne chcete zmeniť príponu súboru? Upozornenie: zmenou prípony sa súbor môže stať nepoužiteľným, pokiaľ prípona nie je podporovaná.', + FileRenaming : 'Prebieha premenovanie súboru...', + FileDelete : 'Skutočne chcete odstrániť súbor "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Nahrávam...', + FilesEmpty : 'Adresár je prázdny.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Košík', + BasketClear : 'Vyprázdniť košík', + BasketRemove : 'Odstrániť z košíka', + BasketOpenFolder : 'Otvoriť nadradený adresár', + BasketTruncateConfirm : 'Naozaj chcete odstrániť všetky súbory z košíka?', + BasketRemoveConfirm : 'Naozaj chcete odstrániť súbor "%1" z košíka?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'V košíku nie sú žiadne súbory, potiahnite a vložte nejaký.', + BasketCopyFilesHere : 'Prekopírovať súbory z košíka', + BasketMoveFilesHere : 'Presunúť súbory z košíka', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Prekopírovať na server (Upload)', + UploadTip : 'Prekopírovať nový súbor', + Refresh : 'Znovunačítať (Refresh)', + Settings : 'Nastavenia', + Help : 'Pomoc', + HelpTip : 'Pomoc', + + // Context Menus + Select : 'Vybrať', + SelectThumbnail : 'Zvoľte miniatúru', + View : 'Náhľad', + Download : 'Stiahnuť', + + NewSubFolder : 'Nový podadresár', + Rename : 'Premenovať', + Delete : 'Zmazať', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Prekopírovať sem', + MoveDragDrop : 'Presunúť sem', + + // Dialogs + RenameDlgTitle : 'Premenovať', + NewNameDlgTitle : 'Nové meno', + FileExistsDlgTitle : 'Súbor už existuje', + SysErrorDlgTitle : 'Systémová chyba', + + FileOverwrite : 'Prepísať', + FileAutorename : 'Auto-premenovanie', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Zrušiť', + CloseBtn : 'Zatvoriť', + + // Upload Panel + UploadTitle : 'Nahrať nový súbor', + UploadSelectLbl : 'Vyberte súbor, ktorý chcete prekopírovať na server', + UploadProgressLbl : '(Prebieha kopírovanie, čakajte prosím...)', + UploadBtn : 'Prekopírovať vybratý súbor', + UploadBtnCancel : 'Zrušiť', + + UploadNoFileMsg : 'Vyberte prosím súbor na Vašom počítači!', + UploadNoFolder : 'Pred náhrávaním zvoľte adresár, prosím', + UploadNoPerms : 'Nahratie súboru nie je povolené.', + UploadUnknError : 'V priebehu posielania súboru sa vyskytla chyba.', + UploadExtIncorrect : 'V tomto adresári nie je povolený tento formát súboru.', + + // Flash Uploads + UploadLabel : 'Súbory k nahratiu', + UploadTotalFiles : 'Všetky súbory:', + UploadTotalSize : 'Celková veľkosť:', + UploadSend : 'Prekopírovať na server', + UploadAddFiles : 'Pridať súbory', + UploadClearFiles : 'Vyčistiť súbory', + UploadCancel : 'Zrušiť nahratie', + UploadRemove : 'Odstrániť', + UploadRemoveTip : 'Odstrániť !f', + UploadUploaded : 'Nahraté !n%', + UploadProcessing : 'Spracováva sa ...', + + // Settings Panel + SetTitle : 'Nastavenia', + SetView : 'Náhľad:', + SetViewThumb : 'Miniobrázky', + SetViewList : 'Zoznam', + SetDisplay : 'Zobraziť:', + SetDisplayName : 'Názov súboru', + SetDisplayDate : 'Dátum', + SetDisplaySize : 'Veľkosť súboru', + SetSort : 'Zoradenie:', + SetSortName : 'podľa názvu súboru', + SetSortDate : 'podľa dátumu', + SetSortSize : 'podľa veľkosti', + SetSortExtension : 'podľa formátu', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 súbor', + FilesCountMany : '%1 súborov', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Server nemohol dokončiť spracovanie požiadavky. (Chyba %1)', + Errors : + { + 10 : 'Neplatný príkaz.', + 11 : 'V požiadavke nebol špecifikovaný typ súboru.', + 12 : 'Nepodporovaný typ súboru.', + 102 : 'Neplatný názov súboru alebo adresára.', + 103 : 'Nebolo možné dokončiť spracovanie požiadavky kvôli nepostačujúcej úrovni oprávnení.', + 104 : 'Nebolo možné dokončiť spracovanie požiadavky kvôli obmedzeniam v prístupových právach k súborom.', + 105 : 'Neplatná prípona súboru.', + 109 : 'Neplatná požiadavka.', + 110 : 'Neidentifikovaná chyba.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Zadaný súbor alebo adresár už existuje.', + 116 : 'Adresár nebol nájdený. Aktualizujte obsah adresára (Znovunačítať) a skúste znovu.', + 117 : 'Súbor nebol nájdený. Aktualizujte obsah adresára (Znovunačítať) a skúste znovu.', + 118 : 'Zdrojové a cieľové cesty sú rovnaké.', + 201 : 'Súbor so zadaným názvom už existuje. Prekopírovaný súbor bol premenovaný na "%1".', + 202 : 'Neplatný súbor.', + 203 : 'Neplatný súbor - súbor presahuje maximálnu povolenú veľkosť.', + 204 : 'Kopírovaný súbor je poškodený.', + 205 : 'Server nemá špecifikovaný dočasný adresár pre kopírované súbory.', + 206 : 'Kopírovanie prerušené kvôli nedostatočnému zabezpečeniu. Súbor obsahuje HTML data.', + 207 : 'Prekopírovaný súbor bol premenovaný na "%1".', + 300 : 'Presunutie súborov zlyhalo.', + 301 : 'Kopírovanie súborov zlyhalo.', + 500 : 'Prehliadanie súborov je zakázané kvôli bezpečnosti. Kontaktujte prosím administrátora a overte nastavenia v konfiguračnom súbore pre CKFinder.', + 501 : 'Momentálne nie je zapnutá podpora pre generáciu miniobrázkov.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Názov súboru nesmie byť prázdne.', + FileExists : 'Súbor %s už existuje.', + FolderEmpty : 'Názov adresára nesmie byť prázdny.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Súbor nesmie obsahovať žiadny z nasledujúcich znakov: \n\\ / : * ? " < > |', + FolderInvChar : 'Adresár nesmie obsahovať žiadny z nasledujúcich znakov: \n\\ / : * ? " < > |', + + PopupBlockView : 'Nebolo možné otvoriť súbor v novom okne. Overte nastavenia Vášho prehliadača a zakážte všetky blokovače popup okien pre túto webstránku.', + XmlError : 'Nebolo možné korektne načítať XML odozvu z web serveu.', + XmlEmpty : 'Nebolo možné korektne načítať XML odozvu z web serveu. Server vrátil prázdnu odpoveď (odozvu).', + XmlRawResponse : 'Neupravená odpoveď zo servera: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Zmeniť veľkosť %s', + sizeTooBig : 'Nie je možné nastaviť výšku alebo šírku obrázku na väčšie hodnoty ako originálnu veľkosť (%size).', + resizeSuccess : 'Zmena vľkosti obrázku bola úspešne vykonaná.', + thumbnailNew : 'Vytvoriť novú miniatúru obrázku', + thumbnailSmall : 'Malý (%s)', + thumbnailMedium : 'Stredný (%s)', + thumbnailLarge : 'Veľký (%s)', + newSize : 'Nastaviť novú veľkosť', + width : 'Šírka', + height : 'Výška', + invalidHeight : 'Neplatná výška.', + invalidWidth : 'Neplatná šírka.', + invalidName : 'Neplatný názov súboru.', + newImage : 'Vytvoriť nový obrázok', + noExtensionChange : 'Nie je možné zmeniť formát súboru.', + imageSmall : 'Zdrojový obrázok je veľmi malý.', + contextMenuName : 'Zmeniť veľkosť', + lockRatio : 'Zámok', + resetSize : 'Pôvodná veľkosť' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Uložiť', + fileOpenError : 'Nie je možné otvoriť súbor.', + fileSaveSuccess : 'Súbor bol úspešne uložený.', + contextMenuName : 'Upraviť', + loadingFile : 'Súbor sa nahráva, prosím čakať...' + }, + + Maximize : + { + maximize : 'Maximalizovať', + minimize : 'Minimalizovať' + }, + + Gallery : + { + current : 'Obrázok {current} z {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Hľadať' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sl.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sl.js new file mode 100644 index 0000000..427d874 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sl.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** +* @fileOverview Defines the {@link CKFinder.lang} object for the Slovenian +* language. +*/ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['sl'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, nedostopen', + confirmCancel : 'Nekatere opcije so bile spremenjene. Ali res želite zapreti pogovorno okno?', + ok : 'Potrdi', + cancel : 'Prekliči', + confirmationTitle : 'Potrditev', + messageTitle : 'Informacija', + inputTitle : 'Vprašanje', + undo : 'Razveljavi', + redo : 'Obnovi', + skip : 'Preskoči', + skipAll : 'Preskoči vse', + makeDecision : 'Katera aktivnost naj se izvede?', + rememberDecision: 'Zapomni si mojo izbiro' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'sl', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'd.m.yyyy H:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Mape', + FolderLoading : 'Nalagam...', + FolderNew : 'Vnesite ime za novo mapo: ', + FolderRename : 'Vnesite ime nove mape: ', + FolderDelete : 'Ali ste prepričani, da želite zbrisati mapo "%1"?', + FolderRenaming : ' (Preimenujem...)', + FolderDeleting : ' (Brišem...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Vnesite novo ime datoteke: ', + FileRenameExt : 'Ali ste prepričani, da želite spremeniti končnico datoteke? Možno je, da potem datoteka ne bo uporabna.', + FileRenaming : 'Preimenujem...', + FileDelete : 'Ali ste prepričani, da želite izbrisati datoteko "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Nalagam...', + FilesEmpty : 'Prazna mapa', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Koš', + BasketClear : 'Izprazni koš', + BasketRemove : 'Odstrani iz koša', + BasketOpenFolder : 'Odpri izvorno mapo', + BasketTruncateConfirm : 'Ali res želite odstraniti vse datoteke iz koša?', + BasketRemoveConfirm : 'Ali res želite odstraniti datoteko "%1" iz koša?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'V košu ni datotek. Lahko jih povlečete in spustite.', + BasketCopyFilesHere : 'Kopiraj datoteke iz koša', + BasketMoveFilesHere : 'Premakni datoteke iz koša', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Naloži na strežnik', + UploadTip : 'Naloži novo datoteko na strežnik', + Refresh : 'Osveži', + Settings : 'Nastavitve', + Help : 'Pomoč', + HelpTip : 'Pomoč', + + // Context Menus + Select : 'Izberi', + SelectThumbnail : 'Izberi malo sličico (predogled)', + View : 'Predogled', + Download : 'Prenesi na svoj računalnik', + + NewSubFolder : 'Nova podmapa', + Rename : 'Preimenuj', + Delete : 'Zbriši', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Kopiraj', + MoveDragDrop : 'Premakni', + + // Dialogs + RenameDlgTitle : 'Preimenuj', + NewNameDlgTitle : 'Novo ime', + FileExistsDlgTitle : 'Datoteka že obstaja', + SysErrorDlgTitle : 'Sistemska napaka', + + FileOverwrite : 'Prepiši', + FileAutorename : 'Avtomatsko preimenuj', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'Potrdi', + CancelBtn : 'Prekliči', + CloseBtn : 'Zapri', + + // Upload Panel + UploadTitle : 'Naloži novo datoteko na strežnik', + UploadSelectLbl : 'Izberi datoteko za prenos na strežnik', + UploadProgressLbl : '(Prenos na strežnik poteka, prosimo počakajte...)', + UploadBtn : 'Prenesi izbrano datoteko na strežnik', + UploadBtnCancel : 'Prekliči', + + UploadNoFileMsg : 'Prosimo izberite datoteko iz svojega računalnika za prenos na strežnik.', + UploadNoFolder : 'Izberite mapo v katero se bo naložilo datoteko!', + UploadNoPerms : 'Nalaganje datotek ni dovoljeno.', + UploadUnknError : 'Napaka pri pošiljanju datoteke.', + UploadExtIncorrect : 'V tej mapi ta vrsta datoteke ni dovoljena.', + + // Flash Uploads + UploadLabel : 'Datoteke za prenos', + UploadTotalFiles : 'Skupaj datotek:', + UploadTotalSize : 'Skupaj velikost:', + UploadSend : 'Naloži na strežnik', + UploadAddFiles : 'Dodaj datoteke', + UploadClearFiles : 'Počisti datoteke', + UploadCancel : 'Prekliči prenos', + UploadRemove : 'Odstrani', + UploadRemoveTip : 'Odstrani !f', + UploadUploaded : 'Prenešeno !n%', + UploadProcessing : 'Delam...', + + // Settings Panel + SetTitle : 'Nastavitve', + SetView : 'Pogled:', + SetViewThumb : 'majhne sličice', + SetViewList : 'seznam', + SetDisplay : 'Prikaz:', + SetDisplayName : 'ime datoteke', + SetDisplayDate : 'datum', + SetDisplaySize : 'velikost datoteke', + SetSort : 'Razvrščanje:', + SetSortName : 'po imenu datoteke', + SetSortDate : 'po datumu', + SetSortSize : 'po velikosti', + SetSortExtension : 'po končnici', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 datoteka', + FilesCountMany : '%1 datotek(e)', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Prišlo je do napake. (Napaka %1)', + Errors : + { + 10 : 'Napačen ukaz.', + 11 : 'V poizvedbi ni bil jasen tip (resource type).', + 12 : 'Tip datoteke ni primeren.', + 102 : 'Napačno ime mape ali datoteke.', + 103 : 'Vašega ukaza se ne da izvesti zaradi težav z avtorizacijo.', + 104 : 'Vašega ukaza se ne da izvesti zaradi težav z nastavitvami pravic v datotečnem sistemu.', + 105 : 'Napačna končnica datoteke.', + 109 : 'Napačna zahteva.', + 110 : 'Neznana napaka.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Datoteka ali mapa s tem imenom že obstaja.', + 116 : 'Mapa ni najdena. Prosimo osvežite okno in poskusite znova.', + 117 : 'Datoteka ni najdena. Prosimo osvežite seznam datotek in poskusite znova.', + 118 : 'Začetna in končna pot je ista.', + 201 : 'Datoteka z istim imenom že obstaja. Naložena datoteka je bila preimenovana v "%1".', + 202 : 'Neprimerna datoteka.', + 203 : 'Datoteka je prevelika in zasede preveč prostora.', + 204 : 'Naložena datoteka je okvarjena.', + 205 : 'Na strežniku ni na voljo začasna mapa za prenos datotek.', + 206 : 'Nalaganje je bilo prekinjeno zaradi varnostnih razlogov. Datoteka vsebuje podatke, ki spominjajo na HTML kodo.', + 207 : 'Naložena datoteka je bila preimenovana v "%1".', + 300 : 'Premikanje datotek(e) ni uspelo.', + 301 : 'Kopiranje datotek(e) ni uspelo.', + 500 : 'Brskalnik je onemogočen zaradi varnostnih razlogov. Prosimo kontaktirajte upravljalca spletnih strani.', + 501 : 'Ni podpore za majhne sličice (predogled).' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Ime datoteke ne more biti prazno.', + FileExists : 'Datoteka %s že obstaja.', + FolderEmpty : 'Mapa ne more biti prazna.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Ime datoteke ne sme vsebovati naslednjih znakov: \n\\ / : * ? " < > |', + FolderInvChar : 'Ime mape ne sme vsebovati naslednjih znakov: \n\\ / : * ? " < > |', + + PopupBlockView : 'Datoteke ni možno odpreti v novem oknu. Prosimo nastavite svoj brskalnik tako, da bo dopuščal odpiranje oken (popups) oz. izklopite filtre za blokado odpiranja oken.', + XmlError : 'Nalaganje XML odgovora iz strežnika ni uspelo.', + XmlEmpty : 'Nalaganje XML odgovora iz strežnika ni uspelo. Strežnik je vrnil prazno sporočilo.', + XmlRawResponse : 'Surov odgovor iz strežnika je: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Spremeni velikost slike %s', + sizeTooBig : 'Širina ali višina slike ne moreta biti večji kot je originalna velikost (%size).', + resizeSuccess : 'Velikost slike je bila uspešno spremenjena.', + thumbnailNew : 'Kreiraj novo majhno sličico', + thumbnailSmall : 'majhna (%s)', + thumbnailMedium : 'srednja (%s)', + thumbnailLarge : 'velika (%s)', + newSize : 'Določite novo velikost', + width : 'Širina', + height : 'Višina', + invalidHeight : 'Nepravilna višina.', + invalidWidth : 'Nepravilna širina.', + invalidName : 'Nepravilno ime datoteke.', + newImage : 'Kreiraj novo sliko', + noExtensionChange : 'Končnica datoteke se ne more spremeniti.', + imageSmall : 'Izvorna slika je premajhna.', + contextMenuName : 'Spremeni velikost', + lockRatio : 'Zakleni razmerje', + resetSize : 'Ponastavi velikost' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Shrani', + fileOpenError : 'Datoteke ni mogoče odpreti.', + fileSaveSuccess : 'Datoteka je bila shranjena.', + contextMenuName : 'Uredi', + loadingFile : 'Nalaganje datoteke, prosimo počakajte ...' + }, + + Maximize : + { + maximize : 'Maksimiraj', + minimize : 'Minimiraj' + }, + + Gallery : + { + current : 'Slika {current} od {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Iskanje' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sr.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sr.js new file mode 100644 index 0000000..51acdbc --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sr.js @@ -0,0 +1,313 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Serbian + * Translation for the Serbian language: Goran Markovic, University Computer Center of Banja Luka + * + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['sr'] = +{ + appTitle : 'Датотеке', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, недоступно', + confirmCancel : 'Неке од опција су промјењене. Да ли сте сигурни да желите затворити прозор??', + ok : 'У реду', + cancel : 'Поништи', + confirmationTitle : 'Потврда', + messageTitle : 'Информација', + inputTitle : 'Питање', + undo : 'Поништи', + redo : 'Преуреди', + skip : 'Прескочи', + skipAll : 'Прескочи све', + makeDecision : 'Шта би требали направити?', + rememberDecision: 'Запамти мој избор' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'sr', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'd.m.yyyy HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Фасцикле', + FolderLoading : 'Учитавам...', + FolderNew : 'Унесите ново име фасцикле: ', + FolderRename : 'Унесите ново име фасцикле: ', + FolderDelete : 'Да ли сте сигурни да желите обрисати фасциклу "%1"?', + FolderRenaming : ' (Промјена назива фасцикле...)', + FolderDeleting : ' (Брисање...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Унесите нови назив датотеке: ', + FileRenameExt : 'Да ли сте сигурни да желите промјенити тип датотеке? Датотека може постати неискористива.', + FileRenaming : 'Промјена назива датотеке...', + FileDelete : 'Да ли сте сигурни да желите обрисати датотеку "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Учитавам...', + FilesEmpty : 'Фасцикла је празна.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Канта', + BasketClear : 'Испразни канту', + BasketRemove : 'Уклони из канте', + BasketOpenFolder : 'Отвори надређену фасциклу', + BasketTruncateConfirm : 'Да ли сте сигурни да желите обрисати све датотеке из канте?', + BasketRemoveConfirm : 'Да ли сте сигурни да желите обрисати датотеку "%1" из канте?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Ниједна датотека није пронађена, додајте коју.', + BasketCopyFilesHere : 'Копирај датотеке из канте', + BasketMoveFilesHere : 'Премјести датотеке из канте', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Отпреми', + UploadTip : 'Отпреми нове датотеке на сервер', + Refresh : 'Освјежи', + Settings : 'Подешавања', + Help : 'Помоћ', + HelpTip : 'Помоћ', + + // Context Menus + Select : 'Одабери', + SelectThumbnail : 'Одабери мању слику', + View : 'Погледај', + Download : 'Преузми', + + NewSubFolder : 'Нова подфасцикла', + Rename : 'Промјени назив', + Delete : 'Обриши', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Копирај датотеку овдје', + MoveDragDrop : 'Премјести датотеку овдје', + + // Dialogs + RenameDlgTitle : 'Промјени назив', + NewNameDlgTitle : 'Нови назив', + FileExistsDlgTitle : 'Датотека већ постоји', + SysErrorDlgTitle : 'Грешка система', + + FileOverwrite : 'Препиши', + FileAutorename : 'Аутоматска промјена назива', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'У реду', + CancelBtn : 'Поништи', + CloseBtn : 'Затвори', + + // Upload Panel + UploadTitle : 'Отпреми нову датотеку', + UploadSelectLbl : 'Одабери датотеку за отпремање', + UploadProgressLbl : '(Слање у току, молимо сачекајте...)', + UploadBtn : 'Отпреми одабрану датотеку', + UploadBtnCancel : 'Поништи', + + UploadNoFileMsg : 'Одаберите датотеку на Вашем рачунару.', + UploadNoFolder : 'Одаберите фасцикле прије отпремања.', + UploadNoPerms : 'Отпремање датотеке није дозвољено.', + UploadUnknError : 'Грешка приликом отпремања датотеке.', + UploadExtIncorrect : 'Тип датотеке није дозвољен.', + + // Flash Uploads + UploadLabel : 'Датотека за отпремање:', + UploadTotalFiles : 'Укупно датотека:', + UploadTotalSize : 'Укупна величина:', + UploadSend : 'Отпреми', + UploadAddFiles : 'Додај датотеке', + UploadClearFiles : 'Избаци датотеке', + UploadCancel : 'Поништи отпремање', + UploadRemove : 'Уклони', + UploadRemoveTip : 'Уклони !f', + UploadUploaded : 'Послато !n%', + UploadProcessing : 'Обрада у току...', + + // Settings Panel + SetTitle : 'Подешавања', + SetView : 'Преглед:', + SetViewThumb : 'Мала слика', + SetViewList : 'Листа', + SetDisplay : 'Приказ:', + SetDisplayName : 'Назив датотеке', + SetDisplayDate : 'Датум', + SetDisplaySize : 'Величина датотеке', + SetSort : 'Сортирање:', + SetSortName : 'по називу', + SetSortDate : 'по датуму', + SetSortSize : 'по величини', + SetSortExtension : 'по врсти датотеке', + + // Status Bar + FilesCountEmpty : '<Празна фасцикла>', + FilesCountOne : '1 датотека', + FilesCountMany : '%1 датотека(е)', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Није могуће завршити захтјев. (Грешка %1)', + Errors : + { + 10 : 'Непозната наредба.', + 11 : 'Није наведена врста у захтјеву.', + 12 : 'Затражена врста није важећа.', + 102 : 'Неисправан назив датотеке или фасцикле.', + 103 : 'Није могуће извршити захтјев због ограничења приступа.', + 104 : 'Није могуће извршити захтјев због ограничења поставке система.', + 105 : 'Недозвољена врста датотеке.', + 109 : 'Недозвољен захтјев.', + 110 : 'Непозната грешка.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Датотека или фасцикла с истим називом већ постоји.', + 116 : 'Фасцикла није пронађена. Освјежите страницу и покушајте поново.', + 117 : 'Датотека није пронађена. Освјежите листу датотека и покушајте поново.', + 118 : 'Путања извора и одредишта су исте.', + 201 : 'Датотека с истим називом већ постоји. Отпремљена датотека је промјењена у "%1".', + 202 : 'Неисправна датотека.', + 203 : 'Неисправна датотека. Величина датотеке је превелика.', + 204 : 'Отпремљена датотека је неисправна.', + 205 : 'Не постоји привремена фасцикла за отпремање на серверe.', + 206 : 'Слање је поништено због сигурносних поставки. Назив датотеке садржи HTML податке.', + 207 : 'Отпремљена датотека је промјењена у "%1".', + 300 : 'Премјештање датотеке(а) није успјело.', + 301 : 'Копирање датотеке(а) није успјело.', + 500 : 'Претраживање датотека није дозвољено из сигурносних разлога. Молимо контактирајте администратора система како би провјерили поставке CKFinder конфигурационе датотеке.', + 501 : 'Thumbnail подршка није омогућена.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Назив датотеке не смије бити празан.', + FileExists : 'Датотека %s већ постоји.', + FolderEmpty : 'Назив фасцикле не смије бити празан.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Назив датотеке не смије садржавати нити један од сљедећих знакова: \n\\ / : * ? " < > |', + FolderInvChar : 'Назив фасцикле не смије садржавати нити један од сљедећих знакова: \n\\ / : * ? " < > |', + + PopupBlockView : 'Није могуће одтворити датотеку у новом прозору. Промјените подешавања свог интернет претраживача и искључите све popup блокере за ове web странице.', + XmlError : 'Није могуће учитати XML одговор од web сервера.', + XmlEmpty : 'Није могуће учитати XML одговор од web сервера. Сервер је вратио празан одговор.', + XmlRawResponse : 'Одговор сервера: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Промијени величину %s', + sizeTooBig : 'Није могуће поставити величину већу од оригинала (%size).', + resizeSuccess : 'Слика је успјешно промјењена.', + thumbnailNew : 'Направи малу слику', + thumbnailSmall : 'Мала (%s)', + thumbnailMedium : 'Средња (%s)', + thumbnailLarge : 'Велика (%s)', + newSize : 'Постави нову величину', + width : 'Ширина', + height : 'Висина', + invalidHeight : 'Неисправна висина.', + invalidWidth : 'Неисправна ширина.', + invalidName : 'Неисправан назив датотеке.', + newImage : 'Направи нову слику', + noExtensionChange : 'Тип датотеке се не смије мијењати.', + imageSmall : 'Изворна слика је премала.', + contextMenuName : 'Промијени величину', + lockRatio : 'Закључај односе', + resetSize : 'Врати величину' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Сачувај', + fileOpenError : 'Није могуће отворити датотеку.', + fileSaveSuccess : 'Датотека је успјешно сачувана.', + contextMenuName : 'Промјени', + loadingFile : 'Учитавање, молимо причекајте...' + }, + + Maximize : + { + maximize : 'Повећај', + minimize : 'Смањи' + }, + + Gallery : + { + current : 'Слика {current} од {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Претрага' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sv.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sv.js new file mode 100644 index 0000000..b95c041 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/sv.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Swedish + * language. +*/ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['sv'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, Ej tillgänglig', + confirmCancel : 'Några av alternativen har ändrats. Är du säker på att du vill stänga dialogrutan?', + ok : 'OK', + cancel : 'Avbryt', + confirmationTitle : 'Bekräftelse', + messageTitle : 'Information', + inputTitle : 'Fråga', + undo : 'Ångra', + redo : 'Gör om', + skip : 'Hoppa över', + skipAll : 'Hoppa över alla', + makeDecision : 'Vilken åtgärd ska utföras?', + rememberDecision: 'Kom ihåg mitt val' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'sv', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'yyyy-mm-dd HH:MM', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : 'Mappar', + FolderLoading : 'Laddar...', + FolderNew : 'Skriv namnet på den nya mappen: ', + FolderRename : 'Skriv det nya namnet på mappen: ', + FolderDelete : 'Är du säker på att du vill radera mappen "%1"?', + FolderRenaming : ' (Byter mappens namn...)', + FolderDeleting : ' (Raderar...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Skriv det nya filnamnet: ', + FileRenameExt : 'Är du säker på att du vill ändra filändelsen? Filen kan bli oanvändbar.', + FileRenaming : 'Byter filnamn...', + FileDelete : 'Är du säker på att du vill radera filen "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Laddar...', + FilesEmpty : 'Mappen är tom.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Filkorg', + BasketClear : 'Rensa filkorgen', + BasketRemove : 'Ta bort från korgen', + BasketOpenFolder : 'Öppna överliggande mapp', + BasketTruncateConfirm : 'Vill du verkligen ta bort alla filer från korgen?', + BasketRemoveConfirm : 'Vill du verkligen ta bort filen "%1" från korgen?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Inga filer i korgen, dra och släpp några.', + BasketCopyFilesHere : 'Kopiera filer från korgen', + BasketMoveFilesHere : 'Flytta filer från korgen', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Ladda upp', + UploadTip : 'Ladda upp en ny fil', + Refresh : 'Uppdatera', + Settings : 'Inställningar', + Help : 'Hjälp', + HelpTip : 'Hjälp', + + // Context Menus + Select : 'Infoga bild', + SelectThumbnail : 'Infoga som tumnagel', + View : 'Visa', + Download : 'Ladda ner', + + NewSubFolder : 'Ny Undermapp', + Rename : 'Byt namn', + Delete : 'Radera', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Kopiera hit', + MoveDragDrop : 'Flytta hit', + + // Dialogs + RenameDlgTitle : 'Byt namn', + NewNameDlgTitle : 'Nytt namn', + FileExistsDlgTitle : 'Filen finns redan', + SysErrorDlgTitle : 'Systemfel', + + FileOverwrite : 'Skriv över', + FileAutorename : 'Auto-namnändring', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Avbryt', + CloseBtn : 'Stäng', + + // Upload Panel + UploadTitle : 'Ladda upp en ny fil', + UploadSelectLbl : 'Välj fil att ladda upp', + UploadProgressLbl : '(Laddar upp filen, var god vänta...)', + UploadBtn : 'Ladda upp den valda filen', + UploadBtnCancel : 'Avbryt', + + UploadNoFileMsg : 'Välj en fil från din dator.', + UploadNoFolder : 'Välj en mapp före uppladdning.', + UploadNoPerms : 'Filuppladdning ej tillåten.', + UploadUnknError : 'Fel vid filuppladdning.', + UploadExtIncorrect : 'Filändelsen är inte tillåten i denna mapp.', + + // Flash Uploads + UploadLabel : 'Filer att ladda upp', + UploadTotalFiles : 'Totalt antal filer:', + UploadTotalSize : 'Total storlek:', + UploadSend : 'Ladda upp', + UploadAddFiles : 'Lägg till filer', + UploadClearFiles : 'Rensa filer', + UploadCancel : 'Avbryt uppladdning', + UploadRemove : 'Ta bort', + UploadRemoveTip : 'Ta bort !f', + UploadUploaded : 'Uppladdat !n%', + UploadProcessing : 'Bearbetar...', + + // Settings Panel + SetTitle : 'Inställningar', + SetView : 'Visa:', + SetViewThumb : 'Tumnaglar', + SetViewList : 'Lista', + SetDisplay : 'Visa:', + SetDisplayName : 'Filnamn', + SetDisplayDate : 'Datum', + SetDisplaySize : 'Storlek', + SetSort : 'Sortering:', + SetSortName : 'Filnamn', + SetSortDate : 'Datum', + SetSortSize : 'Storlek', + SetSortExtension : 'Filändelse', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 fil', + FilesCountMany : '%1 filer', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Begäran kunde inte utföras eftersom ett fel uppstod. (Fel %1)', + Errors : + { + 10 : 'Ogiltig begäran.', + 11 : 'Resursens typ var inte specificerad i förfrågan.', + 12 : 'Den efterfrågade resurstypen är inte giltig.', + 102 : 'Ogiltigt fil- eller mappnamn.', + 103 : 'Begäran kunde inte utföras p.g.a. restriktioner av rättigheterna.', + 104 : 'Begäran kunde inte utföras p.g.a. restriktioner av rättigheter i filsystemet.', + 105 : 'Ogiltig filändelse.', + 109 : 'Ogiltig begäran.', + 110 : 'Okänt fel.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'En fil eller mapp med aktuellt namn finns redan.', + 116 : 'Mappen kunde inte hittas. Var god uppdatera sidan och försök igen.', + 117 : 'Filen kunde inte hittas. Var god uppdatera sidan och försök igen.', + 118 : 'Sökväg till källa och mål är identisk.', + 201 : 'En fil med aktuellt namn fanns redan. Den uppladdade filen har döpts om till "%1".', + 202 : 'Ogiltig fil.', + 203 : 'Ogiltig fil. Filen var för stor.', + 204 : 'Den uppladdade filen var korrupt.', + 205 : 'En tillfällig mapp för uppladdning är inte tillgänglig på servern.', + 206 : 'Uppladdningen stoppades av säkerhetsskäl. Filen innehåller HTML-liknande data.', + 207 : 'Den uppladdade filen har döpts om till "%1".', + 300 : 'Flytt av fil(er) misslyckades.', + 301 : 'Kopiering av fil(er) misslyckades.', + 500 : 'Filhanteraren har stoppats av säkerhetsskäl. Var god kontakta administratören för att kontrollera konfigurationsfilen för CKFinder.', + 501 : 'Stöd för tumnaglar har stängts av.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Filnamnet får inte vara tomt.', + FileExists : 'Filen %s finns redan.', + FolderEmpty : 'Mappens namn får inte vara tomt.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Filnamnet får inte innehålla något av följande tecken: \n\\ / : * ? " < > |', + FolderInvChar : 'Mappens namn får inte innehålla något av följande tecken: \n\\ / : * ? " < > |', + + PopupBlockView : 'Det gick inte att öppna filen i ett nytt fönster. Ändra inställningarna i din webbläsare så att den tillåter popup-fönster på den här webbplatsen.', + XmlError : 'Det gick inte att ladda XML-svaret från webbservern ordentligt.', + XmlEmpty : 'Det gick inte att ladda XML-svaret från webbservern. Servern returnerade ett tomt svar.', + XmlRawResponse : 'Svar från servern: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Storleksändra %s', + sizeTooBig : 'Bildens höjd eller bredd kan inte vara större än originalfilens storlek (%size).', + resizeSuccess : 'Storleksändring lyckades.', + thumbnailNew : 'Skapa en ny tumnagel', + thumbnailSmall : 'Liten (%s)', + thumbnailMedium : 'Mellan (%s)', + thumbnailLarge : 'Stor (%s)', + newSize : 'Välj en ny storlek', + width : 'Bredd', + height : 'Höjd', + invalidHeight : 'Ogiltig höjd.', + invalidWidth : 'Ogiltig bredd.', + invalidName : 'Ogiltigt filnamn.', + newImage : 'Skapa en ny bild', + noExtensionChange : 'Filändelsen kan inte ändras.', + imageSmall : 'Originalbilden är för liten.', + contextMenuName : 'Ändra storlek', + lockRatio : 'Lås höjd/bredd förhållanden', + resetSize : 'Återställ storlek' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Spara', + fileOpenError : 'Kan inte öppna filen.', + fileSaveSuccess : 'Filen sparades.', + contextMenuName : 'Redigera', + loadingFile : 'Laddar fil, var god vänta...' + }, + + Maximize : + { + maximize : 'Maximera', + minimize : 'Minimera' + }, + + Gallery : + { + current : 'Bild {current} av {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Sök' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/tr.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/tr.js new file mode 100644 index 0000000..f4b6df3 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/tr.js @@ -0,0 +1,315 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object, for the Turkish + * language. + * + * Turkish translation by Abdullah M CEYLAN a.k.a. Kenan Balamir. Updated. + * Günce BEKTAŞ update tr.js file and translate help folder. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['tr'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1 öğesi, mevcut değil', + confirmCancel : 'Bazı seçenekler değiştirildi. Pencereyi kapatmak istiyor musunuz?', + ok : 'Tamam', + cancel : 'Vazgeç', + confirmationTitle : 'Onay', + messageTitle : 'Bilgi', + inputTitle : 'Soru', + undo : 'Geri Al', + redo : 'Yinele', + skip : 'Atla', + skipAll : 'Tümünü Atla', + makeDecision : 'Hangi işlem yapılsın?', + rememberDecision: 'Kararımı hatırla' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'tr', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'd/m/yyyy h:MM aa', + DateAmPm : ['GN', 'GC'], + + // Folders + FoldersTitle : 'Klasörler', + FolderLoading : 'Yükleniyor...', + FolderNew : 'Lütfen yeni klasör adını yazın: ', + FolderRename : 'Lütfen yeni klasör adını yazın: ', + FolderDelete : '"%1" klasörünü silmek istediğinizden emin misiniz?', + FolderRenaming : ' (Yeniden adlandırılıyor...)', + FolderDeleting : ' (Siliniyor...)', + DestinationFolder : 'Hedef Klasör', + + // Files + FileRename : 'Lütfen yeni dosyanın adını yazın: ', + FileRenameExt : 'Dosya uzantısını değiştirmek istiyor musunuz? Bu, dosyayı kullanılamaz hale getirebilir.', + FileRenaming : 'Yeniden adlandırılıyor...', + FileDelete : '"%1" dosyasını silmek istediğinizden emin misiniz?', + FilesDelete : '%1 adet dosyayı silmek istediğinize emin misiniz?', + FilesLoading : 'Yükleniyor...', + FilesEmpty : 'Klasör boş', + DestinationFile : 'Hedef Dosya', + SkippedFiles : 'Atlanan dosyaların listesi:', + + // Basket + BasketFolder : 'Sepet', + BasketClear : 'Sepeti temizle', + BasketRemove : 'Sepetten sil', + BasketOpenFolder : 'Üst klasörü aç', + BasketTruncateConfirm : 'Sepetteki tüm dosyaları silmek istediğinizden emin misiniz?', + BasketRemoveConfirm : 'Sepetteki %1% dosyasını silmek istediğinizden emin misiniz?', + BasketRemoveConfirmMultiple : '%1 adet dosyayı sepetinizden çıkartmak istediğinize emin misiniz?', + BasketEmpty : 'Sepette hiç dosya yok, birkaç tane sürükleyip bırakabilirsiniz', + BasketCopyFilesHere : 'Sepetten Dosya Kopyala', + BasketMoveFilesHere : 'Sepetten Dosya Taşı', + + // Global messages + OperationCompletedSuccess : 'İşlem başarıyla tamamlandı.', + OperationCompletedErrors : 'İşlem hatalar olmasına karşın tamamlandı.', + FileError : '%s: %e', + + // Move and Copy files + MovedFilesNumber : 'Taşınan dosya sayısı: %s.', + CopiedFilesNumber : 'Kopyalanan dosya sayısı: %s.', + MoveFailedList : 'Taşınamayan dosyalar:
      %s', + CopyFailedList : 'Koplanamayan dosyalar:
      %s', + + // Toolbar Buttons (some used elsewhere) + Upload : 'Yükle', + UploadTip : 'Yeni Dosya Yükle', + Refresh : 'Yenile', + Settings : 'Ayarlar', + Help : 'Yardım', + HelpTip : 'Yardım', + + // Context Menus + Select : 'Seç', + SelectThumbnail : 'Önizleme Olarak Seç', + View : 'Görüntüle', + Download : 'İndir', + + NewSubFolder : 'Yeni Altklasör', + Rename : 'Yeniden Adlandır', + Delete : 'Sil', + DeleteFiles : 'Dosyaları sil', + + CopyDragDrop : 'Buraya kopyala', + MoveDragDrop : 'Buraya taşı', + + // Dialogs + RenameDlgTitle : 'Yeniden Adlandır', + NewNameDlgTitle : 'Yeni Adı', + FileExistsDlgTitle : 'Dosya zaten var', + SysErrorDlgTitle : 'Sistem hatası', + + FileOverwrite : 'Üzerine yaz', + FileAutorename : 'Oto-Yeniden Adlandır', + ManuallyRename : 'Elle isimlendir', + + // Generic + OkBtn : 'Tamam', + CancelBtn : 'Vazgeç', + CloseBtn : 'Kapat', + + // Upload Panel + UploadTitle : 'Yeni Dosya Yükle', + UploadSelectLbl : 'Yüklenecek dosyayı seçin', + UploadProgressLbl : '(Yükleniyor, lütfen bekleyin...)', + UploadBtn : 'Seçili Dosyayı Yükle', + UploadBtnCancel : 'Vazgeç', + + UploadNoFileMsg : 'Lütfen bilgisayarınızdan dosya seçin', + UploadNoFolder : 'Lütfen yüklemeden önce klasör seçin.', + UploadNoPerms : 'Dosya yüklemeye izin verilmiyor.', + UploadUnknError : 'Dosya gönderme hatası.', + UploadExtIncorrect : 'Bu dosya uzantısına, bu klasörde izin verilmiyor.', + + // Flash Uploads + UploadLabel : 'Gönderilecek Dosyalar', + UploadTotalFiles : 'Toplam Dosyalar:', + UploadTotalSize : 'Toplam Büyüklük:', + UploadSend : 'Yükle', + UploadAddFiles : 'Dosyaları Ekle', + UploadClearFiles : 'Dosyaları Temizle', + UploadCancel : 'Göndermeyi İptal Et', + UploadRemove : 'Sil', + UploadRemoveTip : '!f sil', + UploadUploaded : '!n% gönderildi', + UploadProcessing : 'Gönderiliyor...', + + // Settings Panel + SetTitle : 'Ayarlar', + SetView : 'Görünüm:', + SetViewThumb : 'Önizlemeler', + SetViewList : 'Liste', + SetDisplay : 'Gösterim:', + SetDisplayName : 'Dosya adı', + SetDisplayDate : 'Tarih', + SetDisplaySize : 'Dosya boyutu', + SetSort : 'Sıralama:', + SetSortName : 'Dosya adına göre', + SetSortDate : 'Tarihe göre', + SetSortSize : 'Boyuta göre', + SetSortExtension : 'Uzantısına göre', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 dosya', + FilesCountMany : '%1 dosya', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/sn', + + // Connector Error Messages. + ErrorUnknown : 'İsteğinizi yerine getirmek mümkün değil. (Hata %1)', + Errors : + { + 10 : 'Geçersiz komut.', + 11 : 'İstekte kaynak türü belirtilmemiş.', + 12 : 'Talep edilen kaynak türü geçersiz.', + 102 : 'Geçersiz dosya ya da klasör adı.', + 103 : 'Kimlik doğrulama kısıtlamaları nedeni ile talebinizi yerine getiremiyoruz.', + 104 : 'Dosya sistemi kısıtlamaları nedeni ile talebinizi yerine getiremiyoruz.', + 105 : 'Geçersiz dosya uzantısı.', + 109 : 'Geçersiz istek.', + 110 : 'Bilinmeyen hata.', + 111 : 'Dosya boyutundan dolayı bu işlemin yapılması mümkün değil.', + 115 : 'Aynı isimde bir dosya ya da klasör zaten var.', + 116 : 'Klasör bulunamadı. Lütfen yenileyin ve tekrar deneyin.', + 117 : 'Dosya bulunamadı. Lütfen dosya listesini yenileyin ve tekrar deneyin.', + 118 : 'Kaynak ve hedef yol aynı!', + 201 : 'Aynı ada sahip bir dosya zaten var. Yüklenen dosyanın adı "%1" olarak değiştirildi.', + 202 : 'Geçersiz dosya', + 203 : 'Geçersiz dosya. Dosya boyutu çok büyük.', + 204 : 'Yüklenen dosya bozuk.', + 205 : 'Dosyaları yüklemek için gerekli geçici klasör sunucuda bulunamadı.', + 206 : 'Güvenlik nedeni ile yükleme iptal edildi. Dosya HTML benzeri veri içeriyor.', + 207 : 'Yüklenen dosyanın adı "%1" olarak değiştirildi.', + 300 : 'Dosya taşıma işlemi başarısız.', + 301 : 'Dosya kopyalama işlemi başarısız.', + 500 : 'Güvenlik nedeni ile dosya gezgini devredışı bırakıldı. Lütfen sistem yöneticiniz ile irtibata geçin ve CKFinder yapılandırma dosyasını kontrol edin.', + 501 : 'Önizleme desteği devredışı.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Dosya adı boş olamaz', + FileExists : '%s dosyası zaten var', + FolderEmpty : 'Klasör adı boş olamaz', + FolderExists : '%s klasörü zaten mevcut.', + FolderNameExists : 'Klasör zaten mevcut.', + + FileInvChar : 'Dosya adının içermesi mümkün olmayan karakterler: \n\\ / : * ? " < > |', + FolderInvChar : 'Klasör adının içermesi mümkün olmayan karakterler: \n\\ / : * ? " < > |', + + PopupBlockView : 'Dosyayı yeni pencerede açmak için, tarayıcı ayarlarından bu sitenin açılır pencerelerine izin vermeniz gerekiyor.', + XmlError : 'Web sunucusundan XML yanıtı düzgün bir şekilde yüklenemedi.', + XmlEmpty : 'Web sunucusundan XML yanıtı düzgün bir şekilde yüklenemedi. Sunucudan boş cevap döndü.', + XmlRawResponse : 'Sunucudan gelen ham mesaj: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Boyutlandır: %s', + sizeTooBig : 'Yükseklik ve genişlik değeri orijinal boyuttan büyük olduğundan, işlem gerçekleştirilemedi (%size).', + resizeSuccess : 'Resim başarıyla yeniden boyutlandırıldı.', + thumbnailNew : 'Yeni önizleme oluştur', + thumbnailSmall : 'Küçük (%s)', + thumbnailMedium : 'Orta (%s)', + thumbnailLarge : 'Büyük (%s)', + newSize : 'Yeni boyutu ayarla', + width : 'Genişlik', + height : 'Yükseklik', + invalidHeight : 'Geçersiz yükseklik.', + invalidWidth : 'Geçersiz genişlik.', + invalidName : 'Geçersiz dosya adı.', + newImage : 'Yeni resim oluştur', + noExtensionChange : 'Dosya uzantısı değiştirilemedi.', + imageSmall : 'Kaynak resim çok küçük', + contextMenuName : 'Boyutlandır', + lockRatio : 'Oranı kilitle', + resetSize : 'Büyüklüğü sıfırla' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Kaydet', + fileOpenError : 'Dosya açılamadı.', + fileSaveSuccess : 'Dosya başarıyla kaydedildi.', + contextMenuName : 'Düzenle', + loadingFile : 'Dosya yükleniyor, lütfen bekleyin...' + }, + + Maximize : + { + maximize : 'Büyült', + minimize : 'Küçült' + }, + + Gallery : + { + current : '{current} / {total} resim' + }, + + Zip : + { + extractHereLabel : 'Buraya aç', + extractToLabel : 'Hedefe aç...', + downloadZipLabel : 'Zip olarak indir', + compressZipLabel : 'Zip dosyası olarak sıkıştır', + removeAndExtract : 'Varolanı kaldır ve aç', + extractAndOverwrite : 'Mevcut dosyaların üzerine yazarak aç', + extractSuccess : 'Başarıyla açıldı.' + }, + + Search : + { + searchPlaceholder : 'Ara' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/vi.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/vi.js new file mode 100644 index 0000000..70baef8 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/vi.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Vietnamese + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['vi'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, không khả dụng', + confirmCancel : 'Vài tùy chọn đã thay đổi. Bạn có muốn đóng hộp thoại?', + ok : 'OK', + cancel : 'Hủy', + confirmationTitle : 'Xác nhận', + messageTitle : 'Thông tin', + inputTitle : 'Câu hỏi', + undo : 'Hoàn tác', + redo : 'Làm lại', + skip : 'Bỏ qua', + skipAll : 'Bỏ qua tất cả', + makeDecision : 'Chọn hành động nào?', + rememberDecision: 'Ghi nhớ quyết định này' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'vi', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'd/m/yyyy h:MM aa', + DateAmPm : ['SA', 'CH'], + + // Folders + FoldersTitle : 'Thư mục', + FolderLoading : 'Đang tải...', + FolderNew : 'Xin chọn tên cho thư mục mới: ', + FolderRename : 'Xin chọn tên mới cho thư mục: ', + FolderDelete : 'Bạn có chắc muốn xóa thư mục "%1"?', + FolderRenaming : ' (Đang đổi tên...)', + FolderDeleting : ' (Đang xóa...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : 'Xin nhập tên tập tin mới: ', + FileRenameExt : 'Bạn có chắc muốn đổi phần mở rộng? Tập tin có thể sẽ không dùng được.', + FileRenaming : 'Đang đổi tên...', + FileDelete : 'Bạn có chắc muốn xóa tập tin "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : 'Đang tải...', + FilesEmpty : 'Thư mục trống.', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Rổ', + BasketClear : 'Dọn rổ', + BasketRemove : 'Xóa khỏi rổ', + BasketOpenFolder : 'Mở thư mục cha', + BasketTruncateConfirm : 'Bạn có chắc muốn bỏ tất cả tập tin trong rổ?', + BasketRemoveConfirm : 'Bạn có chắc muốn bỏ tập tin "%1" khỏi rổ?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'Không có tập tin trong rổ, hãy kéo và thả tập tin vào rổ.', + BasketCopyFilesHere : 'Chép tập tin từ rổ', + BasketMoveFilesHere : 'Chuyển tập tin từ rổ', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : 'Tải lên', + UploadTip : 'Tải tập tin mới', + Refresh : 'Làm tươi', + Settings : 'Thiết lập', + Help : 'Hướng dẫn', + HelpTip : 'Hướng dẫn', + + // Context Menus + Select : 'Chọn', + SelectThumbnail : 'Chọn ảnh mẫu', + View : 'Xem', + Download : 'Tải về', + + NewSubFolder : 'Tạo thư mục con', + Rename : 'Đổi tên', + Delete : 'Xóa', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Sao chép ở đây', + MoveDragDrop : 'Di chuyển ở đây', + + // Dialogs + RenameDlgTitle : 'Đổi tên', + NewNameDlgTitle : 'Tên mới', + FileExistsDlgTitle : 'Tập tin đã tồn tại', + SysErrorDlgTitle : 'Lỗi hệ thống', + + FileOverwrite : 'Ghi đè', + FileAutorename : 'Tự đổi tên', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : 'OK', + CancelBtn : 'Hủy bỏ', + CloseBtn : 'Đóng', + + // Upload Panel + UploadTitle : 'Tải tập tin mới', + UploadSelectLbl : 'Chọn tập tin tải lên', + UploadProgressLbl : '(Đang tải lên, vui lòng chờ...)', + UploadBtn : 'Tải tập tin đã chọn', + UploadBtnCancel : 'Hủy bỏ', + + UploadNoFileMsg : 'Xin chọn một tập tin trong máy tính.', + UploadNoFolder : 'Xin chọn thư mục trước khi tải lên.', + UploadNoPerms : 'Không được phép tải lên.', + UploadUnknError : 'Lỗi khi tải tập tin.', + UploadExtIncorrect : 'Kiểu tập tin không được chấp nhận trong thư mục này.', + + // Flash Uploads + UploadLabel : 'Tập tin sẽ tải:', + UploadTotalFiles : 'Tổng số tập tin:', + UploadTotalSize : 'Dung lượng tổng cộng:', + UploadSend : 'Tải lên', + UploadAddFiles : 'Thêm tập tin', + UploadClearFiles : 'Xóa tập tin', + UploadCancel : 'Hủy tải', + UploadRemove : 'Xóa', + UploadRemoveTip : 'Xóa !f', + UploadUploaded : 'Đã tải !n%', + UploadProcessing : 'Đang xử lí...', + + // Settings Panel + SetTitle : 'Thiết lập', + SetView : 'Xem:', + SetViewThumb : 'Ảnh mẫu', + SetViewList : 'Danh sách', + SetDisplay : 'Hiển thị:', + SetDisplayName : 'Tên tập tin', + SetDisplayDate : 'Ngày', + SetDisplaySize : 'Dung lượng', + SetSort : 'Sắp xếp:', + SetSortName : 'theo tên', + SetSortDate : 'theo ngày', + SetSortSize : 'theo dung lượng', + SetSortExtension : 'theo phần mở rộng', + + // Status Bar + FilesCountEmpty : '', + FilesCountOne : '1 tập tin', + FilesCountMany : '%1 tập tin', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : 'Không thể hoàn tất yêu cầu. (Lỗi %1)', + Errors : + { + 10 : 'Lệnh không hợp lệ.', + 11 : 'Kiểu tài nguyên không được chỉ định trong yêu cầu.', + 12 : 'Kiểu tài nguyên yêu cầu không hợp lệ.', + 102 : 'Tên tập tin hay thư mục không hợp lệ.', + 103 : 'Không thể hoàn tất yêu cầu vì giới hạn quyền.', + 104 : 'Không thể hoàn tất yêu cầu vì giới hạn quyền của hệ thống tập tin.', + 105 : 'Phần mở rộng tập tin không hợp lệ.', + 109 : 'Yêu cầu không hợp lệ.', + 110 : 'Lỗi không xác định.', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : 'Tập tin hoặc thư mục cùng tên đã tồn tại.', + 116 : 'Không thấy thư mục. Hãy làm tươi và thử lại.', + 117 : 'Không thấy tập tin. Hãy làm tươi và thử lại.', + 118 : 'Đường dẫn nguồn và đích giống nhau.', + 201 : 'Tập tin cùng tên đã tồn tại. Tập tin vừa tải lên được đổi tên thành "%1".', + 202 : 'Tập tin không hợp lệ.', + 203 : 'Tập tin không hợp lệ. Dung lượng quá lớn.', + 204 : 'Tập tin tải lên bị hỏng.', + 205 : 'Không có thư mục tạm để tải tập tin.', + 206 : 'Huỷ tải lên vì lí do bảo mật. Tập tin chứa dữ liệu giống HTML.', + 207 : 'Tập tin được đổi tên thành "%1".', + 300 : 'Di chuyển tập tin thất bại.', + 301 : 'Chép tập tin thất bại.', + 500 : 'Trình duyệt tập tin bị vô hiệu vì lí do bảo mật. Xin liên hệ quản trị hệ thống và kiểm tra tập tin cấu hình CKFinder.', + 501 : 'Chức năng hỗ trợ ảnh mẫu bị vô hiệu.' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : 'Không thể để trống tên tập tin.', + FileExists : 'Tập tin %s đã tồn tại.', + FolderEmpty : 'Không thể để trống tên thư mục.', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : 'Tên tập tin không thể chưa các kí tự: \n\\ / : * ? " < > |', + FolderInvChar : 'Tên thư mục không thể chứa các kí tự: \n\\ / : * ? " < > |', + + PopupBlockView : 'Không thể mở tập tin trong cửa sổ mới. Hãy kiểm tra trình duyệt và tắt chức năng chặn popup trên trang web này.', + XmlError : 'Không thể nạp hồi đáp XML từ máy chủ web.', + XmlEmpty : 'Không thể nạp hồi đáp XML từ máy chủ web. Dữ liệu rỗng.', + XmlRawResponse : 'Hồi đáp thô từ máy chủ: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Đổi kích thước %s', + sizeTooBig : 'Không thể đặt chiều cao hoặc rộng to hơn kích thước gốc (%size).', + resizeSuccess : 'Đổi kích thước ảnh thành công.', + thumbnailNew : 'Tạo ảnh mẫu mới', + thumbnailSmall : 'Nhỏ (%s)', + thumbnailMedium : 'Vừa (%s)', + thumbnailLarge : 'Lớn (%s)', + newSize : 'Chọn kích thước mới', + width : 'Rộng', + height : 'Cao', + invalidHeight : 'Chiều cao không hợp lệ.', + invalidWidth : 'Chiều rộng không hợp lệ.', + invalidName : 'Tên tập tin không hợp lệ.', + newImage : 'Tạo ảnh mới', + noExtensionChange : 'Không thể thay đổi phần mở rộng.', + imageSmall : 'Ảnh nguồn quá nhỏ.', + contextMenuName : 'Đổi kích thước', + lockRatio : 'Khoá tỉ lệ', + resetSize : 'Đặt lại kích thước' + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Lưu', + fileOpenError : 'Không thể mở tập tin.', + fileSaveSuccess : 'Lưu tập tin thành công.', + contextMenuName : 'Sửa', + loadingFile : 'Đang tải tập tin, xin chờ...' + }, + + Maximize : + { + maximize : 'Cực đại hóa', + minimize : 'Cực tiểu hóa' + }, + + Gallery : + { + current : 'Hình thứ {current} trên {total}' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : 'Tìm kiếm' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/zh-cn.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/zh-cn.js new file mode 100644 index 0000000..ef1d524 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/zh-cn.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Chinese-Simplified + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['zh-cn'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, 不可用', + confirmCancel : '部分内容尚未保存,确定关闭对话框么?', + ok : '确定', + cancel : '取消', + confirmationTitle : '确认', + messageTitle : '提示', + inputTitle : '询问', + undo : '撤销', + redo : '重做', + skip : '跳过', + skipAll : '全部跳过', + makeDecision : '应采取何样措施?', + rememberDecision: '下次不再询问' + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'en', + LangCode : 'zh-cn', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'yyyy年m月d日 h:MM aa', + DateAmPm : ['AM', 'PM'], + + // Folders + FoldersTitle : '文件夹', + FolderLoading : '正在加载文件夹...', + FolderNew : '请输入新文件夹名称: ', + FolderRename : '请输入新文件夹名称: ', + FolderDelete : '您确定要删除文件夹 "%1" 吗?', + FolderRenaming : ' (正在重命名...)', + FolderDeleting : ' (正在删除...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : '请输入新文件名: ', + FileRenameExt : '如果改变文件扩展名,可能会导致文件不可用。\r\n确定要更改吗?', + FileRenaming : '正在重命名...', + FileDelete : '您确定要删除文件 "%1" 吗?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : '加载中...', + FilesEmpty : '空文件夹', + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : '临时文件夹', + BasketClear : '清空临时文件夹', + BasketRemove : '从临时文件夹移除', + BasketOpenFolder : '打开临时文件夹', + BasketTruncateConfirm : '确认清空临时文件夹?', + BasketRemoveConfirm : '确认从临时文件夹中移除文件 "%1"?', + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : '临时文件夹为空, 可拖放文件至其中。', + BasketCopyFilesHere : '从临时文件夹复制至此', + BasketMoveFilesHere : '从临时文件夹移动至此', + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : '上传', + UploadTip : '上传文件', + Refresh : '刷新', + Settings : '设置', + Help : '帮助', + HelpTip : '查看在线帮助', + + // Context Menus + Select : '选择', + SelectThumbnail : '选中缩略图', + View : '查看', + Download : '下载', + + NewSubFolder : '创建子文件夹', + Rename : '重命名', + Delete : '删除', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : '将文件复制至此', + MoveDragDrop : '将文件移动至此', + + // Dialogs + RenameDlgTitle : '重命名', + NewNameDlgTitle : '文件名', + FileExistsDlgTitle : '文件已存在', + SysErrorDlgTitle : '系统错误', + + FileOverwrite : '自动覆盖重名文件', + FileAutorename : '给重名文件自动命名', + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : '确定', + CancelBtn : '取消', + CloseBtn : '关闭', + + // Upload Panel + UploadTitle : '上传文件', + UploadSelectLbl : '选定要上传的文件', + UploadProgressLbl : '(正在上传文件,请稍候...)', + UploadBtn : '上传选定的文件', + UploadBtnCancel : '取消', + + UploadNoFileMsg : '请选择一个要上传的文件', + UploadNoFolder : '需先选择一个文件。', + UploadNoPerms : '无文件上传权限。', + UploadUnknError : '上传文件出错。', + UploadExtIncorrect : '此文件后缀在当前文件夹中不可用。', + + // Flash Uploads + UploadLabel : '上传文件', + UploadTotalFiles : '上传总计:', + UploadTotalSize : '上传总大小:', + UploadSend : '上传', + UploadAddFiles : '添加文件', + UploadClearFiles : '清空文件', + UploadCancel : '取消上传', + UploadRemove : '删除', + UploadRemoveTip : '已删除!f', + UploadUploaded : '已上传!n%', + UploadProcessing : '上传中...', + + // Settings Panel + SetTitle : '设置', + SetView : '查看:', + SetViewThumb : '缩略图', + SetViewList : '列表', + SetDisplay : '显示:', + SetDisplayName : '文件名', + SetDisplayDate : '日期', + SetDisplaySize : '大小', + SetSort : '排列顺序:', + SetSortName : '按文件名', + SetSortDate : '按日期', + SetSortSize : '按大小', + SetSortExtension : '按扩展名', + + // Status Bar + FilesCountEmpty : '<空文件夹>', + FilesCountOne : '1 个文件', + FilesCountMany : '%1 个文件', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', + Gb : '%1 GB', + SizePerSecond : '%1/s', + + // Connector Error Messages. + ErrorUnknown : '请求的操作未能完成. (错误 %1)', + Errors : + { + 10 : '无效的指令。', + 11 : '文件类型不在许可范围之内。', + 12 : '文件类型无效。', + 102 : '无效的文件名或文件夹名称。', + 103 : '由于作者限制,该请求不能完成。', + 104 : '由于文件系统的限制,该请求不能完成。', + 105 : '无效的扩展名。', + 109 : '无效请求。', + 110 : '未知错误。', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : '存在重名的文件或文件夹。', + 116 : '文件夹不存在. 请刷新后再试。', + 117 : '文件不存在. 请刷新列表后再试。', + 118 : '目标位置与当前位置相同。', + 201 : '文件与现有的重名. 新上传的文件改名为 "%1"。', + 202 : '无效的文件。', + 203 : '无效的文件. 文件尺寸太大。', + 204 : '上传文件已损失。', + 205 : '服务器中的上传临时文件夹无效。', + 206 : '因为安全原因,上传中断. 上传文件包含不能 HTML 类型数据。', + 207 : '新上传的文件改名为 "%1"。', + 300 : '移动文件失败。', + 301 : '复制文件失败。', + 500 : '因为安全原因,文件不可浏览. 请联系系统管理员并检查CKFinder配置文件。', + 501 : '不支持缩略图方式。' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : '文件名不能为空。', + FileExists : '文件 %s 已存在。', + FolderEmpty : '文件夹名称不能为空。', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : '文件名不能包含以下字符: \n\\ / : * ? " < > |', + FolderInvChar : '文件夹名称不能包含以下字符: \n\\ / : * ? " < > |', + + PopupBlockView : '未能在新窗口中打开文件. 请修改浏览器配置解除对本站点的锁定。', + XmlError : '从服务器读取XML数据出错', + XmlEmpty : '无法从服务器读取数据,因XML响应返回结果为空', + XmlRawResponse : '服务器返回原始结果: %s' + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : '改变尺寸 %s', + sizeTooBig : '无法大于原图尺寸 (%size)。', + resizeSuccess : '图像尺寸已修改。', + thumbnailNew : '创建缩略图', + thumbnailSmall : '小 (%s)', + thumbnailMedium : '中 (%s)', + thumbnailLarge : '大 (%s)', + newSize : '设置新尺寸', + width : '宽度', + height : '高度', + invalidHeight : '无效高度。', + invalidWidth : '无效宽度。', + invalidName : '文件名无效。', + newImage : '创建图像', + noExtensionChange : '无法改变文件后缀。', + imageSmall : '原文件尺寸过小', + contextMenuName : '改变尺寸', + lockRatio : '锁定比例', + resetSize : '原始尺寸' + }, + + // Fileeditor plugin + Fileeditor : + { + save : '保存', + fileOpenError : '无法打开文件。', + fileSaveSuccess : '成功保存文件。', + contextMenuName : '编辑', + loadingFile : '加载文件中...' + }, + + Maximize : + { + maximize : '全屏', + minimize : '最小化' + }, + + Gallery : + { + current : '第 {current} 个图像,共 {total} 个' + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : '搜索' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/lang/zh-tw.js b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/zh-tw.js new file mode 100644 index 0000000..ec8dcff --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/lang/zh-tw.js @@ -0,0 +1,312 @@ +/* + * CKFinder + * ======== + * http://cksource.com/ckfinder + * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + * + * The software, this file, and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying, or distributing this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + * + */ + +/** + * @fileOverview Defines the {@link CKFinder.lang} object for the Chinese (Taiwan) + * language. + */ + +/** + * Contains the dictionary of language entries. + * @namespace + */ +CKFinder.lang['zh-tw'] = +{ + appTitle : 'CKFinder', + + // Common messages and labels. + common : + { + // Put the voice-only part of the label in the span. + unavailable : '%1, unavailable', // MISSING + confirmCancel : 'Some of the options were changed. Are you sure you want to close the dialog window?', // MISSING + ok : 'OK', // MISSING + cancel : 'Cancel', // MISSING + confirmationTitle : 'Confirmation', // MISSING + messageTitle : 'Information', // MISSING + inputTitle : 'Question', // MISSING + undo : 'Undo', // MISSING + redo : 'Redo', // MISSING + skip : 'Skip', // MISSING + skipAll : 'Skip all', // MISSING + makeDecision : 'What action should be taken?', // MISSING + rememberDecision: 'Remember my decision' // MISSING + }, + + + // Language direction, 'ltr' or 'rtl'. + dir : 'ltr', + HelpLang : 'zh-tw', + LangCode : 'zh-tw', + + // Date Format + // d : Day + // dd : Day (padding zero) + // m : Month + // mm : Month (padding zero) + // yy : Year (two digits) + // yyyy : Year (four digits) + // h : Hour (12 hour clock) + // hh : Hour (12 hour clock, padding zero) + // H : Hour (24 hour clock) + // HH : Hour (24 hour clock, padding zero) + // M : Minute + // MM : Minute (padding zero) + // a : Firt char of AM/PM + // aa : AM/PM + DateTime : 'mm/dd/yyyy HH:MM', + DateAmPm : ['上午', '下午'], + + // Folders + FoldersTitle : '目錄', + FolderLoading : '載入中...', + FolderNew : '請輸入新目錄名稱: ', + FolderRename : '請輸入新目錄名稱: ', + FolderDelete : '確定刪除 "%1" 這個目錄嗎?', + FolderRenaming : ' (修改目錄...)', + FolderDeleting : ' (刪除目錄...)', + DestinationFolder : 'Destination Folder', // MISSING + + // Files + FileRename : '請輸入新檔案名稱: ', + FileRenameExt : '確定變更這個檔案的副檔名嗎? 變更後 , 此檔案可能會無法使用 !', + FileRenaming : '修改檔案名稱...', + FileDelete : '確定要刪除這個檔案 "%1"?', + FilesDelete : 'Are you sure you want to delete %1 files?', // MISSING + FilesLoading : '載入中...', + FilesEmpty : 'The folder is empty.', // MISSING + DestinationFile : 'Destination File', // MISSING + SkippedFiles : 'List of skipped files:', // MISSING + + // Basket + BasketFolder : 'Basket', // MISSING + BasketClear : 'Clear Basket', // MISSING + BasketRemove : 'Remove from Basket', // MISSING + BasketOpenFolder : 'Open Parent Folder', // MISSING + BasketTruncateConfirm : 'Do you really want to remove all files from the basket?', // MISSING + BasketRemoveConfirm : 'Do you really want to remove the file "%1" from the basket?', // MISSING + BasketRemoveConfirmMultiple : 'Do you really want to remove %1 files from the basket?', // MISSING + BasketEmpty : 'No files in the basket, drag and drop some.', // MISSING + BasketCopyFilesHere : 'Copy Files from Basket', // MISSING + BasketMoveFilesHere : 'Move Files from Basket', // MISSING + + // Global messages + OperationCompletedSuccess : 'Operation completed successfully.', // MISSING + OperationCompletedErrors : 'Operation completed with errors.', // MISSING + FileError : '%s: %e', // MISSING + + // Move and Copy files + MovedFilesNumber : 'Number of files moved: %s.', // MISSING + CopiedFilesNumber : 'Number of files copied: %s.', // MISSING + MoveFailedList : 'The following files could not be moved:
      %s', // MISSING + CopyFailedList : 'The following files could not be copied:
      %s', // MISSING + + // Toolbar Buttons (some used elsewhere) + Upload : '上傳檔案', + UploadTip : '上傳一個新檔案', + Refresh : '重新整理', + Settings : '偏好設定', + Help : '說明', + HelpTip : '說明', + + // Context Menus + Select : '選擇', + SelectThumbnail : 'Select Thumbnail', // MISSING + View : '瀏覽', + Download : '下載', + + NewSubFolder : '建立新子目錄', + Rename : '重新命名', + Delete : '刪除', + DeleteFiles : 'Delete Files', // MISSING + + CopyDragDrop : 'Copy Here', // MISSING + MoveDragDrop : 'Move Here', // MISSING + + // Dialogs + RenameDlgTitle : 'Rename', // MISSING + NewNameDlgTitle : 'New Name', // MISSING + FileExistsDlgTitle : 'File Already Exists', // MISSING + SysErrorDlgTitle : 'System Error', // MISSING + + FileOverwrite : 'Overwrite', // MISSING + FileAutorename : 'Auto-rename', // MISSING + ManuallyRename : 'Manually rename', // MISSING + + // Generic + OkBtn : '確定', + CancelBtn : '取消', + CloseBtn : '關閉', + + // Upload Panel + UploadTitle : '上傳新檔案', + UploadSelectLbl : '請選擇要上傳的檔案', + UploadProgressLbl : '(檔案上傳中 , 請稍候...)', + UploadBtn : '將檔案上傳到伺服器', + UploadBtnCancel : '取消', + + UploadNoFileMsg : '請從你的電腦選擇一個檔案.', + UploadNoFolder : 'Please select a folder before uploading.', // MISSING + UploadNoPerms : 'File upload not allowed.', // MISSING + UploadUnknError : 'Error sending the file.', // MISSING + UploadExtIncorrect : 'File extension not allowed in this folder.', // MISSING + + // Flash Uploads + UploadLabel : 'Files to Upload', // MISSING + UploadTotalFiles : 'Total Files:', // MISSING + UploadTotalSize : 'Total Size:', // MISSING + UploadSend : '上傳檔案', + UploadAddFiles : 'Add Files', // MISSING + UploadClearFiles : 'Clear Files', // MISSING + UploadCancel : 'Cancel Upload', // MISSING + UploadRemove : 'Remove', // MISSING + UploadRemoveTip : 'Remove !f', // MISSING + UploadUploaded : 'Uploaded !n%', // MISSING + UploadProcessing : 'Processing...', // MISSING + + // Settings Panel + SetTitle : '設定', + SetView : '瀏覽方式:', + SetViewThumb : '縮圖預覽', + SetViewList : '清單列表', + SetDisplay : '顯示欄位:', + SetDisplayName : '檔案名稱', + SetDisplayDate : '檔案日期', + SetDisplaySize : '檔案大小', + SetSort : '排序方式:', + SetSortName : '依 檔案名稱', + SetSortDate : '依 檔案日期', + SetSortSize : '依 檔案大小', + SetSortExtension : 'by Extension', // MISSING + + // Status Bar + FilesCountEmpty : '<此目錄沒有任何檔案>', + FilesCountOne : '1 個檔案', + FilesCountMany : '%1 個檔案', + + // Size and Speed + Kb : '%1 KB', + Mb : '%1 MB', // MISSING + Gb : '%1 GB', // MISSING + SizePerSecond : '%1/s', // MISSING + + // Connector Error Messages. + ErrorUnknown : '無法連接到伺服器 ! (錯誤代碼 %1)', + Errors : + { + 10 : '不合法的指令.', + 11 : '連接過程中 , 未指定資源形態 !', + 12 : '連接過程中出現不合法的資源形態 !', + 102 : '不合法的檔案或目錄名稱 !', + 103 : '無法連接:可能是使用者權限設定錯誤 !', + 104 : '無法連接:可能是伺服器檔案權限設定錯誤 !', + 105 : '無法上傳:不合法的副檔名 !', + 109 : '不合法的請求 !', + 110 : '不明錯誤 !', + 111 : 'It was not possible to complete the request due to resulting file size.', // MISSING + 115 : '檔案或目錄名稱重複 !', + 116 : '找不到目錄 ! 請先重新整理 , 然後再試一次 !', + 117 : '找不到檔案 ! 請先重新整理 , 然後再試一次 !', + 118 : 'Source and target paths are equal.', // MISSING + 201 : '伺服器上已有相同的檔案名稱 ! 您上傳的檔案名稱將會自動更改為 "%1".', + 202 : '不合法的檔案 !', + 203 : '不合法的檔案 ! 檔案大小超過預設值 !', + 204 : '您上傳的檔案已經損毀 !', + 205 : '伺服器上沒有預設的暫存目錄 !', + 206 : '檔案上傳程序因為安全因素已被系統自動取消 ! 可能是上傳的檔案內容包含 HTML 碼 !', + 207 : '您上傳的檔案名稱將會自動更改為 "%1".', + 300 : 'Moving file(s) failed.', // MISSING + 301 : 'Copying file(s) failed.', // MISSING + 500 : '因為安全因素 , 檔案瀏覽器已被停用 ! 請聯絡您的系統管理者並檢查 CKFinder 的設定檔 config.php !', + 501 : '縮圖預覽功能已被停用 !' + }, + + // Other Error Messages. + ErrorMsg : + { + FileEmpty : '檔案名稱不能空白 !', + FileExists : 'File %s already exists.', // MISSING + FolderEmpty : '目錄名稱不能空白 !', + FolderExists : 'Folder %s already exists.', // MISSING + FolderNameExists : 'Folder already exists.', // MISSING + + FileInvChar : '檔案名稱不能包含以下字元: \n\\ / : * ? " < > |', + FolderInvChar : '目錄名稱不能包含以下字元: \n\\ / : * ? " < > |', + + PopupBlockView : '無法在新視窗開啟檔案 ! 請檢查瀏覽器的設定並且針對這個網站 關閉 <封鎖彈跳視窗> 這個功能 !', + XmlError : 'It was not possible to properly load the XML response from the web server.', // MISSING + XmlEmpty : 'It was not possible to load the XML response from the web server. The server returned an empty response.', // MISSING + XmlRawResponse : 'Raw response from the server: %s' // MISSING + }, + + // Imageresize plugin + Imageresize : + { + dialogTitle : 'Resize %s', // MISSING + sizeTooBig : 'Cannot set image height or width to a value bigger than the original size (%size).', // MISSING + resizeSuccess : 'Image resized successfully.', // MISSING + thumbnailNew : 'Create a new thumbnail', // MISSING + thumbnailSmall : 'Small (%s)', // MISSING + thumbnailMedium : 'Medium (%s)', // MISSING + thumbnailLarge : 'Large (%s)', // MISSING + newSize : 'Set a new size', // MISSING + width : 'Width', // MISSING + height : 'Height', // MISSING + invalidHeight : 'Invalid height.', // MISSING + invalidWidth : 'Invalid width.', // MISSING + invalidName : 'Invalid file name.', // MISSING + newImage : 'Create a new image', // MISSING + noExtensionChange : 'File extension cannot be changed.', // MISSING + imageSmall : 'Source image is too small.', // MISSING + contextMenuName : 'Resize', // MISSING + lockRatio : 'Lock ratio', // MISSING + resetSize : 'Reset size' // MISSING + }, + + // Fileeditor plugin + Fileeditor : + { + save : 'Save', // MISSING + fileOpenError : 'Unable to open file.', // MISSING + fileSaveSuccess : 'File saved successfully.', // MISSING + contextMenuName : 'Edit', // MISSING + loadingFile : 'Loading file, please wait...' // MISSING + }, + + Maximize : + { + maximize : 'Maximize', // MISSING + minimize : 'Minimize' // MISSING + }, + + Gallery : + { + current : 'Image {current} of {total}' // MISSING + }, + + Zip : + { + extractHereLabel : 'Extract here', // MISSING + extractToLabel : 'Extract to...', // MISSING + downloadZipLabel : 'Download as zip', // MISSING + compressZipLabel : 'Compress to zip', // MISSING + removeAndExtract : 'Remove existing and extract', // MISSING + extractAndOverwrite : 'Extract overwriting existing files', // MISSING + extractSuccess : 'File extracted successfully.' // MISSING + }, + + Search : + { + searchPlaceholder : '搜尋' + } +}; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/license.txt b/php/pic_switch_demo/static/ckeditor/ckfinder/license.txt new file mode 100644 index 0000000..a9e9e1e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/license.txt @@ -0,0 +1,271 @@ +CKFinder License Agreement +Version 2.3, April 2013 +================ +http://cksource.com/ckfinder +Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. + +This document ("Agreement") is a legal agreement between You, either an individual or a Legal Entity, +and CKSource – Frederico Knabben ("CKSource"), running business activity pursuant to registration by +the President of the Capital City of Warsaw under no. 429043, covering Your permissions to use, reproduce, +and distribute the Software under the License terms defined hereby. + +1. Definitions + +"Agreement Name" shall mean the name used to reference this Agreement in any context, which is +"CKFinder License Agreement 2.3" or "CKFinder License 2.3". + +"Software" or "CKFinder" shall mean the copyrighted material owned by CKSource, subject to the terms of +this License. The Software is publicly, uniquely, and in its entirety recognizable by the "CKFinder" name +("Software Name"). + +"Software Release" or "Release" shall mean a set of files distributed by CKSource, or anyone authorized to +distribute it, that represents the Software. A Release is uniquely identified by the Software Name and a code. +Such code is generally referenced as the Software version or revision number, or a combination of both. + +"Release Date" shall mean the day that CKSource started distributing a Release. + +"Product" shall mean a single computer program or one or more websites ("Program") (i) owned by You, or +(ii) to which the owner grants You the permission to act in behalf of the owner for the purposes of this Agreement. +A Program family or a group of Programs does not constitute a Product for the scope of this Agreement. +A Program that goes in competition with the Software in the marketplace does not constitute a valid Product +for the scope of this Agreement. + +"Development Server" shall mean a computer with one or more computer central processing units (CPU's) +that operates for the exclusive purpose of software development or software testing. + +"Development Activity" shall mean the act of interacting with the Software or one of its Releases, in any number +of Products owned or produced by You, with the intent of installation, customization, configuration, testing, +documentation, or any other software development activity related to the Software. + +"Developer" shall mean an authorized person designated by You to perform Development Activities. + +"Production Website" shall mean a Product with the Software installed, which already had Development Activities +performed, and that has been delivered to end-users for production usage. Maintenance activities performed on +Production Websites, excluding software development activities related to the Software, are not considered +Development Activities. + +"Hostname" shall mean a unique name by which a website is reachable in a network. This includes, but is not +limited to, a website IP address. (For example, if a website is reachable by the Internet address +"http://www.example.com/", the Hostname is "www.example.com".) + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, +or are under common control of that entity. For the purposes of this definition, "control" means (i) the power, +direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, +or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"Effective Date" means the date on which the Legal Evidence is made effective. + +"You" (or "Your") shall mean an individual or a Legal Entity exercising permissions granted by the License and +accepting this Agreement. + +2. Grant of License + +Subject to the terms of this Agreement, CKSource hereby grants You, in one of the License Models described +in Section 4, a non-exclusive, perpetual, irrevocable, royalty free, worldwide license ("License") to use, +reproduce, modify, and distribute a Software Release in a collective work assembled with the Product. + +You should carefully read the following terms and conditions before using, installing, copying, or distributing +the Software. Unless otherwise agreed in writing by CKSource, your use, installation, copying, or distribution +of the Software indicates your acceptance of this License. + +3. Scope of License + +All rights of any kind to the Software, which are not expressly granted in this Agreement, are entirely +and exclusively reserved to and by CKSource. The Software is protected by applicable national and international +laws and treaties. + +You may use, install, copy, and distribute the Software solely as provided in this Agreement. You may not rent, +lease, loan, sublicense, reverse engineer, decompile, disassemble, or create derivative works based on the +Software, in whole or in part, nor permit anyone else to do so. + +It is agreed that in exchange for the license set forth herein, you will pay a license fee ("License Fee"). +The fee value will be specified by CKSource at the moment of the purchase. + +4. License Models + +The Software may be assembled with the Product and redistributed in respect of one, and only one, of the +following models ("License Models") of Your choice: + +a) ("Basic") Assembling the Software into a Product distributed as a single website ("Site"). The Site URL ("URL") + must be specified at the moment of purchase. The license will not be valid for sub-domains of the specified URL. + This license includes 2 Developer licenses that cover Development Activities exclusively related to the Site. + +b) ("Professional") Assembling the Software with a maximum of 3 websites ("Professional Sites") owned or produced by You. + Sites produced by third-parties with Software produced by You are not included in this License Model. + This license includes 5 Developer licenses that cover Development Activities exclusively related to Professional Sites. + +c) ("Developer") License granting Development Activities to a single Developer Person. + + +A valid Developer license is required for every single Developer Person. Developer licenses cannot be shared among +different Developer Persons. Non-Development Activities on Production Websites do not require Developer licenses. + +License Fee values may differ depending on the license model. + +5. Unlicensed Copies + +If You did not pay License Fee, You may use unlicensed copies of CKFinder for the exclusive purpose of demonstration. +In this case You will be using CKFinder in "demo mode". Without derogating from the forgoing, You may not use +CKFinder in "demo mode" for commercial purposes. CKFinder shall only be used for evaluation purposes and may not be +used or disclosed for any other purposes, including, without limitation, for external distribution. You may not remove +the demo notices from the interface nor disable the ability to display such notices or otherwise modify CKFinder. +Product support, if any, is not offered for CKFinder in "demo mode". + +6. Agreement Acceptance + +This Agreement is automatically accepted by both parties as long as You are in possession of legal evidence +("Legal Evidence") that the acceptance has taken place. The Legal Evidence can be represented by (i) a copy +of this Agreement signed by You and CKSource or (ii) a valid Certificate of License Ownership, provided by +CKSource and addressed to You. The Legal Evidence must precisely indicate this Agreement Name, the Software Name, +the License Model You have chosen, and the following restrictive information, if applicable: + +a) If You have chosen the Basic License Model, the Site Hostname must be indicated in the Legal Evidence. This Agreement + will be valid for the Software assembled with the Site publicized under the Site Hostname only. Other Sites are + excluded from this Agreement as long as a Legal Evidence is not produced for each of these Sites. + + +Legal Evidences for different combinations of License Models, Sites, and Products will not restrict each other +and will not interfere in the rights granted to You by each of them. + +Legal Evidences are not transferable to different Sites and Products. + +7. Limitation on Releases + +This agreement is valid for all Releases of the Software with Release Dates within or before the 365 days that +follow the Effective Date ("Upgrade Period"). CKSource has no obligation to provide you any Release that is not +released for general distribution to other CKSource licensees. Nothing in this Agreement shall be construed to +obligate CKSource to provide additional Releases to You under any circumstances. + +8. Support + +CKSource shall provide support for Developers covered by valid Developer licenses for the period of 365 days +following the Effective Date ("Support Period"). Support shall be limited to electronic messaging access. +CKSource shall keep You informed, either per CKSource readiness or by following your request, including changes +to it, about the rules and procedures that You must perform to enjoy support under the terms of this Agreement. +Support topics shall be limited to the following (each a "Support Request"): + +a) problem solving, +b) bug reporting, +c) and documentation clarification. + + +The number of Support Requests that CKSource is entitled to accept from You is limited to 2 per month if You have +chosen the Basic license model, or 5 per month if You have chosen the Professional license model. +CKSource may refuse Support Requests that exceed these limits. + +CKSource is not in any way obliged to perform bug fixing or custom development activities as a result +of a Support Request. + +9. License Key + +Following a valid License purchase, a unique license key (the "License Key") may be provided to You, which allows +Software activation. The License Key is subject to the restrictions set forth in this License and may not be disclosed +or distributed in any way. The disclosure or distribution of the License Key shall constitute a breach of this License, +the effect of which shall be the automatic termination and revocation of any and all rights granted herein. + +10. Source Code + +The original source code ("Source Code") of the Software may be distributed by CKSource alongside its executable +version, or as an integral part of it. You may modify and compile the Source Code. The Source Code or its modified +version can be copied and distributed exclusively within the scope of this license, as defined in the "License Model" +terms of this license, as long as a valid license has been purchased for the distribution target. CKSource retains all +rights over the Source Code and all its modified versions. Redistributions of the Source Code and modified versions of it +must contain the original headers and copyright notices. Modifications to the Source Code must be explicitly and entirely +identified in the Source Code files. This section of the license supersedes all modification restrictions imposed by +other sections. You are not allowed to remove copyright notices nor make changes to the license validation code present +in the Source Code. + +11. License Fee + +In consideration for the License granted in this Agreement during the term of this Agreement, You agreed to +pay to CKSource a one time fee ("License Fee"). + +In consideration for the Software upgrades access and support services provided during the Upgrade Period +and Support Period, You shall pay a yearly fee ("Annual Support and Upgrade Fee"). + +The License Fee and the Annual Support and Upgrade Fee amount shall be specified by CKSource at the moment +of the purchase as a single unified price. + +The fees listed in this Agreement do not include taxes. If CKSource is required to pay any sales, use, property, +excise, value added, gross receipts, withholding or other taxes levied on the Software or support under this +Agreement or on Your use thereof, then such taxes shall be billed to and paid by You. This Section does not apply +to taxes based on CKSource net income, franchise taxes or CKSource's employer contributions and taxes. + +You understand that CKSource uses third-party paying agents to process selected payments. You understand that +until payments are not received and verified by the paying agent, this Agreement is not valid. + +All payments made hereunder are nonrefundable. You may not withhold or set off any amounts due under this Agreement. +Failure to pay any fee when due shall constitute a material breach of this Agreement. In addition, if You fail to +make any payments when due for support, upon written notice to You, CKSource shall cease providing support. + +12. Automatic Renewal + +You may opt to automatically extend the expiration date for both the Upgrade Period and Support Period by successive +cycles of 365 days (each one a "Renewal"). In such case, you agree to pay a fee for each Renewal at the beginning +of each cycle. The annual Renewal fee shall be informed by CKSource at the moment of the purchase and optionally +agreed by you. + +If you opted to have automatic Renewals, CKSource shall send you a payment request for the Renewal fee at any +moment following the first day of each Renewal period. You shall perform the full payment in 30 calendar days +following the payment request. + +Both parties can discontinue the automatic Renewals by written notification to the other party before the +beginning of extension cycles. + +13. Reservation of Rights and Ownership + +CKSource reserves all rights not expressly granted to You in this Agreement. The Software is protected by +copyright and other intellectual property laws and treaties. CKSource owns the title, copyright, and other intellectual +property rights in the Software. The Software is licensed, not sold. This Agreement does not grant you any rights to +the Software's trademarks or services. + +14. Termination + +Without prejudice to any other rights, this Agreement automatically terminates if You fail to comply with the terms +and conditions of this Agreement. You may terminate this Agreement at any time without cause. In case of termination, +in any circumstance, payments issued by You will not be reimbursed. + +You shall immediately discontinue distribution of Product, assembled with the Software, upon expiration or +termination of this Agreement. + +15. Warranty + +CKSource warrants that it has full title and ownership to the Software and has the authority to grant the +license hereunder. To the best of CKSource's knowledge the Software does not infringe upon the intellectual +property rights of any third party and that CKSource did not receive any notice regarding any alleged infringement +thereof. + +16. Disclaimer of Warranties + +With the exclusion of warranties explicitly mentioned in Section 15, the Software and its related material are +provided "AS IS" and without warranty of any kind. CKSource expressly disclaims all other warranties, expressed +or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. + +17. Exclusion of Incidental, Consequential and Certain Other Damages + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL CKSOURCE BE LIABLE FOR ANY SPECIAL, INCIDENTAL, +PUNITIVE, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR LOSS OF PROFITS +OR CONFIDENTIAL OR OTHER INFORMATION, FOR BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF PRIVACY, FOR FAILURE +TO MEET ANY DUTY INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR NEGLIGENCE, AND FOR ANY OTHER PECUNIARY OR OTHER +LOSS WHATSOEVER) ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF OR INABILITY TO USE THE SOFTWARE, THE PROVISION +OF OR FAILURE TO PROVIDE SUPPORT OR OTHER SERVICES, INFORMATON, SOFTWARE, AND RELATED CONTENT THROUGH THE SOFTWARE +OR OTHERWISE ARISING OUT OF THE USE OF THE SOFTWARE, OR OTHERWISE UNDER OR IN CONNECTION WITH ANY PROVISION OF THIS +AGREEMENT, EVEN IN THE EVENT OF THE FAULT, TORT (INCLUDING NEGLIGENCE), MISREPRESENTATION, STRICT LIABILITY, BREACH OF +CONTRACT, AND EVEN IF THE OWNER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +18. Limitation of Liability + +In no event shall CKSource's liability exceed the license fee paid, if any. + +19. Governing Law and Venue + +This Agreement shall be construed and controlled by the laws of Poland, and You and CKSource further consent to +exclusive jurisdiction by the courts of Poland. + +END OF AGREEMENT TERMS + +"CKSource" +CKSource Frederico Knabben +By: +Name: Frederico Knabben +Title: CEO diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/lang/en.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/lang/en.js new file mode 100644 index 0000000..657e5a3 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/lang/en.js @@ -0,0 +1,14 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see license.txt or http://cksource.com/ckfinder/license +*/ + +CKFinder.setPluginLang( 'dummy', 'en', +{ + dummy : + { + title : 'Dummy dialog', + menuItem : 'Open dummy dialog', + typeText : 'Please type some text.' + } +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/lang/pl.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/lang/pl.js new file mode 100644 index 0000000..bd8a971 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/lang/pl.js @@ -0,0 +1,14 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see license.txt or http://cksource.com/ckfinder/license +*/ + +CKFinder.setPluginLang( 'dummy', 'pl', + { + dummy : + { + title : 'Testowe okienko', + menuItem : 'Otwórz okienko dummy', + typeText : 'Podaj jakiś tekst.' + } + }); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/plugin.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/plugin.js new file mode 100644 index 0000000..a2c6575 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/dummy/plugin.js @@ -0,0 +1,72 @@ +/** + * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see license.txt or http://cksource.com/ckfinder/license + * + * CKFinder 2.x - sample "dummy" plugin. + * + * To enable it, add the following line to config.js: + * config.extraPlugins = 'dummy'; + */ + +/** + * See http://docs.cksource.com/ckfinder_2.x_api/symbols/CKFinder.html#.addPlugin + */ +CKFinder.addPlugin( 'dummy', { + + lang : [ 'en', 'pl' ], + + appReady : function( api ) { + CKFinder.dialog.add( 'dummydialog', function( api ) + { + // CKFinder.dialog.definition + var dialogDefinition = + { + title : api.lang.dummy.title, + minWidth : 390, + minHeight : 230, + onOk : function() { + // "this" is now a CKFinder.dialog object. + var value = this.getValueOf( 'tab1', 'textareaId' ); + if ( !value ) { + api.openMsgDialog( '', api.lang.dummy.typeText ); + return false; + } + else { + alert( "You have entered: " + value ); + return true; + } + }, + contents : [ + { + id : 'tab1', + label : '', + title : '', + expand : true, + padding : 0, + elements : + [ + { + type : 'html', + html : '

      ' + api.lang.dummy.typeText + '

      ' + }, + { + type : 'textarea', + id : 'textareaId', + rows : 10, + cols : 40 + } + ] + } + ], + buttons : [ CKFinder.dialog.cancelButton, CKFinder.dialog.okButton ] + }; + + return dialogDefinition; + } ); + + api.addFileContextMenuOption( { label : api.lang.dummy.menuItem, command : "dummycommand" } , function( api, file ) + { + api.openDialog('dummydialog'); + }); + } +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/LICENSE b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/LICENSE new file mode 100644 index 0000000..442d11c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2013 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/addon/mode/overlay.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/addon/mode/overlay.js new file mode 100644 index 0000000..d832885 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/addon/mode/overlay.js @@ -0,0 +1,70 @@ +// Utility function that allows modes to be combined. The mode given +// as the base argument takes care of most of the normal mode +// functionality, but a second (typically simple) mode is used, which +// can override the style of text. Both modes get to parse all of the +// text, but when both assign a non-null style to a piece of code, the +// overlay wins, unless the combine argument was true, in which case +// the styles are combined. + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.overlayMode = function(base, overlay, combine) { + return { + startState: function() { + return { + base: CodeMirror.startState(base), + overlay: CodeMirror.startState(overlay), + basePos: 0, baseCur: null, + overlayPos: 0, overlayCur: null + }; + }, + copyState: function(state) { + return { + base: CodeMirror.copyState(base, state.base), + overlay: CodeMirror.copyState(overlay, state.overlay), + basePos: state.basePos, baseCur: null, + overlayPos: state.overlayPos, overlayCur: null + }; + }, + + token: function(stream, state) { + if (stream.start == state.basePos) { + state.baseCur = base.token(stream, state.base); + state.basePos = stream.pos; + } + if (stream.start == state.overlayPos) { + stream.pos = stream.start; + state.overlayCur = overlay.token(stream, state.overlay); + state.overlayPos = stream.pos; + } + stream.pos = Math.min(state.basePos, state.overlayPos); + if (stream.eol()) state.basePos = state.overlayPos = 0; + + if (state.overlayCur == null) return state.baseCur; + if (state.baseCur != null && combine) return state.baseCur + " " + state.overlayCur; + else return state.overlayCur; + }, + + indent: base.indent && function(state, textAfter) { + return base.indent(state.base, textAfter); + }, + electricChars: base.electricChars, + + innerMode: function(state) { return {state: state.base, mode: base}; }, + + blankLine: function(state) { + if (base.blankLine) base.blankLine(state.base); + if (overlay.blankLine) overlay.blankLine(state.overlay); + } + }; +}; + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/lib/codemirror.css b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/lib/codemirror.css new file mode 100644 index 0000000..d263e44 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/lib/codemirror.css @@ -0,0 +1,270 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; +} +.CodeMirror-scroll { + /* Set scrolling behaviour here */ + overflow: auto; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* CURSOR */ + +.CodeMirror div.CodeMirror-cursor { + border-left: 1px solid black; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor { + width: auto; + border: 0; + background: #7e7; +} +/* Can style cursor different in overwrite (non-insert) mode */ +div.CodeMirror-overwrite div.CodeMirror-cursor {} + +.cm-tab { display: inline-block; } + +.CodeMirror-ruler { + border-left: 1px solid #ccc; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable {color: black;} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3 {color: #085;} +.cm-s-default .cm-property {color: black;} +.cm-s-default .cm-operator {color: black;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + line-height: 1; + position: relative; + overflow: hidden; + background: white; + color: black; +} + +.CodeMirror-scroll { + /* 30px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -30px; margin-right: -30px; + padding-bottom: 30px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.CodeMirror-sizer { + position: relative; + border-right: 30px solid transparent; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actuall scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + padding-bottom: 30px; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + -moz-box-sizing: content-box; + box-sizing: content-box; + padding-bottom: 30px; + margin-bottom: -32px; + display: inline-block; + /* Hack to make IE7 behave */ + *zoom:1; + *display:inline; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} + +.CodeMirror-lines { + cursor: text; +} +.CodeMirror pre { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; +} +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + overflow: auto; +} + +.CodeMirror-widget {} + +.CodeMirror-wrap .CodeMirror-scroll { + overflow-x: hidden; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} +.CodeMirror-measure pre { position: static; } + +.CodeMirror div.CodeMirror-cursor { + position: absolute; + border-right: none; + width: 0; +} + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 1; +} +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } + +.cm-searching { + background: #ffa; + background: rgba(255, 255, 0, .4); +} + +/* IE7 hack to prevent it from returning funny offsetTops on the spans */ +.CodeMirror span { *vertical-align: text-bottom; } + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/lib/codemirror.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/lib/codemirror.js new file mode 100644 index 0000000..7d4028b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/lib/codemirror.js @@ -0,0 +1,7339 @@ +// This is CodeMirror (http://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + module.exports = mod(); + else if (typeof define == "function" && define.amd) // AMD + return define([], mod); + else // Plain browser env + this.CodeMirror = mod(); +})(function() { + "use strict"; + + // BROWSER SNIFFING + + // Kludges for bugs and behavior differences that can't be feature + // detected are enabled based on userAgent etc sniffing. + + var gecko = /gecko\/\d/i.test(navigator.userAgent); + // ie_uptoN means Internet Explorer version N or lower + var ie_upto10 = /MSIE \d/.test(navigator.userAgent); + var ie_upto7 = ie_upto10 && (document.documentMode == null || document.documentMode < 8); + var ie_upto8 = ie_upto10 && (document.documentMode == null || document.documentMode < 9); + var ie_upto9 = ie_upto10 && (document.documentMode == null || document.documentMode < 10); + var ie_11up = /Trident\/([7-9]|\d{2,})\./.test(navigator.userAgent); + var ie = ie_upto10 || ie_11up; + var webkit = /WebKit\//.test(navigator.userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent); + var chrome = /Chrome\//.test(navigator.userAgent); + var presto = /Opera\//.test(navigator.userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var khtml = /KHTML\//.test(navigator.userAgent); + var mac_geLion = /Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent); + var phantom = /PhantomJS/.test(navigator.userAgent); + + var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent); + var mac = ios || /Mac/.test(navigator.platform); + var windows = /win/i.test(navigator.platform); + + var presto_version = presto && navigator.userAgent.match(/Version\/(\d*\.\d*)/); + if (presto_version) presto_version = Number(presto_version[1]); + if (presto_version && presto_version >= 15) { presto = false; webkit = true; } + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); + var captureRightClick = gecko || (ie && !ie_upto8); + + // Optimize some code when these features are not used. + var sawReadOnlySpans = false, sawCollapsedSpans = false; + + // EDITOR CONSTRUCTOR + + // A CodeMirror instance represents an editor. This is the object + // that user code is usually dealing with. + + function CodeMirror(place, options) { + if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); + + this.options = options = options || {}; + // Determine effective options based on given values and defaults. + for (var opt in defaults) if (!options.hasOwnProperty(opt)) + options[opt] = defaults[opt]; + setGuttersForLineNumbers(options); + + var doc = options.value; + if (typeof doc == "string") doc = new Doc(doc, options.mode); + this.doc = doc; + + var display = this.display = new Display(place, doc); + display.wrapper.CodeMirror = this; + updateGutters(this); + themeChanged(this); + if (options.lineWrapping) + this.display.wrapper.className += " CodeMirror-wrap"; + if (options.autofocus && !mobile) focusInput(this); + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in readInput + draggingText: false, + highlight: new Delayed() // stores highlight worker timeout + }; + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie_upto10) setTimeout(bind(resetInput, this, true), 20); + + registerEventHandlers(this); + + var cm = this; + runInOp(this, function() { + cm.curOp.forceUpdate = true; + attachDoc(cm, doc); + + if ((options.autofocus && !mobile) || activeElt() == display.input) + setTimeout(bind(onFocus, cm), 20); + else + onBlur(cm); + + for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) + optionHandlers[opt](cm, options[opt], Init); + for (var i = 0; i < initHooks.length; ++i) initHooks[i](cm); + }); + } + + // DISPLAY CONSTRUCTOR + + // The display handles the DOM integration, both for input reading + // and content drawing. It holds references to DOM nodes and + // display-related state. + + function Display(place, doc) { + var d = this; + + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"); + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) input.style.width = "1000px"; + else input.setAttribute("wrap", "off"); + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) input.style.border = "1px solid black"; + input.setAttribute("autocorrect", "off"); input.setAttribute("autocapitalize", "off"); input.setAttribute("spellcheck", "false"); + + // Wraps and hides input textarea + d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The fake scrollbar elements. + d.scrollbarH = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); + d.scrollbarV = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = elt("div", null, "CodeMirror-code"); + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + d.cursorDiv = elt("div", null, "CodeMirror-cursors"); + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure"); + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none"); + // Moved around its parent to cover visible view. + d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerCutOff + "px; width: 1px;"); + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.inputDiv, d.scrollbarH, d.scrollbarV, + d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie_upto7) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + // Needed to hide big blue blinking cursor on Mobile Safari + if (ios) input.style.width = "0px"; + if (!webkit) d.scroller.draggable = true; + // Needed to handle Tab key in KHTML + if (khtml) { d.inputDiv.style.height = "1px"; d.inputDiv.style.position = "absolute"; } + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie_upto7) d.scrollbarH.style.minHeight = d.scrollbarV.style.minWidth = "18px"; + + if (place.appendChild) place.appendChild(d.wrapper); + else place(d.wrapper); + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first; + // Information about the rendered lines. + d.view = []; + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null; + // Empty space (in pixels) above the view + d.viewOffset = 0; + d.lastSizeC = 0; + d.updateLineNumbers = null; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // See readInput and resetInput + d.prevInput = ""; + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false; + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + d.pollingFast = false; + // Self-resetting timeout for the poller + d.poll = new Delayed(); + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + + // Tracks when resetInput has punted to just putting a short + // string into the textarea instead of the full selection. + d.inaccurateSelection = false; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + // True when shift is held down. + d.shift = false; + } + + // STATE UPDATES + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); + resetModeState(cm); + } + + function resetModeState(cm) { + cm.doc.iter(function(line) { + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + }); + cm.doc.frontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) regChange(cm); + } + + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + cm.display.wrapper.className += " CodeMirror-wrap"; + cm.display.sizer.style.minWidth = ""; + } else { + cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-wrap", ""); + findMaxLine(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function(){updateScrollbars(cm);}, 100); + } + + // Returns a function that estimates the height of a line, to use as + // first approximation until the line becomes visible (and is thus + // properly measurable). + function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function(line) { + if (lineIsHidden(cm.doc, line)) return 0; + + var widgetsHeight = 0; + if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; + } + + if (wrapping) + return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; + else + return widgetsHeight + th; + }; + } + + function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm); + doc.iter(function(line) { + var estHeight = est(line); + if (estHeight != line.height) updateLineHeight(line, estHeight); + }); + } + + function keyMapChanged(cm) { + var map = keyMap[cm.options.keyMap], style = map.style; + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") + + (style ? " cm-keymap-" + style : ""); + } + + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + + function guttersChanged(cm) { + updateGutters(cm); + regChange(cm); + setTimeout(function(){alignHorizontally(cm);}, 20); + } + + // Rebuild the gutter elements, ensure the margin to the left of the + // code matches their width. + function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters; + removeChildren(gutters); + for (var i = 0; i < specs.length; ++i) { + var gutterClass = specs[i]; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt; + gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = i ? "" : "none"; + var width = gutters.offsetWidth; + cm.display.sizer.style.marginLeft = width + "px"; + if (i) cm.display.scrollbarH.style.left = cm.options.fixedGutter ? width + "px" : 0; + } + + // Compute the character length of a line, taking into account + // collapsed ranges (see markText) that might hide parts, and join + // other lines onto it. + function lineLength(line) { + if (line.height == 0) return 0; + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true); + cur = found.from.line; + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found = merged.find(0, true); + len -= cur.text.length - found.from.ch; + cur = found.to.line; + len += cur.text.length - found.to.ch; + } + return len; + } + + // Find the longest line in the document. + function findMaxLine(cm) { + var d = cm.display, doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(d.maxLine); + d.maxLineChanged = true; + doc.iter(function(line) { + var len = lineLength(line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // Make sure the gutters options contains the element + // "CodeMirror-linenumbers" when the lineNumbers option is true. + function setGuttersForLineNumbers(options) { + var found = indexOf(options.gutters, "CodeMirror-linenumbers"); + if (found == -1 && options.lineNumbers) { + options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); + } else if (found > -1 && !options.lineNumbers) { + options.gutters = options.gutters.slice(0); + options.gutters.splice(found, 1); + } + } + + // SCROLLBARS + + // Prepare DOM reads needed to update the scrollbars. Done in one + // shot to minimize update/measure roundtrips. + function measureForScrollbars(cm) { + var scroll = cm.display.scroller; + return { + clientHeight: scroll.clientHeight, + barHeight: cm.display.scrollbarV.clientHeight, + scrollWidth: scroll.scrollWidth, clientWidth: scroll.clientWidth, + barWidth: cm.display.scrollbarH.clientWidth, + docHeight: Math.round(cm.doc.height + paddingVert(cm.display)) + }; + } + + // Re-synchronize the fake scrollbars with the actual size of the + // content. + function updateScrollbars(cm, measure) { + if (!measure) measure = measureForScrollbars(cm); + var d = cm.display; + var scrollHeight = measure.docHeight + scrollerCutOff; + var needsH = measure.scrollWidth > measure.clientWidth; + var needsV = scrollHeight > measure.clientHeight; + if (needsV) { + d.scrollbarV.style.display = "block"; + d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0"; + // A bug in IE8 can cause this value to be negative, so guard it. + d.scrollbarV.firstChild.style.height = + Math.max(0, scrollHeight - measure.clientHeight + (measure.barHeight || d.scrollbarV.clientHeight)) + "px"; + } else { + d.scrollbarV.style.display = ""; + d.scrollbarV.firstChild.style.height = "0"; + } + if (needsH) { + d.scrollbarH.style.display = "block"; + d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0"; + d.scrollbarH.firstChild.style.width = + (measure.scrollWidth - measure.clientWidth + (measure.barWidth || d.scrollbarH.clientWidth)) + "px"; + } else { + d.scrollbarH.style.display = ""; + d.scrollbarH.firstChild.style.width = "0"; + } + if (needsH && needsV) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px"; + } else d.scrollbarFiller.style.display = ""; + if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = scrollbarWidth(d.measure) + "px"; + d.gutterFiller.style.width = d.gutters.offsetWidth + "px"; + } else d.gutterFiller.style.display = ""; + + if (mac_geLion && scrollbarWidth(d.measure) === 0) { + d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? "18px" : "12px"; + var barMouseDown = function(e) { + if (e_target(e) != d.scrollbarV && e_target(e) != d.scrollbarH) + operation(cm, onMouseDown)(e); + }; + on(d.scrollbarV, "mousedown", barMouseDown); + on(d.scrollbarH, "mousedown", barMouseDown); + } + } + + // Compute the lines that are visible in a given viewport (defaults + // the the current scroll position). viewPort may contain top, + // height, and ensure (see op.scrollToPos) properties. + function visibleLines(display, doc, viewPort) { + var top = viewPort && viewPort.top != null ? viewPort.top : display.scroller.scrollTop; + top = Math.floor(top - paddingTop(display)); + var bottom = viewPort && viewPort.bottom != null ? viewPort.bottom : top + display.wrapper.clientHeight; + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewPort && viewPort.ensure) { + var ensureFrom = viewPort.ensure.from.line, ensureTo = viewPort.ensure.to.line; + if (ensureFrom < from) + return {from: ensureFrom, + to: lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)}; + if (Math.min(ensureTo, doc.lastLine()) >= to) + return {from: lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight), + to: ensureTo}; + } + return {from: from, to: to}; + } + + // LINE NUMBERS + + // Re-align line numbers and gutter marks to compensate for + // horizontal scrolling. + function alignHorizontally(cm) { + var display = cm.display, view = display.view; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, left = comp + "px"; + for (var i = 0; i < view.length; i++) if (!view[i].hidden) { + if (cm.options.fixedGutter && view[i].gutter) + view[i].gutter.style.left = left; + var align = view[i].alignable; + if (align) for (var j = 0; j < align.length; j++) + align[j].style.left = left; + } + if (cm.options.fixedGutter) + display.gutters.style.left = (comp + gutterW) + "px"; + } + + // Used to ensure that the line number gutter is still the right + // size for the current document size. Returns true when an update + // is needed. + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) return false; + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding); + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + var width = display.gutters.offsetWidth; + display.scrollbarH.style.left = cm.options.fixedGutter ? width + "px" : 0; + display.sizer.style.marginLeft = width + "px"; + return true; + } + return false; + } + + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)); + } + + // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, + // but using getBoundingClientRect to get a sub-pixel-accurate + // result. + function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; + } + + // DISPLAY DRAWING + + // Updates the display, selection, and scrollbars, using the + // information in display.view to find out which nodes are no longer + // up-to-date. Tries to bail out early when no changes are needed, + // unless forced is true. + // Returns true if an actual update happened, false otherwise. + function updateDisplay(cm, viewPort, forced) { + var oldFrom = cm.display.viewFrom, oldTo = cm.display.viewTo, updated; + var visible = visibleLines(cm.display, cm.doc, viewPort); + for (var first = true;; first = false) { + var oldWidth = cm.display.scroller.clientWidth; + if (!updateDisplayInner(cm, visible, forced)) break; + updated = true; + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + if (cm.display.maxLineChanged && !cm.options.lineWrapping) + adjustContentWidth(cm); + + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + setDocumentHeight(cm, barMeasure); + updateScrollbars(cm, barMeasure); + if (first && cm.options.lineWrapping && oldWidth != cm.display.scroller.clientWidth) { + forced = true; + continue; + } + forced = false; + + // Clip forced viewport to actual scrollable area. + if (viewPort && viewPort.top != null) + viewPort = {top: Math.min(barMeasure.docHeight - scrollerCutOff - barMeasure.clientHeight, viewPort.top)}; + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + visible = visibleLines(cm.display, cm.doc, viewPort); + if (visible.from >= cm.display.viewFrom && visible.to <= cm.display.viewTo) + break; + } + + cm.display.updateLineNumbers = null; + if (updated) { + signalLater(cm, "update", cm); + if (cm.display.viewFrom != oldFrom || cm.display.viewTo != oldTo) + signalLater(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); + } + return updated; + } + + // Does the actual updating of the line display. Bails out + // (returning false) when there is nothing to be done and forced is + // false. + function updateDisplayInner(cm, visible, forced) { + var display = cm.display, doc = cm.doc; + if (!display.wrapper.offsetWidth) { + resetView(cm); + return; + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!forced && visible.from >= display.viewFrom && visible.to <= display.viewTo && + countDirtyView(cm) == 0) + return; + + if (maybeUpdateLineNumberWidth(cm)) + resetView(cm); + var dims = getDimensions(cm); + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size; + var from = Math.max(visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, visible.to + cm.options.viewportMargin); + if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); + if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from); + to = visualLineEndNo(cm.doc, to); + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastSizeC != display.wrapper.clientHeight; + adjustView(cm, from, to); + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px"; + + var toUpdate = countDirtyView(cm); + if (!different && toUpdate == 0 && !forced) return; + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var focused = activeElt(); + if (toUpdate > 4) display.lineDiv.style.display = "none"; + patchDisplay(cm, display.updateLineNumbers, dims); + if (toUpdate > 4) display.lineDiv.style.display = ""; + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); + + // Prevent selection and cursors from interfering with the scroll + // width. + removeChildren(display.cursorDiv); + removeChildren(display.selectionDiv); + + if (different) { + display.lastSizeC = display.wrapper.clientHeight; + startWorker(cm, 400); + } + + updateHeightsInViewport(cm); + + return true; + } + + function adjustContentWidth(cm) { + var display = cm.display; + var width = measureChar(cm, display.maxLine, display.maxLine.text.length).left; + display.maxLineChanged = false; + var minWidth = Math.max(0, width + 3); + var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + minWidth + scrollerCutOff - display.scroller.clientWidth); + display.sizer.style.minWidth = minWidth + "px"; + if (maxScrollLeft < cm.doc.scrollLeft) + setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true); + } + + function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = cm.display.heightForcer.style.top = measure.docHeight + "px"; + cm.display.gutters.style.height = Math.max(measure.docHeight, measure.clientHeight - scrollerCutOff) + "px"; + } + + // Read the actual heights of the rendered lines, and update their + // stored heights to match. + function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], height; + if (cur.hidden) continue; + if (ie_upto7) { + var bot = cur.node.offsetTop + cur.node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = cur.node.getBoundingClientRect(); + height = box.bottom - box.top; + } + var diff = cur.line.height - height; + if (height < 2) height = textHeight(display); + if (diff > .001 || diff < -.001) { + updateLineHeight(cur.line, height); + updateWidgetHeight(cur.line); + if (cur.rest) for (var j = 0; j < cur.rest.length; j++) + updateWidgetHeight(cur.rest[j]); + } + } + } + + // Read and store the height of line widgets associated with the + // given line. + function updateWidgetHeight(line) { + if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) + line.widgets[i].height = line.widgets[i].node.offsetHeight; + } + + // Do a bulk-read of the DOM positions and sizes needed to draw the + // view, so that we don't interleave reading and writing to the DOM. + function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft; + width[cm.options.gutters[i]] = n.offsetWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth}; + } + + // Sync the actual display DOM structure with display.view, removing + // nodes for lines that are no longer in view, and creating the ones + // that are not there yet, and updating the ones that are out of + // date. + function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers; + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + node.style.display = "none"; + else + node.parentNode.removeChild(node); + return next; + } + + var view = display.view, lineN = display.viewFrom; + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (lineView.hidden) { + } else if (!lineView.node) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims); + container.insertBefore(node, cur); + } else { // Already drawn + while (cur != lineView.node) cur = rm(cur); + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber; + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; + updateLineForChanges(cm, lineView, lineN, dims); + } + if (updateNumber) { + removeChildren(lineView.lineNumber); + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); + } + cur = lineView.node.nextSibling; + } + lineN += lineView.size; + } + while (cur) cur = rm(cur); + } + + // When an aspect of a line changes, a string is added to + // lineView.changes. This updates the relevant part of the line's + // DOM structure. + function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j]; + if (type == "text") updateLineText(cm, lineView); + else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); + else if (type == "class") updateLineClasses(lineView); + else if (type == "widget") updateLineWidgets(lineView, dims); + } + lineView.changes = null; + } + + // Lines with gutter elements, widgets or a background class need to + // be wrapped, and have the extra elements added to the wrapper div + function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative"); + if (lineView.text.parentNode) + lineView.text.parentNode.replaceChild(lineView.node, lineView.text); + lineView.node.appendChild(lineView.text); + if (ie_upto7) lineView.node.style.zIndex = 2; + } + return lineView.node; + } + + function updateLineBackground(lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; + if (cls) cls += " CodeMirror-linebackground"; + if (lineView.background) { + if (cls) lineView.background.className = cls; + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } + } else if (cls) { + var wrap = ensureLineWrapped(lineView); + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); + } + } + + // Wrapper around buildLineContent which will reuse the structure + // in display.externalMeasured when possible. + function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured; + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null; + lineView.measure = ext.measure; + return ext.built; + } + return buildLineContent(cm, lineView); + } + + // Redraw the line's text. Interacts with the background and text + // classes because the mode may output tokens that influence these + // classes. + function updateLineText(cm, lineView) { + var cls = lineView.text.className; + var built = getLineContent(cm, lineView); + if (lineView.text == lineView.node) lineView.node = built.pre; + lineView.text.parentNode.replaceChild(built.pre, lineView.text); + lineView.text = built.pre; + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass; + lineView.textClass = built.textClass; + updateLineClasses(lineView); + } else if (cls) { + lineView.text.className = cls; + } + } + + function updateLineClasses(lineView) { + updateLineBackground(lineView); + if (lineView.line.wrapClass) + ensureLineWrapped(lineView).className = lineView.line.wrapClass; + else if (lineView.node != lineView.text) + lineView.node.className = ""; + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; + lineView.text.className = textClass || ""; + } + + function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter); + lineView.gutter = null; + } + var markers = lineView.line.gutterMarkers; + if (cm.options.lineNumbers || markers) { + var wrap = ensureLineWrapped(lineView); + var gutterWrap = lineView.gutter = + wrap.insertBefore(elt("div", null, "CodeMirror-gutter-wrapper", "position: absolute; left: " + + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"), + lineView.text); + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + + cm.display.lineNumInnerWidth + "px")); + if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; + if (found) + gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); + } + } + } + + function updateLineWidgets(lineView, dims) { + if (lineView.alignable) lineView.alignable = null; + for (var node = lineView.node.firstChild, next; node; node = next) { + var next = node.nextSibling; + if (node.className == "CodeMirror-linewidget") + lineView.node.removeChild(node); + } + insertLineWidgets(lineView, dims); + } + + // Build a line's DOM representation from scratch + function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView); + lineView.text = lineView.node = built.pre; + if (built.bgClass) lineView.bgClass = built.bgClass; + if (built.textClass) lineView.textClass = built.textClass; + + updateLineClasses(lineView); + updateLineGutter(cm, lineView, lineN, dims); + insertLineWidgets(lineView, dims); + return lineView.node; + } + + // A lineView may contain multiple logical lines (when merged by + // collapsed spans). The widgets for all of them need to be drawn. + function insertLineWidgets(lineView, dims) { + insertLineWidgetsFor(lineView.line, lineView, dims, true); + if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) + insertLineWidgetsFor(lineView.rest[i], lineView, dims, false); + } + + function insertLineWidgetsFor(line, lineView, dims, allowAbove) { + if (!line.widgets) return; + var wrap = ensureLineWrapped(lineView); + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); + if (!widget.handleMouseEvents) node.ignoreEvents = true; + positionLineWidget(widget, node, lineView, dims); + if (allowAbove && widget.above) + wrap.insertBefore(node, lineView.gutter || lineView.text); + else + wrap.appendChild(node); + signalLater(widget, "redraw"); + } + } + + function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + (lineView.alignable || (lineView.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; + } + } + + // POSITION OBJECT + + // A Pos instance represents a position within the text. + var Pos = CodeMirror.Pos = function(line, ch) { + if (!(this instanceof Pos)) return new Pos(line, ch); + this.line = line; this.ch = ch; + }; + + // Compare two positions, return 0 if they are the same, a negative + // number when a is less, and a positive number otherwise. + var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; + + function copyPos(x) {return Pos(x.line, x.ch);} + function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } + function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } + + // SELECTION / CURSOR + + // Selection objects are immutable. A new one is created every time + // the selection changes. A selection is one or more non-overlapping + // (and non-touching) ranges, sorted, and an integer that indicates + // which one is the primary selection (the one that's scrolled into + // view, that getCursor returns, etc). + function Selection(ranges, primIndex) { + this.ranges = ranges; + this.primIndex = primIndex; + } + + Selection.prototype = { + primary: function() { return this.ranges[this.primIndex]; }, + equals: function(other) { + if (other == this) return true; + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; + for (var i = 0; i < this.ranges.length; i++) { + var here = this.ranges[i], there = other.ranges[i]; + if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; + } + return true; + }, + deepCopy: function() { + for (var out = [], i = 0; i < this.ranges.length; i++) + out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); + return new Selection(out, this.primIndex); + }, + somethingSelected: function() { + for (var i = 0; i < this.ranges.length; i++) + if (!this.ranges[i].empty()) return true; + return false; + }, + contains: function(pos, end) { + if (!end) end = pos; + for (var i = 0; i < this.ranges.length; i++) { + var range = this.ranges[i]; + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + return i; + } + return -1; + } + }; + + function Range(anchor, head) { + this.anchor = anchor; this.head = head; + } + + Range.prototype = { + from: function() { return minPos(this.anchor, this.head); }, + to: function() { return maxPos(this.anchor, this.head); }, + empty: function() { + return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; + } + }; + + // Take an unsorted, potentially overlapping set of ranges, and + // build a selection out of it. 'Consumes' ranges array (modifying + // it). + function normalizeSelection(ranges, primIndex) { + var prim = ranges[primIndex]; + ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); + primIndex = indexOf(ranges, prim); + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1]; + if (cmp(prev.to(), cur.from()) >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; + if (i <= primIndex) --primIndex; + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); + } + } + return new Selection(ranges, primIndex); + } + + function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0); + } + + // Most of the external API clips given positions to make sure they + // actually exist within the document. + function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} + function clipPos(doc, pos) { + if (pos.line < doc.first) return Pos(doc.first, 0); + var last = doc.first + doc.size - 1; + if (pos.line > last) return Pos(last, getLine(doc, last).text.length); + return clipToLen(pos, getLine(doc, pos.line).text.length); + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) return Pos(pos.line, linelen); + else if (ch < 0) return Pos(pos.line, 0); + else return pos; + } + function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} + function clipPosArray(doc, array) { + for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); + return out; + } + + // SELECTION UPDATES + + // The 'scroll' parameter given to many of these indicated whether + // the new cursor position should be scrolled into view after + // modifying the selection. + + // If shift is held or the extend flag is set, extends a range to + // include a given position (and optionally a second position). + // Otherwise, simply returns the range between the given positions. + // Used for cursor motion and such. + function extendRange(doc, range, head, other) { + if (doc.cm && doc.cm.display.shift || doc.extend) { + var anchor = range.anchor; + if (other) { + var posBefore = cmp(head, anchor) < 0; + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head; + head = other; + } else if (posBefore != (cmp(head, other) < 0)) { + head = other; + } + } + return new Range(anchor, head); + } else { + return new Range(other || head, head); + } + } + + // Extend the primary selection range, discard the rest. + function extendSelection(doc, head, other, options) { + setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); + } + + // Extend all selections (pos is an array of selections with length + // equal the number of selections) + function extendSelections(doc, heads, options) { + for (var out = [], i = 0; i < doc.sel.ranges.length; i++) + out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); + var newSel = normalizeSelection(out, doc.sel.primIndex); + setSelection(doc, newSel, options); + } + + // Updates a single range in the selection. + function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0); + ranges[i] = range; + setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); + } + + // Reset the selection to a single range. + function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options); + } + + // Give beforeSelectionChange handlers a change to influence a + // selection update. + function filterSelectionChange(doc, sel) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + this.ranges = []; + for (var i = 0; i < ranges.length; i++) + this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)); + } + }; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); + if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); + else return sel; + } + + function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done); + if (last && last.ranges) { + done[done.length - 1] = sel; + setSelectionNoUndo(doc, sel, options); + } else { + setSelection(doc, sel, options); + } + } + + // Set a new selection. + function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options); + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); + } + + function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + sel = filterSelectionChange(doc, sel); + + var bias = cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1; + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); + + if (!(options && options.scroll === false) && doc.cm) + ensureCursorVisible(doc.cm); + } + + function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) return; + + doc.sel = sel; + + if (doc.cm) + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = + doc.cm.curOp.cursorActivity = true; + signalLater(doc, "cursorActivity", doc); + } + + // Verify that the selection does not partially select any atomic + // marked ranges. + function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); + } + + // Return a selection that does not partially select any atomic + // ranges. + function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear); + var newHead = skipAtomic(doc, range.head, bias, mayClear); + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) out = sel.ranges.slice(0, i); + out[i] = new Range(newAnchor, newHead); + } + } + return out ? normalizeSelection(out, sel.primIndex) : sel; + } + + // Ensure a given position is not inside an atomic range. + function skipAtomic(doc, pos, bias, mayClear) { + var flipped = false, curPos = pos; + var dir = bias || 1; + doc.cantEdit = false; + search: for (;;) { + var line = getLine(doc, curPos.line); + if (line.markedSpans) { + for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) break; + else {--i; continue;} + } + } + if (!m.atomic) continue; + var newPos = m.find(dir < 0 ? -1 : 1); + if (cmp(newPos, curPos) == 0) { + newPos.ch += dir; + if (newPos.ch < 0) { + if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1)); + else newPos = null; + } else if (newPos.ch > line.text.length) { + if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0); + else newPos = null; + } + if (!newPos) { + if (flipped) { + // Driven in a corner -- no valid cursor position found at all + // -- try again *with* clearing, if we didn't already + if (!mayClear) return skipAtomic(doc, pos, bias, true); + // Otherwise, turn off editing until further notice, and return the start of the doc + doc.cantEdit = true; + return Pos(doc.first, 0); + } + flipped = true; newPos = pos; dir = -dir; + } + } + curPos = newPos; + continue search; + } + } + } + return curPos; + } + } + + // SELECTION DRAWING + + // Redraw the selection and/or cursor + function updateSelection(cm) { + var display = cm.display, doc = cm.doc; + var curFragment = document.createDocumentFragment(); + var selFragment = document.createDocumentFragment(); + + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + var collapsed = range.empty(); + if (collapsed || cm.options.showCursorWhenSelecting) + updateSelectionCursor(cm, range, curFragment); + if (!collapsed) + updateSelectionRange(cm, range, selFragment); + } + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); + var top = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)); + var left = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)); + display.inputDiv.style.top = top + "px"; + display.inputDiv.style.left = left + "px"; + } + + removeChildrenAndAdd(display.cursorDiv, curFragment); + removeChildrenAndAdd(display.selectionDiv, selFragment); + } + + // Draws a cursor for the given range + function updateSelectionCursor(cm, range, output) { + var pos = cursorCoords(cm, range.head, "div"); + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); + cursor.style.left = pos.left + "px"; + cursor.style.top = pos.top + "px"; + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); + otherCursor.style.display = ""; + otherCursor.style.left = pos.other.left + "px"; + otherCursor.style.top = pos.other.top + "px"; + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } + } + + // Draws the given range as a highlighted selection + function updateSelectionRange(cm, range, output) { + var display = cm.display, doc = cm.doc; + var fragment = document.createDocumentFragment(); + var padding = paddingH(cm.display), leftSide = padding.left, rightSide = display.lineSpace.offsetWidth - padding.right; + + function add(left, top, width, bottom) { + if (top < 0) top = 0; + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + + "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + + "px; height: " + (bottom - top) + "px")); + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias); + } + + iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { + var leftPos = coords(from, "left"), rightPos, left, right; + if (from == to) { + rightPos = leftPos; + left = right = leftPos.left; + } else { + rightPos = coords(to - 1, "right"); + if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } + left = leftPos.left; + right = rightPos.right; + } + if (fromArg == null && from == 0) left = leftSide; + if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part + add(left, leftPos.top, null, leftPos.bottom); + left = leftSide; + if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); + } + if (toArg == null && to == lineLen) right = rightSide; + if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) + start = leftPos; + if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) + end = rightPos; + if (left < leftSide + 1) left = leftSide; + add(left, rightPos.top, right - left, rightPos.bottom); + }); + return {start: start, end: end}; + } + + var sFrom = range.from(), sTo = range.to(); + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch); + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); + var singleVLine = visualLine(fromLine) == visualLine(toLine); + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) + add(leftSide, leftEnd.bottom, null, rightStart.top); + } + + output.appendChild(fragment); + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) return; + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursorDiv.style.visibility = ""; + if (cm.options.cursorBlinkRate > 0) + display.blinker = setInterval(function() { + display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) + cm.state.highlight.set(time, bind(highlightWorker, cm)); + } + + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.frontier < doc.first) doc.frontier = doc.first; + if (doc.frontier >= cm.display.viewTo) return; + var end = +new Date + cm.options.workTime; + var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); + + runInOp(cm, function() { + doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { + if (doc.frontier >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles; + line.styles = highlightLine(cm, line, state, true); + var ischange = !oldStyles || oldStyles.length != line.styles.length; + for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; + if (ischange) regLineChange(cm, doc.frontier, "text"); + line.stateAfter = copyState(doc.mode, state); + } else { + processLine(cm, line.text, state); + line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; + } + ++doc.frontier; + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true; + } + }); + }); + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc; + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); + for (var search = n; search > lim; --search) { + if (search <= doc.first) return doc.first; + var line = getLine(doc, search - 1); + if (line.stateAfter && (!precise || search <= doc.frontier)) return search; + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + + function getStateBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display; + if (!doc.mode.startState) return true; + var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; + if (!state) state = startState(doc.mode); + else state = copyState(doc.mode, state); + doc.iter(pos, n, function(line) { + processLine(cm, line.text, state); + var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; + line.stateAfter = save ? copyState(doc.mode, state) : null; + ++pos; + }); + if (precise) doc.frontier = pos; + return state; + } + + // POSITION MEASUREMENT + + function paddingTop(display) {return display.lineSpace.offsetTop;} + function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} + function paddingH(display) { + if (display.cachedPaddingH) return display.cachedPaddingH; + var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; + return display.cachedPaddingH = {left: parseInt(style.paddingLeft), + right: parseInt(style.paddingRight)}; + } + + // Ensure the lineView.wrapping.heights array is populated. This is + // an array of bottom offsets for the lines that make up a drawn + // line. When lineWrapping is on, there might be more than one + // height. + function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping; + var curWidth = wrapping && cm.display.scroller.clientWidth; + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = []; + if (wrapping) { + lineView.measure.width = curWidth; + var rects = lineView.text.firstChild.getClientRects(); + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1]; + if (Math.abs(cur.bottom - next.bottom) > 2) + heights.push((cur.bottom + next.top) / 2 - rect.top); + } + } + heights.push(rect.bottom - rect.top); + } + } + + // Find a line map (mapping character offsets to text nodes) and a + // measurement cache for the given line number. (A line view might + // contain multiple lines when collapsed ranges are present.) + function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + return {map: lineView.measure.map, cache: lineView.measure.cache}; + for (var i = 0; i < lineView.rest.length; i++) + if (lineView.rest[i] == line) + return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; + for (var i = 0; i < lineView.rest.length; i++) + if (lineNo(lineView.rest[i]) > lineN) + return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; + } + + // Render a line into the hidden node display.externalMeasured. Used + // when measurement is needed for a line that's not in the viewport. + function updateExternalMeasurement(cm, line) { + line = visualLine(line); + var lineN = lineNo(line); + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); + view.lineN = lineN; + var built = view.built = buildLineContent(cm, view); + view.text = built.pre; + removeChildrenAndAdd(cm.display.lineMeasure, built.pre); + return view; + } + + // Get a {top, bottom, left, right} box (in line-local coordinates) + // for a given character. + function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); + } + + // Find a line view that corresponds to the given line number. + function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + return cm.display.view[findViewIndex(cm, lineN)]; + var ext = cm.display.externalMeasured; + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + return ext; + } + + // Measurement can be split in two steps, the set-up work that + // applies to the whole line, and the measurement of the actual + // character. Functions like coordsChar, that need to do a lot of + // measurements in a row, can thus ensure that the set-up work is + // only done once. + function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line); + var view = findViewForLine(cm, lineN); + if (view && !view.text) + view = null; + else if (view && view.changes) + updateLineForChanges(cm, view, lineN, getDimensions(cm)); + if (!view) + view = updateExternalMeasurement(cm, line); + + var info = mapFromLineView(view, line, lineN); + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + }; + } + + // Given a prepared measurement object, measures the position of an + // actual character (or fetches it from the cache). + function measureCharPrepared(cm, prepared, ch, bias) { + if (prepared.before) ch = -1; + var key = ch + (bias || ""), found; + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key]; + } else { + if (!prepared.rect) + prepared.rect = prepared.view.text.getBoundingClientRect(); + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect); + prepared.hasHeights = true; + } + found = measureCharInner(cm, prepared, ch, bias); + if (!found.bogus) prepared.cache[key] = found; + } + return {left: found.left, right: found.right, top: found.top, bottom: found.bottom}; + } + + var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; + + function measureCharInner(cm, prepared, ch, bias) { + var map = prepared.map; + + var node, start, end, collapse; + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + var mStart = map[i], mEnd = map[i + 1]; + if (ch < mStart) { + start = 0; end = 1; + collapse = "left"; + } else if (ch < mEnd) { + start = ch - mStart; + end = start + 1; + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart; + start = end - 1; + if (ch >= mEnd) collapse = "right"; + } + if (start != null) { + node = map[i + 2]; + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + collapse = bias; + if (bias == "left" && start == 0) + while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2]; + collapse = "left"; + } + if (bias == "right" && start == mEnd - mStart) + while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2]; + collapse = "right"; + } + break; + } + } + + var rect; + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + while (start && isExtendingChar(prepared.line.text.charAt(mStart + start))) --start; + while (mStart + end < mEnd && isExtendingChar(prepared.line.text.charAt(mStart + end))) ++end; + if (ie_upto8 && start == 0 && end == mEnd - mStart) { + rect = node.parentNode.getBoundingClientRect(); + } else if (ie && cm.options.lineWrapping) { + var rects = range(node, start, end).getClientRects(); + if (rects.length) + rect = rects[bias == "right" ? rects.length - 1 : 0]; + else + rect = nullRect; + } else { + rect = range(node, start, end).getBoundingClientRect(); + } + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) collapse = bias = "right"; + var rects; + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + rect = rects[bias == "right" ? rects.length - 1 : 0]; + else + rect = node.getBoundingClientRect(); + } + if (ie_upto8 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0]; + if (rSpan) + rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; + else + rect = nullRect; + } + + var top, bot = (rect.bottom + rect.top) / 2 - prepared.rect.top; + var heights = prepared.view.measure.heights; + for (var i = 0; i < heights.length - 1; i++) + if (bot < heights[i]) break; + top = i ? heights[i - 1] : 0; bot = heights[i]; + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot}; + if (!rect.left && !rect.right) result.bogus = true; + return result; + } + + function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {}; + lineView.measure.heights = null; + if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) + lineView.measure.caches[i] = {}; + } + } + + function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null; + removeChildren(cm.display.lineMeasure); + for (var i = 0; i < cm.display.view.length; i++) + clearLineMeasurementCacheFor(cm.display.view[i]); + } + + function clearCaches(cm) { + clearLineMeasurementCache(cm); + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; + if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; + cm.display.lineNumChars = null; + } + + function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } + function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } + + // Converts a {top, bottom, left, right} box from line-local + // coordinates into another coordinate system. Context may be one of + // "line", "div" (display.lineDiv), "local"/null (editor), or "page". + function intoCoordSystem(cm, lineObj, rect, context) { + if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { + var size = widgetHeight(lineObj.widgets[i]); + rect.top += size; rect.bottom += size; + } + if (context == "line") return rect; + if (!context) context = "local"; + var yOff = heightAtLine(lineObj); + if (context == "local") yOff += paddingTop(cm.display); + else yOff -= cm.display.viewOffset; + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect; + } + + // Coverts a box from "div" coords to another coordinate system. + // Context may be "window", "page", "div", or "local"/null. + function fromCoordSystem(cm, coords, context) { + if (context == "div") return coords; + var left = coords.left, top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(); + top -= pageScrollY(); + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect(); + left += localBox.left; + top += localBox.top; + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; + } + + function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) lineObj = getLine(cm.doc, pos.line); + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); + } + + // Returns a box for a given cursor position, which may have an + // 'other' property containing the position of the secondary cursor + // on a bidi boundary. + function cursorCoords(cm, pos, context, lineObj, preparedMeasure) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left"); + if (right) m.left = m.right; else m.right = m.left; + return intoCoordSystem(cm, lineObj, m, context); + } + function getBidi(ch, partPos) { + var part = order[partPos], right = part.level % 2; + if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { + part = order[--partPos]; + ch = bidiRight(part) - (part.level % 2 ? 0 : 1); + right = true; + } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { + part = order[++partPos]; + ch = bidiLeft(part) - part.level % 2; + right = false; + } + if (right && ch == part.to && ch > part.from) return get(ch - 1); + return get(ch, right); + } + var order = getOrder(lineObj), ch = pos.ch; + if (!order) return get(ch); + var partPos = getBidiPartAt(order, ch); + var val = getBidi(ch, partPos); + if (bidiOther != null) val.other = getBidi(ch, bidiOther); + return val; + } + + // Used to cheaply estimate the coordinates for a position. Used for + // intermediate scroll updates. + function estimateCoords(cm, pos) { + var left = 0, pos = clipPos(cm.doc, pos); + if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; + var lineObj = getLine(cm.doc, pos.line); + var top = heightAtLine(lineObj) + paddingTop(cm.display); + return {left: left, right: left, top: top, bottom: top + lineObj.height}; + } + + // Positions returned by coordsChar contain some extra information. + // xRel is the relative x position of the input coordinates compared + // to the found position (so xRel > 0 means the coordinates are to + // the right of the character position, for example). When outside + // is true, that means the coordinates lie outside the line's + // vertical range. + function PosWithInfo(line, ch, outside, xRel) { + var pos = Pos(line, ch); + pos.xRel = xRel; + if (outside) pos.outside = true; + return pos; + } + + // Compute the character position closest to the given coordinates. + // Input must be lineSpace-local ("div" coordinate system). + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) return PosWithInfo(doc.first, 0, true, -1); + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; + if (lineN > last) + return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); + if (x < 0) x = 0; + + var lineObj = getLine(doc, lineN); + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y); + var merged = collapsedSpanAtEnd(lineObj); + var mergedPos = merged && merged.find(0, true); + if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) + lineN = lineNo(lineObj = mergedPos.to.line); + else + return found; + } + } + + function coordsCharInner(cm, lineObj, lineNo, x, y) { + var innerOff = y - heightAtLine(lineObj); + var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; + var preparedMeasure = prepareMeasureForLine(cm, lineObj); + + function getX(ch) { + var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); + wrongLine = true; + if (innerOff > sp.bottom) return sp.left - adjust; + else if (innerOff < sp.top) return sp.left + adjust; + else wrongLine = false; + return sp.left; + } + + var bidi = getOrder(lineObj), dist = lineObj.text.length; + var from = lineLeft(lineObj), to = lineRight(lineObj); + var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; + + if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); + // Do a binary search between these bounds. + for (;;) { + if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { + var ch = x < fromX || x - fromX <= toX - x ? from : to; + var xDiff = x - (ch == from ? fromX : toX); + while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; + var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, + xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); + return pos; + } + var step = Math.ceil(dist / 2), middle = from + step; + if (bidi) { + middle = from; + for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); + } + var middleX = getX(middle); + if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} + else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} + } + } + + var measureText; + // Compute the default text height. + function textHeight(display) { + if (display.cachedTextHeight != null) return display.cachedTextHeight; + if (measureText == null) { + measureText = elt("pre"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) display.cachedTextHeight = height; + removeChildren(display.measure); + return height || 1; + } + + // Compute the default character width. + function charWidth(display) { + if (display.cachedCharWidth != null) return display.cachedCharWidth; + var anchor = elt("span", "xxxxxxxxxx"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(display.measure, pre); + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; + if (width > 2) display.cachedCharWidth = width; + return width || 10; + } + + // OPERATIONS + + // Operations are used to wrap a series of changes to the editor + // state in such a way that each change won't have to update the + // cursor and display (which would be awkward, slow, and + // error-prone). Instead, display updates are batched and then all + // combined and executed at once. + + var nextOpId = 0; + // Start a new operation. + function startOperation(cm) { + cm.curOp = { + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: null, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivity: false, // Whether to fire a cursorActivity event + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + id: ++nextOpId // Unique ID + }; + if (!delayedCallbackDepth++) delayedCallbacks = []; + } + + // Finish an operation, updating the display and signalling delayed events + function endOperation(cm) { + var op = cm.curOp, doc = cm.doc, display = cm.display; + cm.curOp = null; + + if (op.updateMaxLine) findMaxLine(cm); + + // If it looks like an update might be needed, call updateDisplay + if (op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping) { + var updated = updateDisplay(cm, {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); + if (cm.display.scroller.offsetHeight) cm.doc.scrollTop = cm.display.scroller.scrollTop; + } + // If no update was run, but the selection changed, redraw that. + if (!updated && op.selectionChanged) updateSelection(cm); + if (!updated && op.startHeight != cm.doc.height) updateScrollbars(cm); + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null && display.scroller.scrollTop != op.scrollTop) { + var top = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); + display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = top; + } + if (op.scrollLeft != null && display.scroller.scrollLeft != op.scrollLeft) { + var left = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft)); + display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = left; + alignHorizontally(cm); + } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var coords = scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos.from), + clipPos(cm.doc, op.scrollToPos.to), op.scrollToPos.margin); + if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); + } + + if (op.selectionChanged) restartBlink(cm); + + if (cm.state.focused && op.updateInput) + resetInput(cm, op.typing); + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; + if (hidden) for (var i = 0; i < hidden.length; ++i) + if (!hidden[i].lines.length) signal(hidden[i], "hide"); + if (unhidden) for (var i = 0; i < unhidden.length; ++i) + if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); + + var delayed; + if (!--delayedCallbackDepth) { + delayed = delayedCallbacks; + delayedCallbacks = null; + } + // Fire change events, and delayed event handlers + if (op.changeObjs) { + for (var i = 0; i < op.changeObjs.length; i++) + signal(cm, "change", cm, op.changeObjs[i]); + signal(cm, "changes", cm, op.changeObjs); + } + if (op.cursorActivity) signal(cm, "cursorActivity", cm); + if (delayed) for (var i = 0; i < delayed.length; ++i) delayed[i](); + } + + // Run the given function in an operation + function runInOp(cm, f) { + if (cm.curOp) return f(); + startOperation(cm); + try { return f(); } + finally { endOperation(cm); } + } + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm, f) { + return function() { + if (cm.curOp) return f.apply(cm, arguments); + startOperation(cm); + try { return f.apply(cm, arguments); } + finally { endOperation(cm); } + }; + } + // Used to add methods to editor and doc instances, wrapping them in + // operations. + function methodOp(f) { + return function() { + if (this.curOp) return f.apply(this, arguments); + startOperation(this); + try { return f.apply(this, arguments); } + finally { endOperation(this); } + }; + } + function docMethodOp(f) { + return function() { + var cm = this.cm; + if (!cm || cm.curOp) return f.apply(this, arguments); + startOperation(cm); + try { return f.apply(this, arguments); } + finally { endOperation(cm); } + }; + } + + // VIEW TRACKING + + // These objects are used to represent the visible (currently drawn) + // part of the document. A LineView may correspond to multiple + // logical lines, if those are connected by collapsed ranges. + function LineView(doc, line, lineN) { + // The starting line + this.line = line; + // Continuing lines, if any + this.rest = visualLineContinued(line); + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; + this.node = this.text = null; + this.hidden = lineIsHidden(doc, line); + } + + // Create a range of LineView objects for the given lines. + function buildViewArray(cm, from, to) { + var array = [], nextPos; + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); + nextPos = pos + view.size; + array.push(view); + } + return array; + } + + // Updates the display.view data structure for a given change to the + // document. From and to are in pre-change coordinates. Lendiff is + // the amount of lines added or subtracted by the change. This is + // used for changes that span multiple lines, or change the way + // lines are divided into visual lines. regLineChange (below) + // registers single-line changes. + function regChange(cm, from, to, lendiff) { + if (from == null) from = cm.doc.first; + if (to == null) to = cm.doc.first + cm.doc.size; + if (!lendiff) lendiff = 0; + + var display = cm.display; + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + display.updateLineNumbers = from; + + cm.curOp.viewChanged = true; + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + resetView(cm); + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm); + } else { + display.viewFrom += lendiff; + display.viewTo += lendiff; + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm); + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cut) { + display.view = display.view.slice(cut.index); + display.viewFrom = cut.lineN; + display.viewTo += lendiff; + } else { + resetView(cm); + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut = viewCuttingPoint(cm, from, from, -1); + if (cut) { + display.view = display.view.slice(0, cut.index); + display.viewTo = cut.lineN; + } else { + resetView(cm); + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1); + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)); + display.viewTo += lendiff; + } else { + resetView(cm); + } + } + + var ext = display.externalMeasured; + if (ext) { + if (to < ext.lineN) + ext.lineN += lendiff; + else if (from < ext.lineN + ext.size) + display.externalMeasured = null; + } + } + + // Register a change to a single line. Type must be one of "text", + // "gutter", "class", "widget" + function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true; + var display = cm.display, ext = cm.display.externalMeasured; + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + display.externalMeasured = null; + + if (line < display.viewFrom || line >= display.viewTo) return; + var lineView = display.view[findViewIndex(cm, line)]; + if (lineView.node == null) return; + var arr = lineView.changes || (lineView.changes = []); + if (indexOf(arr, type) == -1) arr.push(type); + } + + // Clear the view. + function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first; + cm.display.view = []; + cm.display.viewOffset = 0; + } + + // Find the view element corresponding to a given line. Return null + // when the line isn't visible. + function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) return null; + n -= cm.display.viewFrom; + if (n < 0) return null; + var view = cm.display.view; + for (var i = 0; i < view.length; i++) { + n -= view[i].size; + if (n < 0) return i; + } + } + + function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view; + if (!sawCollapsedSpans) return {index: index, lineN: newN}; + for (var i = 0, n = cm.display.viewFrom; i < index; i++) + n += view[i].size; + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) return null; + diff = (n + view[index].size) - oldN; + index++; + } else { + diff = n - oldN; + } + oldN += diff; newN += diff; + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) return null; + newN += dir * view[index - (dir < 0 ? 1 : 0)].size; + index += dir; + } + return {index: index, lineN: newN}; + } + + // Force the view to cover a given range, adding empty view element + // or clipping off existing ones as needed. + function adjustView(cm, from, to) { + var display = cm.display, view = display.view; + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to); + display.viewFrom = from; + } else { + if (display.viewFrom > from) + display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); + else if (display.viewFrom < from) + display.view = display.view.slice(findViewIndex(cm, from)); + display.viewFrom = from; + if (display.viewTo < to) + display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); + else if (display.viewTo > to) + display.view = display.view.slice(0, findViewIndex(cm, to)); + } + display.viewTo = to; + } + + // Count the number of lines in the view whose DOM representation is + // out of date (or nonexistent). + function countDirtyView(cm) { + var view = cm.display.view, dirty = 0; + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; + } + return dirty; + } + + // INPUT HANDLING + + // Poll for input changes, using the normal rate of polling. This + // runs as long as the editor is focused. + function slowPoll(cm) { + if (cm.display.pollingFast) return; + cm.display.poll.set(cm.options.pollInterval, function() { + readInput(cm); + if (cm.state.focused) slowPoll(cm); + }); + } + + // When an event has just come in that is likely to add or change + // something in the input textarea, we poll faster, to ensure that + // the change appears on the screen quickly. + function fastPoll(cm) { + var missed = false; + cm.display.pollingFast = true; + function p() { + var changed = readInput(cm); + if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);} + else {cm.display.pollingFast = false; slowPoll(cm);} + } + cm.display.poll.set(20, p); + } + + // Read input from the textarea, and update the document to match. + // When something is selected, it is present in the textarea, and + // selected (unless it is huge, in which case a placeholder is + // used). When nothing is selected, the cursor sits after previously + // seen text (can be empty), which is stored in prevInput (we must + // not reset the textarea when typing, because that breaks IME). + function readInput(cm) { + var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc; + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.options.disableInput) return false; + var text = input.value; + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) return false; + // Work around nonsensical selection resetting in IE9/10 + if (ie && !ie_upto8 && cm.display.inputHasSelection === text) { + resetInput(cm); + return false; + } + + var withOp = !cm.curOp; + if (withOp) startOperation(cm); + cm.display.shift = false; + + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; + var inserted = text.slice(same), textLines = splitLines(inserted); + + // When pasing N lines into N selections, insert one line per selection + var multiPaste = cm.state.pasteIncoming && textLines.length > 1 && doc.sel.ranges.length == textLines.length; + + // Normal behavior is to insert the new text into every selection + for (var i = doc.sel.ranges.length - 1; i >= 0; i--) { + var range = doc.sel.ranges[i]; + var from = range.from(), to = range.to(); + // Handle deletion + if (same < prevInput.length) + from = Pos(from.line, from.ch - (prevInput.length - same)); + // Handle overwrite + else if (cm.state.overwrite && range.empty() && !cm.state.pasteIncoming) + to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); + var updateInput = cm.curOp.updateInput; + var changeEvent = {from: from, to: to, text: multiPaste ? [textLines[i]] : textLines, + origin: cm.state.pasteIncoming ? "paste" : cm.state.cutIncoming ? "cut" : "+input"}; + makeChange(cm.doc, changeEvent); + signalLater(cm, "inputRead", cm, changeEvent); + // When an 'electric' character is inserted, immediately trigger a reindent + if (inserted && !cm.state.pasteIncoming && cm.options.electricChars && + cm.options.smartIndent && range.head.ch < 100 && + (!i || doc.sel.ranges[i - 1].head.line != range.head.line)) { + var electric = cm.getModeAt(range.head).electricChars; + if (electric) for (var j = 0; j < electric.length; j++) + if (inserted.indexOf(electric.charAt(j)) > -1) { + indentLine(cm, range.head.line, "smart"); + break; + } + } + } + ensureCursorVisible(cm); + cm.curOp.updateInput = updateInput; + cm.curOp.typing = true; + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) input.value = cm.display.prevInput = ""; + else cm.display.prevInput = text; + if (withOp) endOperation(cm); + cm.state.pasteIncoming = cm.state.cutIncoming = false; + return true; + } + + // Reset the input to correspond to the selection (or to be empty, + // when not typing and nothing is selected) + function resetInput(cm, typing) { + var minimal, selected, doc = cm.doc; + if (cm.somethingSelected()) { + cm.display.prevInput = ""; + var range = doc.sel.primary(); + minimal = hasCopyEvent && + (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); + var content = minimal ? "-" : selected || cm.getSelection(); + cm.display.input.value = content; + if (cm.state.focused) selectInput(cm.display.input); + if (ie && !ie_upto8) cm.display.inputHasSelection = content; + } else if (!typing) { + cm.display.prevInput = cm.display.input.value = ""; + if (ie && !ie_upto8) cm.display.inputHasSelection = null; + } + cm.display.inaccurateSelection = minimal; + } + + function focusInput(cm) { + if (cm.options.readOnly != "nocursor" && (!mobile || activeElt() != cm.display.input)) + cm.display.input.focus(); + } + + function ensureFocus(cm) { + if (!cm.state.focused) { focusInput(cm); onFocus(cm); } + } + + function isReadOnly(cm) { + return cm.options.readOnly || cm.doc.cantEdit; + } + + // EVENT HANDLERS + + // Attach the necessary event handlers when initializing the editor + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + // Older IE's will not fire a second mousedown for a double click + if (ie_upto10) + on(d.scroller, "dblclick", operation(cm, function(e) { + if (signalDOMEvent(cm, e)) return; + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; + e_preventDefault(e); + var word = findWordAt(cm.doc, pos); + extendSelection(cm.doc, word.anchor, word.head); + })); + else + on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); + // Prevent normal selection in the editor (we handle our own) + on(d.lineSpace, "selectstart", function(e) { + if (!eventInWidget(d, e)) e_preventDefault(e); + }); + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function() { + if (d.scroller.clientHeight) { + setScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + on(d.scrollbarV, "scroll", function() { + if (d.scroller.clientHeight) setScrollTop(cm, d.scrollbarV.scrollTop); + }); + on(d.scrollbarH, "scroll", function() { + if (d.scroller.clientHeight) setScrollLeft(cm, d.scrollbarH.scrollLeft); + }); + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); + on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); + + // Prevent clicks in the scrollbars from killing focus + function reFocus() { if (cm.state.focused) setTimeout(bind(focusInput, cm), 0); } + on(d.scrollbarH, "mousedown", reFocus); + on(d.scrollbarV, "mousedown", reFocus); + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + + // When the window resizes, we need to refresh active editors. + var resizeTimer; + function onResize() { + if (resizeTimer == null) resizeTimer = setTimeout(function() { + resizeTimer = null; + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = knownScrollbarWidth = null; + cm.setSize(); + }, 100); + } + on(window, "resize", onResize); + // The above handler holds on to the editor and its data + // structures. Here we poll to unregister it when the editor is no + // longer in the document, so that it can be garbage-collected. + function unregister() { + if (contains(document.body, d.wrapper)) setTimeout(unregister, 5000); + else off(window, "resize", onResize); + } + setTimeout(unregister, 5000); + + on(d.input, "keyup", operation(cm, onKeyUp)); + on(d.input, "input", function() { + if (ie && !ie_upto8 && cm.display.inputHasSelection) cm.display.inputHasSelection = null; + fastPoll(cm); + }); + on(d.input, "keydown", operation(cm, onKeyDown)); + on(d.input, "keypress", operation(cm, onKeyPress)); + on(d.input, "focus", bind(onFocus, cm)); + on(d.input, "blur", bind(onBlur, cm)); + + function drag_(e) { + if (!signalDOMEvent(cm, e)) e_stop(e); + } + if (cm.options.dragDrop) { + on(d.scroller, "dragstart", function(e){onDragStart(cm, e);}); + on(d.scroller, "dragenter", drag_); + on(d.scroller, "dragover", drag_); + on(d.scroller, "drop", operation(cm, onDrop)); + } + on(d.scroller, "paste", function(e) { + if (eventInWidget(d, e)) return; + cm.state.pasteIncoming = true; + focusInput(cm); + fastPoll(cm); + }); + on(d.input, "paste", function() { + cm.state.pasteIncoming = true; + fastPoll(cm); + }); + + function prepareCopy(e) { + if (d.inaccurateSelection) { + d.prevInput = ""; + d.inaccurateSelection = false; + d.input.value = cm.getSelection(); + selectInput(d.input); + } + if (e.type == "cut") cm.state.cutIncoming = true; + } + on(d.input, "cut", prepareCopy); + on(d.input, "copy", prepareCopy); + + // Needed to handle Tab key in KHTML + if (khtml) on(d.sizer, "mouseup", function() { + if (activeElt() == d.input) d.input.blur(); + focusInput(cm); + }); + } + + // MOUSE EVENTS + + // Return true when the given mouse event happened in a widget + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || n.ignoreEvents || n.parentNode == display.sizer && n != display.mover) return true; + } + } + + // Given a mouse event, find the corresponding position. If liberal + // is false, it checks whether a gutter or scrollbar was clicked, + // and returns null if it was. forRect is used by rectangular + // selections, and tries to estimate a character position even for + // coordinates beyond the right of the text. + function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display; + if (!liberal) { + var target = e_target(e); + if (target == display.scrollbarH || target == display.scrollbarV || + target == display.scrollbarFiller || target == display.gutterFiller) return null; + } + var x, y, space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top; } + catch (e) { return null; } + var coords = coordsChar(cm, x, y), line; + if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; + coords = Pos(coords.line, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff); + } + return coords; + } + + // A mouse down can be a single click, double click, triple click, + // start of selection drag, start of text drag, new cursor + // (ctrl-click), rectangle drag (alt-drag), or xwin + // middle-click-paste. Or it might be a click on something we should + // not interfere with, such as a scrollbar or widget. + function onMouseDown(e) { + if (signalDOMEvent(this, e)) return; + var cm = this, display = cm.display; + display.shift = e.shiftKey; + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false; + setTimeout(function(){display.scroller.draggable = true;}, 100); + } + return; + } + if (clickInGutter(cm, e)) return; + var start = posFromMouse(cm, e); + window.focus(); + + switch (e_button(e)) { + case 1: + if (start) + leftButtonDown(cm, e, start); + else if (e_target(e) == display.scroller) + e_preventDefault(e); + break; + case 2: + if (webkit) cm.state.lastMiddleDown = +new Date; + if (start) extendSelection(cm.doc, start); + setTimeout(bind(focusInput, cm), 20); + e_preventDefault(e); + break; + case 3: + if (captureRightClick) onContextMenu(cm, e); + break; + } + } + + var lastClick, lastDoubleClick; + function leftButtonDown(cm, e, start) { + setTimeout(bind(ensureFocus, cm), 0); + + var now = +new Date, type; + if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { + type = "triple"; + } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { + type = "double"; + lastDoubleClick = {time: now, pos: start}; + } else { + type = "single"; + lastClick = {time: now, pos: start}; + } + + var sel = cm.doc.sel, addNew = mac ? e.metaKey : e.ctrlKey; + if (cm.options.dragDrop && dragAndDrop && !addNew && !isReadOnly(cm) && + type == "single" && sel.contains(start) > -1 && sel.somethingSelected()) + leftButtonStartDrag(cm, e, start); + else + leftButtonSelect(cm, e, start, type, addNew); + } + + // Start a text drag. When it ends, see if any dragging actually + // happen, and treat as a click if it didn't. + function leftButtonStartDrag(cm, e, start) { + var display = cm.display; + var dragEnd = operation(cm, function(e2) { + if (webkit) display.scroller.draggable = false; + cm.state.draggingText = false; + off(document, "mouseup", dragEnd); + off(display.scroller, "drop", dragEnd); + if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { + e_preventDefault(e2); + extendSelection(cm.doc, start); + focusInput(cm); + // Work around unexplainable focus problem in IE9 (#2127) + if (ie_upto10 && !ie_upto8) + setTimeout(function() {document.body.focus(); focusInput(cm);}, 20); + } + }); + // Let the drag handler handle this. + if (webkit) display.scroller.draggable = true; + cm.state.draggingText = dragEnd; + // IE's approach to draggable + if (display.scroller.dragDrop) display.scroller.dragDrop(); + on(document, "mouseup", dragEnd); + on(display.scroller, "drop", dragEnd); + } + + // Normal selection, as opposed to text dragging. + function leftButtonSelect(cm, e, start, type, addNew) { + var display = cm.display, doc = cm.doc; + e_preventDefault(e); + + var ourRange, ourIndex, startSel = doc.sel; + if (addNew) { + ourIndex = doc.sel.contains(start); + if (ourIndex > -1) + ourRange = doc.sel.ranges[ourIndex]; + else + ourRange = new Range(start, start); + } else { + ourRange = doc.sel.primary(); + } + + if (e.altKey) { + type = "rect"; + if (!addNew) ourRange = new Range(start, start); + start = posFromMouse(cm, e, true, true); + ourIndex = -1; + } else if (type == "double") { + var word = findWordAt(doc, start); + if (cm.display.shift || doc.extend) + ourRange = extendRange(doc, ourRange, word.anchor, word.head); + else + ourRange = word; + } else if (type == "triple") { + var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); + if (cm.display.shift || doc.extend) + ourRange = extendRange(doc, ourRange, line.anchor, line.head); + else + ourRange = line; + } else { + ourRange = extendRange(doc, ourRange, start); + } + + if (!addNew) { + ourIndex = 0; + setSelection(doc, new Selection([ourRange], 0), sel_mouse); + } else if (ourIndex > -1) { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + } else { + ourIndex = doc.sel.ranges.length; + setSelection(doc, normalizeSelection(doc.sel.ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}); + } + + var lastPos = start; + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) return; + lastPos = pos; + + if (type == "rect") { + var ranges = [], tabSize = cm.options.tabSize; + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); + if (left == right) + ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); + else if (text.length > leftPos) + ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); + } + if (!ranges.length) ranges.push(new Range(start, start)); + setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), sel_mouse); + } else { + var oldRange = ourRange; + var anchor = oldRange.anchor, head = pos; + if (type != "single") { + if (type == "double") + var range = findWordAt(doc, pos); + else + var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); + if (cmp(range.anchor, anchor) > 0) { + head = range.head; + anchor = minPos(oldRange.from(), range.anchor); + } else { + head = range.anchor; + anchor = maxPos(oldRange.to(), range.head); + } + } + var ranges = startSel.ranges.slice(0); + ranges[ourIndex] = new Range(clipPos(doc, anchor), head); + setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); + } + } + + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true, type == "rect"); + if (!cur) return; + if (cmp(cur, lastPos) != 0) { + ensureFocus(cm); + extendTo(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) setTimeout(operation(cm, function() { + if (counter != curCount) return; + display.scroller.scrollTop += outside; + extend(e); + }), 50); + } + } + + function done(e) { + counter = Infinity; + e_preventDefault(e); + focusInput(cm); + off(document, "mousemove", move); + off(document, "mouseup", up); + doc.history.lastSelOrigin = null; + } + + var move = operation(cm, function(e) { + if ((ie && !ie_upto9) ? !e.buttons : !e_button(e)) done(e); + else extend(e); + }); + var up = operation(cm, done); + on(document, "mousemove", move); + on(document, "mouseup", up); + } + + // Determines whether an event happened in the gutter, and fires the + // handlers for the corresponding event. + function gutterEvent(cm, e, type, prevent, signalfn) { + try { var mX = e.clientX, mY = e.clientY; } + catch(e) { return false; } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; + if (prevent) e_preventDefault(e); + + var display = cm.display; + var lineBox = display.lineDiv.getBoundingClientRect(); + + if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.options.gutters[i]; + signalfn(cm, type, cm, line, gutter, e); + return e_defaultPrevented(e); + } + } + } + + function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true, signalLater); + } + + // Kludge to work around strange IE behavior where it'll sometimes + // re-fire a series of drag-related events right after the drop (#1551) + var lastDrop = 0; + + function onDrop(e) { + var cm = this; + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + return; + e_preventDefault(e); + if (ie_upto10) lastDrop = +new Date; + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || isReadOnly(cm)) return; + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function(file, i) { + var reader = new FileReader; + reader.onload = function() { + text[i] = reader.result; + if (++read == n) { + pos = clipPos(cm.doc, pos); + var change = {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}; + makeChange(cm.doc, change); + setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); + } + }; + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) loadFile(files[i], i); + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(bind(focusInput, cm), 20); + return; + } + try { + var text = e.dataTransfer.getData("Text"); + if (text) { + var selected = cm.state.draggingText && cm.listSelections(); + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); + if (selected) for (var i = 0; i < selected.length; ++i) + replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); + cm.replaceSelection(text, "around", "paste"); + focusInput(cm); + } + } + catch(e){} + } + } + + function onDragStart(cm, e) { + if (ie_upto10 && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; + + e.dataTransfer.setData("Text", cm.getSelection()); + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (presto) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (presto) img.parentNode.removeChild(img); + } + } + + // SCROLL EVENTS + + // Sync the scrollable area and scrollbars, ensure the viewport + // covers the visible area. + function setScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) return; + cm.doc.scrollTop = val; + if (!gecko) updateDisplay(cm, {top: val}); + if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; + if (cm.display.scrollbarV.scrollTop != val) cm.display.scrollbarV.scrollTop = val; + if (gecko) updateDisplay(cm); + startWorker(cm, 100); + } + // Sync scroller and scrollbar, ensure the gutter elements are + // aligned. + function setScrollLeft(cm, val, isScroller) { + if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; + if (cm.display.scrollbarH.scrollLeft != val) cm.display.scrollbarH.scrollLeft = val; + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) wheelPixelsPerUnit = -.53; + else if (gecko) wheelPixelsPerUnit = 15; + else if (chrome) wheelPixelsPerUnit = -.7; + else if (safari) wheelPixelsPerUnit = -1/3; + + function onScrollWheel(cm, e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; + else if (dy == null) dy = e.wheelDelta; + + var display = cm.display, scroll = display.scroller; + // Quit if there's nothing to scroll here + if (!(dx && scroll.scrollWidth > scroll.clientWidth || + dy && scroll.scrollHeight > scroll.clientHeight)) return; + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur; + break outer; + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { + if (dy) + setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); + setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); + e_preventDefault(e); + display.wheelStartX = null; // Abort measurement, if in progress + return; + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit; + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; + if (pixels < 0) top = Math.max(0, top + pixels - 50); + else bot = Math.min(cm.doc.height, bot + pixels + 50); + updateDisplay(cm, {top: top, bottom: bot}); + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; display.wheelDY = dy; + setTimeout(function() { + if (display.wheelStartX == null) return; + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX); + display.wheelStartX = display.wheelStartY = null; + if (!sample) return; + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; display.wheelDY += dy; + } + } + } + + // KEY EVENTS + + // Run a handler that was bound to a key. + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) return false; + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false; + var prevShift = cm.display.shift, done = false; + try { + if (isReadOnly(cm)) cm.state.suppressEdits = true; + if (dropShift) cm.display.shift = false; + done = bound(cm) != Pass; + } finally { + cm.display.shift = prevShift; + cm.state.suppressEdits = false; + } + return done; + } + + // Collect the currently active keymaps. + function allKeyMaps(cm) { + var maps = cm.state.keyMaps.slice(0); + if (cm.options.extraKeys) maps.push(cm.options.extraKeys); + maps.push(cm.options.keyMap); + return maps; + } + + var maybeTransition; + // Handle a key from the keydown event. + function handleKeyBinding(cm, e) { + // Handle automatic keymap transitions + var startMap = getKeyMap(cm.options.keyMap), next = startMap.auto; + clearTimeout(maybeTransition); + if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() { + if (getKeyMap(cm.options.keyMap) == startMap) { + cm.options.keyMap = (next.call ? next.call(null, cm) : next); + keyMapChanged(cm); + } + }, 50); + + var name = keyName(e, true), handled = false; + if (!name) return false; + var keymaps = allKeyMaps(cm); + + if (e.shiftKey) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + handled = lookupKey("Shift-" + name, keymaps, function(b) {return doHandleBinding(cm, b, true);}) + || lookupKey(name, keymaps, function(b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + return doHandleBinding(cm, b); + }); + } else { + handled = lookupKey(name, keymaps, function(b) { return doHandleBinding(cm, b); }); + } + + if (handled) { + e_preventDefault(e); + restartBlink(cm); + signalLater(cm, "keyHandled", cm, name, e); + } + return handled; + } + + // Handle a key from the keypress event + function handleCharBinding(cm, e, ch) { + var handled = lookupKey("'" + ch + "'", allKeyMaps(cm), + function(b) { return doHandleBinding(cm, b, true); }); + if (handled) { + e_preventDefault(e); + restartBlink(cm); + signalLater(cm, "keyHandled", cm, "'" + ch + "'", e); + } + return handled; + } + + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + ensureFocus(cm); + if (signalDOMEvent(cm, e)) return; + // IE does strange things with escape. + if (ie_upto10 && e.keyCode == 27) e.returnValue = false; + var code = e.keyCode; + cm.display.shift = code == 16 || e.shiftKey; + var handled = handleKeyBinding(cm, e); + if (presto) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + cm.replaceSelection("", null, "cut"); + } + } + + function onKeyUp(e) { + if (signalDOMEvent(this, e)) return; + if (e.keyCode == 16) this.doc.sel.shift = false; + } + + function onKeyPress(e) { + var cm = this; + if (signalDOMEvent(cm, e)) return; + var keyCode = e.keyCode, charCode = e.charCode; + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} + if (((presto && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return; + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + if (handleCharBinding(cm, e, ch)) return; + if (ie && !ie_upto8) cm.display.inputHasSelection = null; + fastPoll(cm); + } + + // FOCUS/BLUR EVENTS + + function onFocus(cm) { + if (cm.options.readOnly == "nocursor") return; + if (!cm.state.focused) { + signal(cm, "focus", cm); + cm.state.focused = true; + if (cm.display.wrapper.className.search(/\bCodeMirror-focused\b/) == -1) + cm.display.wrapper.className += " CodeMirror-focused"; + if (!cm.curOp) { + resetInput(cm); + if (webkit) setTimeout(bind(resetInput, cm, true), 0); // Issue #1730 + } + } + slowPoll(cm); + restartBlink(cm); + } + function onBlur(cm) { + if (cm.state.focused) { + signal(cm, "blur", cm); + cm.state.focused = false; + cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-focused", ""); + } + clearInterval(cm.display.blinker); + setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); + } + + // CONTEXT MENU HANDLING + + var detectingSelectAll; + // To make the context menu work, we need to briefly unhide the + // textarea (making it as unobtrusive as possible) to let the + // right-click take effect on it. + function onContextMenu(cm, e) { + if (signalDOMEvent(cm, e, "contextmenu")) return; + var display = cm.display; + if (eventInWidget(display, e) || contextMenuInGutter(cm, e)) return; + + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || presto) return; // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu; + if (reset && cm.doc.sel.contains(pos) == -1) + operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); + + var oldCSS = display.input.style.cssText; + display.inputDiv.style.position = "absolute"; + display.input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + + "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: " + + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + + "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + focusInput(cm); + resetInput(cm); + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) display.input.value = display.prevInput = " "; + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (display.input.selectionStart != null) { + var extval = display.input.value = "\u200b" + (cm.somethingSelected() ? display.input.value : ""); + display.prevInput = "\u200b"; + display.input.selectionStart = 1; display.input.selectionEnd = extval.length; + } + } + function rehide() { + display.inputDiv.style.position = "relative"; + display.input.style.cssText = oldCSS; + if (ie_upto8) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos; + slowPoll(cm); + + // Try to detect the user choosing select-all + if (display.input.selectionStart != null) { + if (!ie || ie_upto8) prepareSelectAllHack(); + clearTimeout(detectingSelectAll); + var i = 0, poll = function(){ + if (display.prevInput == "\u200b" && display.input.selectionStart == 0) + operation(cm, commands.selectAll)(cm); + else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500); + else resetInput(cm); + }; + detectingSelectAll = setTimeout(poll, 200); + } + } + + if (ie && !ie_upto8) prepareSelectAllHack(); + if (captureRightClick) { + e_stop(e); + var mouseup = function() { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + } + + function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) return false; + return gutterEvent(cm, e, "gutterContextMenu", false, signal); + } + + // UPDATING + + // Compute the position of the end of a change (its 'to' property + // refers to the pre-change end). + var changeEnd = CodeMirror.changeEnd = function(change) { + if (!change.text) return change.to; + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); + }; + + // Adjust a position to refer to the post-change position of the + // same text, or the end of the change if the change covers it. + function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) return pos; + if (cmp(pos, change.to) <= 0) return changeEnd(change); + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; + if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; + return Pos(line, ch); + } + + function computeSelAfterChange(doc, change) { + var out = []; + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))); + } + return normalizeSelection(out, doc.sel.primIndex); + } + + function offsetPos(pos, old, nw) { + if (pos.line == old.line) + return Pos(nw.line, pos.ch - old.ch + nw.ch); + else + return Pos(nw.line + (pos.line - old.line), pos.ch); + } + + // Used by replaceSelections to allow moving the selection to the + // start or around the replaced test. Hint may be "start" or "around". + function computeReplacedSel(doc, changes, hint) { + var out = []; + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + var from = offsetPos(change.from, oldPrev, newPrev); + var to = offsetPos(changeEnd(change), oldPrev, newPrev); + oldPrev = change.to; + newPrev = to; + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; + out[i] = new Range(inv ? to : from, inv ? from : to); + } else { + out[i] = new Range(from, from); + } + } + return new Selection(out, doc.sel.primIndex); + } + + // Allow "beforeChange" event handlers to influence a change + function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function() { this.canceled = true; } + }; + if (update) obj.update = function(from, to, text, origin) { + if (from) this.from = clipPos(doc, from); + if (to) this.to = clipPos(doc, to); + if (text) this.text = text; + if (origin !== undefined) this.origin = origin; + }; + signal(doc, "beforeChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); + + if (obj.canceled) return null; + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; + } + + // Apply a change to a document, and add it to the document's + // history, and propagating it to all linked documents. + function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); + if (doc.cm.state.suppressEdits) return; + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) return; + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 0; --i) + makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); + } else { + makeChangeInner(doc, change); + } + } + + function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; + var selAfter = computeSelAfterChange(doc, change); + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + // Revert a change stored in a document's history. + function makeChangeFromHistory(doc, type, allowSelectionOnly) { + if (doc.cm && doc.cm.state.suppressEdits) return; + + var hist = doc.history, event, selAfter = doc.sel; + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + for (var i = 0; i < source.length; i++) { + event = source[i]; + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + break; + } + if (i == source.length) return; + hist.lastOrigin = hist.lastSelOrigin = null; + + for (;;) { + event = source.pop(); + if (event.ranges) { + pushSelectionToHistory(event, dest); + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}); + return; + } + selAfter = event; + } + else break; + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = []; + pushSelectionToHistory(selAfter, dest); + dest.push({changes: antiChanges, generation: hist.generation}); + hist.generation = event.generation || ++hist.maxGeneration; + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + + for (var i = event.changes.length - 1; i >= 0; --i) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + source.length = 0; + return; + } + + antiChanges.push(historyChangeFromChange(doc, change)); + + var after = i ? computeSelAfterChange(doc, change, null) : lst(source); + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + if (doc.cm) ensureCursorVisible(doc.cm); + var rebased = []; + + // Propagate to the linked documents + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + } + } + + // Sub-views need their line numbers shifted when text is added + // above or below them in the parent document. + function shiftDoc(doc, distance) { + doc.first += distance; + doc.sel = new Selection(map(doc.sel.ranges, function(range) { + return new Range(Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch)); + }), doc.sel.primIndex); + if (doc.cm) regChange(doc.cm, doc.first, doc.first - distance, distance); + } + + // More lower-level change function, handling only a single document + // (not linked ones). + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return; + } + if (change.from.line > doc.lastLine()) return; + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin}; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin}; + } + + change.removed = getBetween(doc, change.from, change.to); + + if (!selAfter) selAfter = computeSelAfterChange(doc, change, null); + if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); + else updateDoc(doc, change, spans); + setSelectionNoUndo(doc, selAfter, sel_dontScroll); + } + + // Handle the interaction of a change to a document with the editor + // that this document is part of. + function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to; + + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function(line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true; + } + }); + } + + if (doc.sel.contains(change.from, change.to) > -1) + cm.curOp.cursorActivity = true; + + updateDoc(doc, change, spans, estimateHeight(cm)); + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function(line) { + var len = lineLength(line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) cm.curOp.updateMaxLine = true; + } + + // Adjust frontier, schedule worker + doc.frontier = Math.min(doc.frontier, from.line); + startWorker(cm, 400); + + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + regLineChange(cm, from.line, "text"); + else + regChange(cm, from.line, to.line + 1, lendiff); + + if (hasHandler(cm, "change") || hasHandler(cm, "changes")) + (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push({ + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + }); + } + + function replaceRange(doc, code, from, to, origin) { + if (!to) to = from; + if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } + if (typeof code == "string") code = splitLines(code); + makeChange(doc, {from: from, to: to, text: code, origin: origin}); + } + + // SCROLLING THINGS INTO VIEW + + // If an editor sits on the top or bottom of the window, partially + // scrolled out of view, this ensures that the cursor is visible. + function maybeScrollWindow(cm, coords) { + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; + if (coords.top + box.top < 0) doScroll = true; + else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + + (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + + (coords.bottom - coords.top + scrollerCutOff) + "px; left: " + + coords.left + "px; width: 2px;"); + cm.display.lineSpace.appendChild(scrollNode); + scrollNode.scrollIntoView(doScroll); + cm.display.lineSpace.removeChild(scrollNode); + } + } + + // Scroll a given position into view (immediately), verifying that + // it actually became visible (as line heights are accurately + // measured, the position of something may 'drift' during drawing). + function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) margin = 0; + for (;;) { + var changed = false, coords = cursorCoords(cm, pos); + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); + var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), + Math.min(coords.top, endCoords.top) - margin, + Math.max(coords.left, endCoords.left), + Math.max(coords.bottom, endCoords.bottom) + margin); + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + setScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; + } + if (!changed) return coords; + } + } + + // Scroll a given set of coordinates into view (immediately). + function scrollIntoView(cm, x1, y1, x2, y2) { + var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); + if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); + if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); + } + + // Calculate a new scroll position needed to scroll the given + // rectangle into view. Returns an object with scrollTop and + // scrollLeft properties. When these are undefined, the + // vertical/horizontal position does not need to be adjusted. + function calculateScrollPos(cm, x1, y1, x2, y2) { + var display = cm.display, snapMargin = textHeight(cm.display); + if (y1 < 0) y1 = 0; + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; + var screen = display.scroller.clientHeight - scrollerCutOff, result = {}; + var docBottom = cm.doc.height + paddingVert(display); + var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; + if (y1 < screentop) { + result.scrollTop = atTop ? 0 : y1; + } else if (y2 > screentop + screen) { + var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); + if (newTop != screentop) result.scrollTop = newTop; + } + + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; + var screenw = display.scroller.clientWidth - scrollerCutOff; + x1 += display.gutters.offsetWidth; x2 += display.gutters.offsetWidth; + var gutterw = display.gutters.offsetWidth; + var atLeft = x1 < gutterw + 10; + if (x1 < screenleft + gutterw || atLeft) { + if (atLeft) x1 = 0; + result.scrollLeft = Math.max(0, x1 - 10 - gutterw); + } else if (x2 > screenw + screenleft - 3) { + result.scrollLeft = x2 + 10 - screenw; + } + return result; + } + + // Store a relative adjustment to the scroll position in the current + // operation (to be applied when the operation finishes). + function addToScrollPos(cm, left, top) { + if (left != null || top != null) resolveScrollToPos(cm); + if (left != null) + cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; + if (top != null) + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; + } + + // Make sure that at the end of the operation the current cursor is + // shown. + function ensureCursorVisible(cm) { + resolveScrollToPos(cm); + var cur = cm.getCursor(), from = cur, to = cur; + if (!cm.options.lineWrapping) { + from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; + to = Pos(cur.line, cur.ch + 1); + } + cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; + } + + // When an operation has its scrollToPos property set, and another + // scroll action is applied before the end of the operation, this + // 'simulates' scrolling that position into view in a cheap way, so + // that the effect of intermediate scroll commands is not ignored. + function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos; + if (range) { + cm.curOp.scrollToPos = null; + var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); + var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), + Math.min(from.top, to.top) - range.margin, + Math.max(from.right, to.right), + Math.max(from.bottom, to.bottom) + range.margin); + cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); + } + } + + // API UTILITIES + + // Indent the given line. The how parameter can be "smart", + // "add"/null, "subtract", or "prev". When aggressive is false + // (typically set to true for forced single-line indents), empty + // lines are not indented, and places where the mode returns Pass + // are left alone. + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state; + if (how == null) how = "add"; + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!cm.doc.mode.indent) how = "prev"; + else state = getStateBefore(cm, n); + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + if (line.stateAfter) line.stateAfter = null; + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0; + how = "not"; + } else if (how == "smart") { + indentation = cm.doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass) { + if (!aggressive) return; + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); + else indentation = 0; + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} + if (pos < indentation) indentString += spaceStr(indentation - pos); + + if (indentString != curSpaceString) { + replaceRange(cm.doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos = Pos(n, curSpaceString.length); + replaceOneSelection(doc, i, new Range(pos, pos)); + break; + } + } + } + line.stateAfter = null; + } + + // Utility for applying a change to a line by handle or number, + // returning the number and optionally registering the line as + // changed. + function changeLine(cm, handle, changeType, op) { + var no = handle, line = handle, doc = cm.doc; + if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); + else no = lineNo(handle); + if (no == null) return null; + if (op(line, no)) regLineChange(cm, no, changeType); + else return null; + return line; + } + + // Helper for deleting text near the selection(s), used to implement + // backspace, delete, and similar functionality. + function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = []; + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]); + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop(); + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from; + break; + } + } + kill.push(toKill); + } + // Next, remove those actual ranges. + runInOp(cm, function() { + for (var i = kill.length - 1; i >= 0; i--) + replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); + ensureCursorVisible(cm); + }); + } + + // Used for horizontal relative motion. Dir is -1 or 1 (left or + // right), unit can be "char", "column" (like char, but doesn't + // cross line boundaries), "word" (across next word), or "group" (to + // the start of next group of word or non-word-non-whitespace + // chars). The visually param controls whether, in right-to-left + // text, direction 1 means to move towards the next index in the + // string, or towards the character to the right of the current + // position. The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosH(doc, pos, dir, unit, visually) { + var line = pos.line, ch = pos.ch, origDir = dir; + var lineObj = getLine(doc, line); + var possible = true; + function findNextLine() { + var l = line + dir; + if (l < doc.first || l >= doc.first + doc.size) return (possible = false); + line = l; + return lineObj = getLine(doc, l); + } + function moveOnce(boundToLine) { + var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); + if (next == null) { + if (!boundToLine && findNextLine()) { + if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); + else ch = dir < 0 ? lineObj.text.length : 0; + } else return (possible = false); + } else ch = next; + return true; + } + + if (unit == "char") moveOnce(); + else if (unit == "column") moveOnce(true); + else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group"; + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) break; + var cur = lineObj.text.charAt(ch) || "\n"; + var type = isWordChar(cur) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p"; + if (group && !first && !type) type = "s"; + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce();} + break; + } + + if (type) sawType = type; + if (dir > 0 && !moveOnce(!first)) break; + } + } + var result = skipAtomic(doc, Pos(line, ch), origDir, true); + if (!possible) result.hitSide = true; + return result; + } + + // For relative vertical movement. Dir may be -1 or 1. Unit can be + // "page" or "line". The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + for (;;) { + var target = coordsChar(cm, x, y); + if (!target.outside) break; + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } + y += dir * 5; + } + return target; + } + + // Find the word at the given position (as returned by coordsChar). + function findWordAt(doc, pos) { + var line = getLine(doc, pos.line).text; + var start = pos.ch, end = pos.ch; + if (line) { + if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; + var startChar = line.charAt(start); + var check = isWordChar(startChar) ? isWordChar + : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} + : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; + while (start > 0 && check(line.charAt(start - 1))) --start; + while (end < line.length && check(line.charAt(end))) ++end; + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)); + } + + // EDITOR METHODS + + // The publicly visible API. Note that methodOp(f) means + // 'wrap f in an operation, performed on its `this` parameter'. + + // This is not the complete set of editor methods. Most of the + // methods defined on the Doc type are also injected into + // CodeMirror.prototype, for backwards compatibility and + // convenience. + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); focusInput(this); fastPoll(this);}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") return; + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + operation(this, optionHandlers[option])(this, value, old); + }, + + getOption: function(option) {return this.options[option];}, + getDoc: function() {return this.doc;}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](map); + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) + if (maps[i] == map || (typeof maps[i] != "string" && maps[i].name == map)) { + maps.splice(i, 1); + return true; + } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) throw new Error("Overlays may not be stateful."); + this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: methodOp(function(spec) { + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this.state.modeGen++; + regChange(this); + return; + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; + else dir = dir ? "add" : "subtract"; + } + if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); + }), + indentSelection: methodOp(function(how) { + var ranges = this.doc.sel.ranges, end = -1; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (!range.empty()) { + var start = Math.max(end, range.from().line); + var to = range.to(); + end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; + for (var j = start; j < end; ++j) + indentLine(this, j, how); + } else if (range.head.line > end) { + indentLine(this, range.head.line, how, true); + end = range.head.line; + if (i == this.doc.sel.primIndex) ensureCursorVisible(this); + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + var doc = this.doc; + pos = clipPos(doc, pos); + var state = getStateBefore(this, pos.line, precise), mode = this.doc.mode; + var line = getLine(doc, pos.line); + var stream = new StringStream(line.text, this.options.tabSize); + while (stream.pos < pos.ch && !stream.eol()) { + stream.start = stream.pos; + var style = mode.token(stream, state); + } + return {start: stream.start, + end: stream.pos, + string: stream.current(), + type: style || null, + state: state}; + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; + if (ch == 0) return styles[2]; + for (;;) { + var mid = (before + after) >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; + else if (styles[mid * 2 + 1] < ch) before = mid + 1; + else return styles[mid * 2 + 2]; + } + }, + + getModeAt: function(pos) { + var mode = this.doc.mode; + if (!mode.innerMode) return mode; + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0]; + }, + + getHelpers: function(pos, type) { + var found = []; + if (!helpers.hasOwnProperty(type)) return helpers; + var help = helpers[type], mode = this.getModeAt(pos); + if (typeof mode[type] == "string") { + if (help[mode[type]]) found.push(help[mode[type]]); + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]]; + if (val) found.push(val); + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]); + } else if (help[mode.name]) { + found.push(help[mode.name]); + } + for (var i = 0; i < help._global.length; i++) { + var cur = help._global[i]; + if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) + found.push(cur.val); + } + return found; + }, + + getStateAfter: function(line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); + return getStateBefore(this, line + 1, precise); + }, + + cursorCoords: function(start, mode) { + var pos, range = this.doc.sel.primary(); + if (start == null) pos = range.head; + else if (typeof start == "object") pos = clipPos(this.doc, start); + else pos = start ? range.from() : range.to(); + return cursorCoords(this, pos, mode || "page"); + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page"); + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top); + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset); + }, + heightAtLine: function(line, mode) { + var end = false, last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) line = this.doc.first; + else if (line > last) { line = last; end = true; } + var lineObj = getLine(this.doc, line); + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + + (end ? this.doc.height - heightAtLine(lineObj) : 0); + }, + + defaultTextHeight: function() { return textHeight(this.display); }, + defaultCharWidth: function() { return charWidth(this.display); }, + + setGutterMarker: methodOp(function(line, gutterID, value) { + return changeLine(this, line, "gutter", function(line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) line.gutterMarkers = null; + return true; + }); + }), + + clearGutter: methodOp(function(gutterID) { + var cm = this, doc = cm.doc, i = doc.first; + doc.iter(function(line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + line.gutterMarkers[gutterID] = null; + regLineChange(cm, i, "gutter"); + if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; + } + ++i; + }); + }), + + addLineClass: methodOp(function(handle, where, cls) { + return changeLine(this, handle, "class", function(line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass"; + if (!line[prop]) line[prop] = cls; + else if (new RegExp("(?:^|\\s)" + cls + "(?:$|\\s)").test(line[prop])) return false; + else line[prop] += " " + cls; + return true; + }); + }), + + removeLineClass: methodOp(function(handle, where, cls) { + return changeLine(this, handle, "class", function(line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) return false; + else if (cls == null) line[prop] = null; + else { + var found = cur.match(new RegExp("(?:^|\\s+)" + cls + "(?:$|\\s+)")); + if (!found) return false; + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true; + }); + }), + + addLineWidget: methodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options); + }), + + removeLineWidget: function(widget) { widget.clear(); }, + + lineInfo: function(line) { + if (typeof line == "number") { + if (!isLine(this.doc, line)) return null; + var n = line; + line = getLine(this.doc, line); + if (!line) return null; + } else { + var n = lineNo(line); + if (n == null) return null; + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets}; + }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, left = pos.left; + node.style.position = "absolute"; + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + top = pos.top - node.offsetHeight; + else if (pos.bottom + node.offsetHeight <= vspace) + top = pos.bottom; + if (left + node.offsetWidth > hspace) + left = hspace - node.offsetWidth; + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") left = 0; + else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; + node.style.left = left + "px"; + } + if (scroll) + scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: methodOp(onKeyUp), + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + return commands[cmd](this); + }, + + findPosH: function(from, amount, unit, visually) { + var dir = 1; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + cur = findPosH(this.doc, cur, dir, unit, visually); + if (cur.hitSide) break; + } + return cur; + }, + + moveH: methodOp(function(dir, unit) { + var cm = this; + cm.extendSelectionsBy(function(range) { + if (cm.display.shift || cm.doc.extend || range.empty()) + return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); + else + return dir < 0 ? range.from() : range.to(); + }, sel_move); + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc; + if (sel.somethingSelected()) + doc.replaceSelection("", null, "+delete"); + else + deleteNearSelection(this, function(range) { + var other = findPosH(doc, range.head, dir, unit, false); + return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; + }); + }), + + findPosV: function(from, amount, unit, goalColumn) { + var dir = 1, x = goalColumn; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + var coords = cursorCoords(this, cur, "div"); + if (x == null) x = coords.left; + else coords.left = x; + cur = findPosV(this, coords, dir, unit); + if (cur.hitSide) break; + } + return cur; + }, + + moveV: methodOp(function(dir, unit) { + var cm = this, doc = this.doc, goals = []; + var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); + doc.extendSelectionsBy(function(range) { + if (collapse) + return dir < 0 ? range.from() : range.to(); + var headPos = cursorCoords(cm, range.head, "div"); + if (range.goalColumn != null) headPos.left = range.goalColumn; + goals.push(headPos.left); + var pos = findPosV(cm, headPos, dir, unit); + if (unit == "page" && range == doc.sel.primary()) + addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); + return pos; + }, sel_move); + if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) + doc.sel.ranges[i].goalColumn = goals[i]; + }), + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) return; + if (this.state.overwrite = !this.state.overwrite) + this.display.cursorDiv.className += " CodeMirror-overwrite"; + else + this.display.cursorDiv.className = this.display.cursorDiv.className.replace(" CodeMirror-overwrite", ""); + + signal(this, "overwriteToggle", this, this.state.overwrite); + }, + hasFocus: function() { return activeElt() == this.display.input; }, + + scrollTo: methodOp(function(x, y) { + if (x != null || y != null) resolveScrollToPos(this); + if (x != null) this.curOp.scrollLeft = x; + if (y != null) this.curOp.scrollTop = y; + }), + getScrollInfo: function() { + var scroller = this.display.scroller, co = scrollerCutOff; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - co, width: scroller.scrollWidth - co, + clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co}; + }, + + scrollIntoView: methodOp(function(range, margin) { + if (range == null) { + range = {from: this.doc.sel.primary().head, to: null}; + if (margin == null) margin = this.options.cursorScrollMargin; + } else if (typeof range == "number") { + range = {from: Pos(range, 0), to: null}; + } else if (range.from == null) { + range = {from: range, to: null}; + } + if (!range.to) range.to = range.from; + range.margin = margin || 0; + + if (range.from.line != null) { + resolveScrollToPos(this); + this.curOp.scrollToPos = range; + } else { + var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), + Math.min(range.from.top, range.to.top) - range.margin, + Math.max(range.from.right, range.to.right), + Math.max(range.from.bottom, range.to.bottom) + range.margin); + this.scrollTo(sPos.scrollLeft, sPos.scrollTop); + } + }), + + setSize: methodOp(function(width, height) { + function interpret(val) { + return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; + } + if (width != null) this.display.wrapper.style.width = interpret(width); + if (height != null) this.display.wrapper.style.height = interpret(height); + if (this.options.lineWrapping) clearLineMeasurementCache(this); + this.curOp.forceUpdate = true; + signal(this, "refresh", this); + }), + + operation: function(f){return runInOp(this, f);}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight; + regChange(this); + clearCaches(this); + this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) + estimateLineHeights(this); + signal(this, "refresh", this); + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc; + old.cm = null; + attachDoc(this, doc); + clearCaches(this); + resetInput(this); + this.scrollTo(doc.scrollLeft, doc.scrollTop); + signalLater(this, "swapDoc", this, old); + return old; + }), + + getInputField: function(){return this.display.input;}, + getWrapperElement: function(){return this.display.wrapper;}, + getScrollerElement: function(){return this.display.scroller;}, + getGutterElement: function(){return this.display.gutters;} + }; + eventMixin(CodeMirror); + + // OPTION DEFAULTS + + // The default configuration options. + var defaults = CodeMirror.defaults = {}; + // Functions to run when options are changed. + var optionHandlers = CodeMirror.optionHandlers = {}; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) optionHandlers[name] = + notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; + } + + // Passed to option handlers when there is no old value. + var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function(cm, val) { + cm.setValue(val); + }, true); + option("mode", null, function(cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function(cm) { + resetModeState(cm); + clearCaches(cm); + regChange(cm); + }, true); + option("specialChars", /[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\ufeff]/g, function(cm, val) { + cm.options.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); + cm.refresh(); + }, true); + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); + option("electricChars", true); + option("rtlMoveVisually", !windows); + option("wholeLineUpdateBefore", true); + + option("theme", "default", function(cm) { + themeChanged(cm); + guttersChanged(cm); + }, true); + option("keyMap", "default", keyMapChanged); + option("extraKeys", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("fixedGutter", true, function(cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, updateScrollbars, true); + option("lineNumbers", false, function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("firstLineNumber", 1, guttersChanged, true); + option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("resetSelectionOnContextMenu", true); + + option("readOnly", false, function(cm, val) { + if (val == "nocursor") { + onBlur(cm); + cm.display.input.blur(); + cm.display.disabled = true; + } else { + cm.display.disabled = false; + if (!val) resetInput(cm); + } + }); + option("disableInput", false, function(cm, val) {if (!val) resetInput(cm);}, true); + option("dragDrop", true); + + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true, resetModeState, true); + option("addModeClass", false, resetModeState, true); + option("pollInterval", 100); + option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); + option("historyEventDelay", 1250); + option("viewportMargin", 10, function(cm){cm.refresh();}, true); + option("maxHighlightLength", 10000, resetModeState, true); + option("moveInputWithCursor", true, function(cm, val) { + if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0; + }); + + option("tabindex", null, function(cm, val) { + cm.display.input.tabIndex = val || ""; + }); + option("autofocus", null); + + // MODE DEFINITION AND QUERYING + + // Known modes, by name and by MIME + var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + CodeMirror.defineMode = function(name, mode) { + if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; + if (arguments.length > 2) { + mode.dependencies = []; + for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]); + } + modes[name] = mode; + }; + + CodeMirror.defineMIME = function(mime, spec) { + mimeModes[mime] = spec; + }; + + // Given a MIME type, a {name, ...options} config object, or a name + // string, return a mode config object. + CodeMirror.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + if (typeof found == "string") found = {name: found}; + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return CodeMirror.resolveMode("application/xml"); + } + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; + }; + + // Given a mode spec (anything that resolveMode accepts), find and + // initialize an actual mode object. + CodeMirror.getMode = function(options, spec) { + var spec = CodeMirror.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) return CodeMirror.getMode(options, "text/plain"); + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) continue; + if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) modeObj.helperType = spec.helperType; + if (spec.modeProps) for (var prop in spec.modeProps) + modeObj[prop] = spec.modeProps[prop]; + + return modeObj; + }; + + // Minimal default mode. + CodeMirror.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; + }); + CodeMirror.defineMIME("text/plain", "null"); + + // This can be used to attach properties to mode objects from + // outside the actual mode definition. + var modeExtensions = CodeMirror.modeExtensions = {}; + CodeMirror.extendMode = function(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); + }; + + // EXTENSIONS + + CodeMirror.defineExtension = function(name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function(name, func) { + Doc.prototype[name] = func; + }; + CodeMirror.defineOption = option; + + var initHooks = []; + CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; + + var helpers = CodeMirror.helpers = {}; + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; + helpers[type][name] = value; + }; + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value); + helpers[type]._global.push({pred: predicate, val: value}); + }; + + // MODE STATE HANDLING + + // Utility functions for working with state. Exported because nested + // modes need to do this for their inner modes. + + var copyState = CodeMirror.copyState = function(mode, state) { + if (state === true) return state; + if (mode.copyState) return mode.copyState(state); + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) val = val.concat([]); + nstate[n] = val; + } + return nstate; + }; + + var startState = CodeMirror.startState = function(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + }; + + // Given a mode and a state (for that mode), find the inner mode and + // state at the position that the state refers to. + CodeMirror.innerMode = function(mode, state) { + while (mode.innerMode) { + var info = mode.innerMode(state); + if (!info || info.mode == mode) break; + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state}; + }; + + // STANDARD COMMANDS + + // Commands are parameter-less actions that can be performed on an + // editor, mostly used for keybindings. + var commands = CodeMirror.commands = { + selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, + singleSelection: function(cm) { + cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); + }, + killLine: function(cm) { + deleteNearSelection(cm, function(range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length; + if (range.head.ch == len && range.head.line < cm.lastLine()) + return {from: range.head, to: Pos(range.head.line + 1, 0)}; + else + return {from: range.head, to: Pos(range.head.line, len)}; + } else { + return {from: range.from(), to: range.to()}; + } + }); + }, + deleteLine: function(cm) { + deleteNearSelection(cm, function(range) { + return {from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; + }); + }, + delLineLeft: function(cm) { + deleteNearSelection(cm, function(range) { + return {from: Pos(range.from().line, 0), to: range.from()}; + }); + }, + undo: function(cm) {cm.undo();}, + redo: function(cm) {cm.redo();}, + undoSelection: function(cm) {cm.undoSelection();}, + redoSelection: function(cm) {cm.redoSelection();}, + goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, + goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, + goLineStart: function(cm) { + cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, sel_move); + }, + goLineStartSmart: function(cm) { + cm.extendSelectionsBy(function(range) { + var start = lineStart(cm, range.head.line); + var line = cm.getLineHandle(start.line); + var order = getOrder(line); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)); + var inWS = range.head.line == start.line && range.head.ch <= firstNonWS && range.head.ch; + return Pos(start.line, inWS ? 0 : firstNonWS); + } + return start; + }, sel_move); + }, + goLineEnd: function(cm) { + cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, sel_move); + }, + goLineRight: function(cm) { + cm.extendSelectionsBy(function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); + }, sel_move); + }, + goLineLeft: function(cm) { + cm.extendSelectionsBy(function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + return cm.coordsChar({left: 0, top: top}, "div"); + }, sel_move); + }, + goLineUp: function(cm) {cm.moveV(-1, "line");}, + goLineDown: function(cm) {cm.moveV(1, "line");}, + goPageUp: function(cm) {cm.moveV(-1, "page");}, + goPageDown: function(cm) {cm.moveV(1, "page");}, + goCharLeft: function(cm) {cm.moveH(-1, "char");}, + goCharRight: function(cm) {cm.moveH(1, "char");}, + goColumnLeft: function(cm) {cm.moveH(-1, "column");}, + goColumnRight: function(cm) {cm.moveH(1, "column");}, + goWordLeft: function(cm) {cm.moveH(-1, "word");}, + goGroupRight: function(cm) {cm.moveH(1, "group");}, + goGroupLeft: function(cm) {cm.moveH(-1, "group");}, + goWordRight: function(cm) {cm.moveH(1, "word");}, + delCharBefore: function(cm) {cm.deleteH(-1, "char");}, + delCharAfter: function(cm) {cm.deleteH(1, "char");}, + delWordBefore: function(cm) {cm.deleteH(-1, "word");}, + delWordAfter: function(cm) {cm.deleteH(1, "word");}, + delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, + delGroupAfter: function(cm) {cm.deleteH(1, "group");}, + indentAuto: function(cm) {cm.indentSelection("smart");}, + indentMore: function(cm) {cm.indentSelection("add");}, + indentLess: function(cm) {cm.indentSelection("subtract");}, + insertTab: function(cm) {cm.replaceSelection("\t");}, + defaultTab: function(cm) { + if (cm.somethingSelected()) cm.indentSelection("add"); + else cm.execCommand("insertTab"); + }, + transposeChars: function(cm) { + runInOp(cm, function() { + var ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; + if (cur.ch > 0 && cur.ch < line.length - 1) + cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1), + Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1)); + } + }); + }, + newlineAndIndent: function(cm) { + runInOp(cm, function() { + var len = cm.listSelections().length; + for (var i = 0; i < len; i++) { + var range = cm.listSelections()[i]; + cm.replaceRange("\n", range.anchor, range.head, "+input"); + cm.indentLine(range.from().line + 1, null, true); + ensureCursorVisible(cm); + } + }); + }, + toggleOverwrite: function(cm) {cm.toggleOverwrite();} + }; + + // STANDARD KEYMAPS + + var keyMap = CodeMirror.keyMap = {}; + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" + }; + // Note that the save and find-related commands aren't defined by + // default. User code or addons can define them. Unknown commands + // are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + fallthrough: "basic" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delLineLeft", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", + fallthrough: ["basic", "emacsy"] + }; + // Very basic readline/emacs-style bindings, which are standard on Mac. + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + + // KEYMAP DISPATCH + + function getKeyMap(val) { + if (typeof val == "string") return keyMap[val]; + else return val; + } + + // Given an array of keymaps and a key name, call handle on any + // bindings found, until that returns a truthy value, at which point + // we consider the key handled. Implements things like binding a key + // to false stopping further handling and keymap fallthrough. + var lookupKey = CodeMirror.lookupKey = function(name, maps, handle) { + function lookup(map) { + map = getKeyMap(map); + var found = map[name]; + if (found === false) return "stop"; + if (found != null && handle(found)) return true; + if (map.nofallthrough) return "stop"; + + var fallthrough = map.fallthrough; + if (fallthrough == null) return false; + if (Object.prototype.toString.call(fallthrough) != "[object Array]") + return lookup(fallthrough); + for (var i = 0; i < fallthrough.length; ++i) { + var done = lookup(fallthrough[i]); + if (done) return done; + } + return false; + } + + for (var i = 0; i < maps.length; ++i) { + var done = lookup(maps[i]); + if (done) return done != "stop"; + } + }; + + // Modifier key presses don't count as 'real' key presses for the + // purpose of keymap fallthrough. + var isModifierKey = CodeMirror.isModifierKey = function(event) { + var name = keyNames[event.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + }; + + // Look up the name of a key as indicated by an event object. + var keyName = CodeMirror.keyName = function(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) return false; + var name = keyNames[event.keyCode]; + if (name == null || event.altGraphKey) return false; + if (event.altKey) name = "Alt-" + name; + if (flipCtrlCmd ? event.metaKey : event.ctrlKey) name = "Ctrl-" + name; + if (flipCtrlCmd ? event.ctrlKey : event.metaKey) name = "Cmd-" + name; + if (!noShift && event.shiftKey) name = "Shift-" + name; + return name; + }; + + // FROMTEXTAREA + + CodeMirror.fromTextArea = function(textarea, options) { + if (!options) options = {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabindex) + options.tabindex = textarea.tabindex; + if (!options.placeholder && textarea.placeholder) + options.placeholder = textarea.placeholder; + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt(); + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form, realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function() { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + } + + textarea.style.display = "none"; + var cm = CodeMirror(function(node) { + textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + cm.save = save; + cm.getTextArea = function() { return textarea; }; + cm.toTextArea = function() { + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (typeof textarea.form.submit == "function") + textarea.form.submit = realSubmit; + } + }; + return cm; + }; + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + var StringStream = CodeMirror.StringStream = function(string, tabSize) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; + }; + + StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == this.lineStart;}, + peek: function() {return this.string.charAt(this.pos) || undefined;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }, + indentation: function() { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) return null; + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);}, + hideFirstChars: function(n, inner) { + this.lineStart += n; + try { return inner(); } + finally { this.lineStart -= n; } + } + }; + + // TEXTMARKERS + + // Created with markText and setBookmark methods. A TextMarker is a + // handle that can be used to clear or find a marked position in the + // document. Line objects hold arrays (markedSpans) containing + // {from, to, marker} object pointing to such marker objects, and + // indicating that such a marker is present on that line. Multiple + // lines may point to the same marker when it spans across lines. + // The spans will have null for their from/to properties when the + // marker continues beyond the start/end of the line. Markers have + // links back to the lines they currently touch. + + var TextMarker = CodeMirror.TextMarker = function(doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + }; + eventMixin(TextMarker); + + // Clear the marker. + TextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + var cm = this.doc.cm, withOp = cm && !cm.curOp; + if (withOp) startOperation(cm); + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) signalLater(this, "clear", found.from, found.to); + } + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); + else if (cm) { + if (span.to != null) max = lineNo(line); + if (span.from != null) min = lineNo(line); + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) + updateLineHeight(line, textHeight(cm.display)); + } + if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { + var visual = visualLine(this.lines[i]), len = lineLength(visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } + + if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) reCheckSelection(cm.doc); + } + if (cm) signalLater(cm, "markerCleared", cm, this); + if (withOp) endOperation(cm); + }; + + // Find the position of the marker in the document. Returns a {from, + // to} object by default. Side can be passed to get a specific side + // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the + // Pos objects returned contain a line object, rather than a line + // number (used to prevent looking up the same line twice). + TextMarker.prototype.find = function(side, lineObj) { + if (side == null && this.type == "bookmark") side = 1; + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from); + if (side == -1) return from; + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to); + if (side == 1) return to; + } + } + return from && {from: from, to: to}; + }; + + // Signals that the marker's widget changed, and surrounding layout + // should be recomputed. + TextMarker.prototype.changed = function() { + var pos = this.find(-1, true), widget = this, cm = this.doc.cm; + if (!pos || !cm) return; + runInOp(cm, function() { + var line = pos.line, lineN = lineNo(pos.line); + var view = findViewForLine(cm, lineN); + if (view) { + clearLineMeasurementCacheFor(view); + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; + } + cm.curOp.updateMaxLine = true; + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height; + widget.height = null; + var dHeight = widgetHeight(widget) - oldHeight; + if (dHeight) + updateLineHeight(line, line.height + dHeight); + } + }); + }; + + TextMarker.prototype.attachLine = function(line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); + } + this.lines.push(line); + }; + TextMarker.prototype.detachLine = function(line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + + // Collapsed markers have unique ids, in order to be able to order + // them, which is needed for uniquely determining an outer marker + // when they overlap (they may nest, but not partially overlap). + var nextMarkerId = 0; + + // Create a marker, wire it up to the right lines, and + function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) return markTextShared(doc, from, to, options, type); + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); + + var marker = new TextMarker(doc, type), diff = cmp(from, to); + if (options) copyObj(options, marker); + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + return marker; + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true; + marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) marker.widgetNode.ignoreEvents = true; + if (options.insertLeft) marker.widgetNode.insertLeft = true; + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + throw new Error("Inserting collapsed marker partially overlapping an existing one"); + sawCollapsedSpans = true; + } + + if (marker.addToHistory) + addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); + + var curLine = from.line, cm = doc.cm, updateMaxLine; + doc.iter(curLine, to.line + 1, function(line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + updateMaxLine = true; + if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null)); + ++curLine; + }); + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { + if (lineIsHidden(doc, line)) updateLineHeight(line, 0); + }); + + if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); + + if (marker.readOnly) { + sawReadOnlySpans = true; + if (doc.history.done.length || doc.history.undone.length) + doc.clearHistory(); + } + if (marker.collapsed) { + marker.id = ++nextMarkerId; + marker.atomic = true; + } + if (cm) { + // Sync editor state + if (updateMaxLine) cm.curOp.updateMaxLine = true; + if (marker.collapsed) + regChange(cm, from.line, to.line + 1); + else if (marker.className || marker.title || marker.startStyle || marker.endStyle) + for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); + if (marker.atomic) reCheckSelection(cm.doc); + signalLater(cm, "markerAdded", cm, marker); + } + return marker; + } + + // SHARED TEXTMARKERS + + // A shared marker spans multiple linked documents. It is + // implemented as a meta-marker-object controlling multiple normal + // markers. + var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { + this.markers = markers; + this.primary = primary; + for (var i = 0, me = this; i < markers.length; ++i) { + markers[i].parent = this; + on(markers[i], "clear", function(){me.clear();}); + } + }; + eventMixin(SharedTextMarker); + + SharedTextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) + this.markers[i].clear(); + signalLater(this, "clear"); + }; + SharedTextMarker.prototype.find = function(side, lineObj) { + return this.primary.find(side, lineObj); + }; + + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], primary = markers[0]; + var widget = options.widgetNode; + linkedDocs(doc, function(doc) { + if (widget) options.widgetNode = widget.cloneNode(true); + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) + if (doc.linked[i].isParent) return; + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary); + } + + // TEXTMARKER SPANS + + function MarkedSpan(marker, from, to) { + this.marker = marker; + this.from = from; this.to = to; + } + + // Search an array of spans for a span matching the given marker. + function getMarkedSpanFor(spans, marker) { + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) return span; + } + } + // Remove a span from an array, returning undefined if no spans are + // left (we don't store arrays for lines without spans). + function removeMarkedSpan(spans, span) { + for (var r, i = 0; i < spans.length; ++i) + if (spans[i] != span) (r || (r = [])).push(spans[i]); + return r; + } + // Add a span to a line. + function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + span.marker.attachLine(line); + } + + // Used for the algorithm that adjusts markers for a change in the + // document. These functions cut an array of spans at a given + // character position, returning an array of remaining chunks (or + // undefined if nothing remains). + function markedSpansBefore(old, startCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); + (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); + } + } + return nw; + } + function markedSpansAfter(old, endCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); + (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)); + } + } + return nw; + } + + // Given a change object, compute the new set of marker spans that + // cover the line in which the change took place. Removes spans + // entirely within the change, reconnects spans belonging to the + // same marker that appear on both sides of the change, and cuts off + // spans partially within the change. Returns an array of span + // arrays with one element for each line in (after) the change. + function stretchSpansOverChange(doc, change) { + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) return null; + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) span.to = startCh; + else if (sameLine) span.to = found.to == null ? null : found.to + offset; + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i = 0; i < last.length; ++i) { + var span = last[i]; + if (span.to != null) span.to += offset; + if (span.from == null) { + var found = getMarkedSpanFor(first, span.marker); + if (!found) { + span.from = offset; + if (sameLine) (first || (first = [])).push(span); + } + } else { + span.from += offset; + if (sameLine) (first || (first = [])).push(span); + } + } + } + // Make sure we didn't create any zero-length spans + if (first) first = clearEmptySpans(first); + if (last && last != first) last = clearEmptySpans(last); + + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers; + if (gap > 0 && first) + for (var i = 0; i < first.length; ++i) + if (first[i].to == null) + (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); + for (var i = 0; i < gap; ++i) + newMarkers.push(gapMarkers); + newMarkers.push(last); + } + return newMarkers; + } + + // Remove spans that are empty and don't have a clearWhenEmpty + // option of false. + function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + spans.splice(i--, 1); + } + if (!spans.length) return null; + return spans; + } + + // Used for un/re-doing changes from the history. Combines the + // result of computing the existing spans with the set of spans that + // existed in the history (so that deleting around a span and then + // undoing brings back the span). + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) return stretched; + if (!stretched) return old; + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) + if (oldCur[k].marker == span.marker) continue spans; + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old; + } + + // Used to 'clip' out readOnly ranges when making a change. + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function(line) { + if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + (markers || (markers = [])).push(mark); + } + }); + if (!markers) return null; + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + newParts.push({from: p.from, to: m.from}); + if (dto > 0 || !mk.inclusiveRight && !dto) + newParts.push({from: m.to, to: p.to}); + parts.splice.apply(parts, newParts); + j += newParts.length - 1; + } + } + return parts; + } + + // Connect or disconnect spans from a line. + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.detachLine(line); + line.markedSpans = null; + } + function attachMarkedSpans(line, spans) { + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.attachLine(line); + line.markedSpans = spans; + } + + // Helpers used when computing which overlapping collapsed span + // counts as the larger one. + function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } + function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } + + // Returns a number indicating which of two overlapping collapsed + // spans is larger (and thus includes the other). Falls back to + // comparing ids when the spans cover exactly the same range. + function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length; + if (lenDiff != 0) return lenDiff; + var aPos = a.find(), bPos = b.find(); + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); + if (fromCmp) return -fromCmp; + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); + if (toCmp) return toCmp; + return b.id - a.id; + } + + // Find out whether a line ends or starts in a collapsed span. If + // so, return the marker for that span. + function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + found = sp.marker; + } + return found; + } + function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } + function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } + + // Test whether there exists a collapsed span that partially + // overlaps (covers the start or end, but not both) of a new span. + // Such overlap is not allowed. + function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo); + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (!sp.marker.collapsed) continue; + var found = sp.marker.find(0); + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; + if (fromCmp <= 0 && (cmp(found.to, from) || extraRight(sp.marker) - extraLeft(marker)) > 0 || + fromCmp >= 0 && (cmp(found.from, to) || extraLeft(sp.marker) - extraRight(marker)) < 0) + return true; + } + } + + // A visual line is a line as drawn on the screen. Folding, for + // example, can cause multiple logical lines to appear on the same + // visual line. This finds the start of the visual line that the + // given line is part of (usually that is the line itself). + function visualLine(line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + line = merged.find(-1, true).line; + return line; + } + + // Returns an array of logical lines that continue the visual line + // started by the argument, or undefined if there are no such lines. + function visualLineContinued(line) { + var merged, lines; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + (lines || (lines = [])).push(line); + } + return lines; + } + + // Get the line number of the start of the visual line that the + // given line number is part of. + function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line); + if (line == vis) return lineN; + return lineNo(vis); + } + // Get the line number of the start of the next visual line after + // the given line. + function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) return lineN; + var line = getLine(doc, lineN), merged; + if (!lineIsHidden(doc, line)) return lineN; + while (merged = collapsedSpanAtEnd(line)) + line = merged.find(1, true).line; + return lineNo(line) + 1; + } + + // Compute whether a line is hidden. Lines count as hidden when they + // are part of a visual line that starts with another line, or when + // they are entirely covered by collapsed, non-widget span. + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) continue; + if (sp.from == null) return true; + if (sp.marker.widgetNode) continue; + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + return true; + } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true); + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); + } + if (span.marker.inclusiveRight && span.to == line.text.length) + return true; + for (var sp, i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) return true; + } + } + + // LINE WIDGETS + + // Line widgets are block elements displayed above or below a line. + + var LineWidget = CodeMirror.LineWidget = function(cm, node, options) { + if (options) for (var opt in options) if (options.hasOwnProperty(opt)) + this[opt] = options[opt]; + this.cm = cm; + this.node = node; + }; + eventMixin(LineWidget); + + function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + addToScrollPos(cm, null, diff); + } + + LineWidget.prototype.clear = function() { + var cm = this.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); + if (no == null || !ws) return; + for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); + if (!ws.length) line.widgets = null; + var height = widgetHeight(this); + runInOp(cm, function() { + adjustScrollWhenAboveVisible(cm, line, -height); + regLineChange(cm, no, "widget"); + updateLineHeight(line, Math.max(0, line.height - height)); + }); + }; + LineWidget.prototype.changed = function() { + var oldH = this.height, cm = this.cm, line = this.line; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) return; + runInOp(cm, function() { + cm.curOp.forceUpdate = true; + adjustScrollWhenAboveVisible(cm, line, diff); + updateLineHeight(line, line.height + diff); + }); + }; + + function widgetHeight(widget) { + if (widget.height != null) return widget.height; + if (!contains(document.body, widget.node)) + removeChildrenAndAdd(widget.cm.display.measure, elt("div", [widget.node], null, "position: relative")); + return widget.height = widget.node.offsetHeight; + } + + function addLineWidget(cm, handle, node, options) { + var widget = new LineWidget(cm, node, options); + if (widget.noHScroll) cm.display.alignWidgets = true; + changeLine(cm, handle, "widget", function(line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) widgets.push(widget); + else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); + widget.line = line; + if (!lineIsHidden(cm.doc, line)) { + var aboveVisible = heightAtLine(line) < cm.doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) addToScrollPos(cm, null, widget.height); + cm.curOp.forceUpdate = true; + } + return true; + }); + return widget; + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; + }; + eventMixin(Line); + Line.prototype.lineNo = function() { return lineNo(this); }; + + // Change the content (text, markers) of a line. Automatically + // invalidates cached information and tries to re-estimate the + // line's height. + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + if (line.order != null) line.order = null; + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) updateLineHeight(line, estHeight); + } + + // Detach a line from the document tree and its markers. + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + // Run the given mode's parser over a line, calling f for each token. + function runMode(cm, text, mode, state, f, forceToEnd) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; + var curStart = 0, curStyle = null; + var stream = new StringStream(text, cm.options.tabSize), style; + if (text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + if (forceToEnd) processLine(cm, text, state, stream.pos); + stream.pos = text.length; + style = null; + } else { + style = mode.token(stream, state); + } + if (cm.options.addModeClass) { + var mName = CodeMirror.innerMode(mode, state).mode.name; + if (mName) style = "m-" + (style ? mName + " " + style : mName); + } + if (!flattenSpans || curStyle != style) { + if (curStart < stream.start) f(stream.start, curStyle); + curStart = stream.start; curStyle = style; + } + stream.start = stream.pos; + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 characters + var pos = Math.min(stream.pos, curStart + 50000); + f(pos, curStyle); + curStart = pos; + } + } + + // Compute a style array (an array starting with a mode generation + // -- for invalidation -- followed by pairs of end positions and + // style strings), which is used to highlight the tokens on the + // line. + function highlightLine(cm, line, state, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen]; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, state, function(end, style) { + st.push(end, style); + }, forceToEnd); + + // Run overlays, adjust style array. + for (var o = 0; o < cm.state.overlays.length; ++o) { + var overlay = cm.state.overlays[o], i = 1, at = 0; + runMode(cm, line.text, overlay.mode, true, function(end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) + st.splice(i, 1, end, st[i+1], i_end); + i += 2; + at = Math.min(end, i_end); + } + if (!style) return; + if (overlay.opaque) { + st.splice(start, i - start, end, style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start+1]; + st[start+1] = cur ? cur + " " + style : style; + } + } + }); + } + + return st; + } + + function getLineStyles(cm, line) { + if (!line.styles || line.styles[0] != cm.state.modeGen) + line.styles = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); + return line.styles; + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. Used for lines that + // aren't currently visible. + function processLine(cm, text, state, startAt) { + var mode = cm.doc.mode; + var stream = new StringStream(text, cm.options.tabSize); + stream.start = stream.pos = startAt || 0; + if (text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) { + mode.token(stream, state); + stream.start = stream.pos; + } + } + + // Convert a style as returned by a mode (either null, or a string + // containing one or more styles) to a CSS style. This is cached, + // and also looks for line-wide styles. + var styleToClassCache = {}, styleToClassCacheWithMode = {}; + function interpretTokenStyle(style, builder) { + if (!style) return null; + for (;;) { + var lineClass = style.match(/(?:^|\s+)line-(background-)?(\S+)/); + if (!lineClass) break; + style = style.slice(0, lineClass.index) + style.slice(lineClass.index + lineClass[0].length); + var prop = lineClass[1] ? "bgClass" : "textClass"; + if (builder[prop] == null) + builder[prop] = lineClass[2]; + else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(builder[prop])) + builder[prop] += " " + lineClass[2]; + } + if (/^\s*$/.test(style)) return null; + var cache = builder.cm.options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")); + } + + // Render the DOM representation of the text of a line. Also builds + // up a 'line map', which points at the DOM nodes that represent + // specific stretches of text, and is used by the measuring code. + // The returned object contains the DOM node, this map, and + // information about line-wide styles that were set by the mode. + function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); + var builder = {pre: elt("pre", [content]), content: content, col: 0, pos: 0, cm: cm}; + lineView.measure = {}; + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order; + builder.pos = 0; + builder.addToken = buildToken; + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if ((ie || webkit) && cm.getOption("lineWrapping")) + builder.addToken = buildTokenSplitSpaces(builder.addToken); + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) + builder.addToken = buildTokenBadBidi(builder.addToken, order); + builder.map = []; + insertLineContent(line, builder, getLineStyles(cm, line)); + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map; + lineView.measure.cache = {}; + } else { + (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); + (lineView.measure.caches || (lineView.measure.caches = [])).push({}); + } + } + + signal(cm, "renderLine", cm, lineView.line, builder.pre); + return builder; + } + + function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + ch.charCodeAt(0).toString(16); + return token; + } + + // Build up the DOM representation for a single token, and add it to + // the line map. Takes care to render special characters separately. + function buildToken(builder, text, style, startStyle, endStyle, title) { + if (!text) return; + var special = builder.cm.options.specialChars, mustWrap = false; + if (!special.test(text)) { + builder.col += text.length; + var content = document.createTextNode(text); + builder.map.push(builder.pos, builder.pos + text.length, content); + if (ie_upto8) mustWrap = true; + builder.pos += text.length; + } else { + var content = document.createDocumentFragment(), pos = 0; + while (true) { + special.lastIndex = pos; + var m = special.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + var txt = document.createTextNode(text.slice(pos, pos + skipped)); + if (ie_upto8) content.appendChild(elt("span", [txt])); + else content.appendChild(txt); + builder.map.push(builder.pos, builder.pos + skipped, txt); + builder.col += skipped; + builder.pos += skipped; + } + if (!m) break; + pos += skipped + 1; + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + builder.col += tabWidth; + } else { + var txt = builder.cm.options.specialCharPlaceholder(m[0]); + if (ie_upto8) content.appendChild(elt("span", [txt])); + else content.appendChild(txt); + builder.col += 1; + } + builder.map.push(builder.pos, builder.pos + 1, txt); + builder.pos++; + } + } + if (style || startStyle || endStyle || mustWrap) { + var fullStyle = style || ""; + if (startStyle) fullStyle += startStyle; + if (endStyle) fullStyle += endStyle; + var token = elt("span", [content], fullStyle); + if (title) token.title = title; + return builder.content.appendChild(token); + } + builder.content.appendChild(content); + } + + function buildTokenSplitSpaces(inner) { + function split(old) { + var out = " "; + for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; + out += " "; + return out; + } + return function(builder, text, style, startStyle, endStyle, title) { + inner(builder, text.replace(/ {3,}/g, split), style, startStyle, endStyle, title); + }; + } + + // Work around nonsense dimensions being reported for stretches of + // right-to-left text. + function buildTokenBadBidi(inner, order) { + return function(builder, text, style, startStyle, endStyle, title) { + style = style ? style + " cm-force-border" : "cm-force-border"; + var start = builder.pos, end = start + text.length; + for (;;) { + // Find the part that overlaps with the start of this text + for (var i = 0; i < order.length; i++) { + var part = order[i]; + if (part.to > start && part.from <= start) break; + } + if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title); + inner(builder, text.slice(0, part.to - start), style, startStyle, null, title); + startStyle = null; + text = text.slice(part.to - start); + start = part.to; + } + }; + } + + function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode; + if (widget) { + builder.map.push(builder.pos, builder.pos + size, widget); + builder.content.appendChild(widget); + } + builder.pos += size; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0; + if (!spans) { + for (var i = 1; i < styles.length; i+=2) + builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder)); + return; + } + + var len = allText.length, pos = 0, i = 1, text = "", style; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = title = ""; + collapsed = null; nextChange = Infinity; + var foundBookmarks = []; + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (sp.from <= pos && (sp.to == null || sp.to > pos)) { + if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } + if (m.className) spanStyle += " " + m.className; + if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; + if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; + if (m.title && !title) title = m.title; + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + collapsed = sp; + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) foundBookmarks.push(m); + } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null); + if (collapsed.to == null) return; + } + if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j) + buildCollapsedSpan(builder, 0, foundBookmarks[j]); + } + if (pos >= len) break; + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = interpretTokenStyle(styles[i++], builder); + } + } + } + + // DOCUMENT DATA STRUCTURE + + // By default, updates that start and end at the beginning of a line + // are treated specially, in order to make the association of line + // widgets and marker elements with the text behave more intuitive. + function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore); + } + + // Perform a change on the document data structure. + function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null;} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight); + signalLater(line, "change", line, change); + } + + var from = change.from, to = change.to, text = change.text; + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; + + // Adjust the line structure + if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + for (var i = 0, added = []; i < text.length - 1; ++i) + added.push(new Line(text[i], spansFor(i), estimateHeight)); + update(lastLine, lastLine.text, lastSpans); + if (nlines) doc.remove(from.line, nlines); + if (added.length) doc.insert(from.line, added); + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + for (var added = [], i = 1; i < text.length - 1; ++i) + added.push(new Line(text[i], spansFor(i), estimateHeight)); + added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + for (var i = 1, added = []; i < text.length - 1; ++i) + added.push(new Line(text[i], spansFor(i), estimateHeight)); + if (nlines > 1) doc.remove(from.line + 1, nlines - 1); + doc.insert(from.line + 1, added); + } + + signalLater(doc, "change", doc, change); + } + + // The document is represented as a BTree consisting of leaves, with + // chunk of lines in them, and branches, with up to ten leaves or + // other branch nodes below them. The top node is always a branch + // node, and is the document object itself (meaning it has + // additional methods and properties). + // + // All nodes have parent links. The tree is used both to go from + // line numbers to line objects, and to go from objects to numbers. + // It also indexes by height, and is used to convert between height + // and line object, and to find the total height of the document. + // + // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + for (var i = 0, height = 0; i < lines.length; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length; }, + // Remove the n lines at offset 'at'. + removeInner: function(at, n) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + // Helper used to collapse a small branch into a single leaf. + collapse: function(lines) { + lines.push.apply(lines, this.lines); + }, + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0; i < lines.length; ++i) lines[i].parent = this; + }, + // Used to iterate over a part of the tree. + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + if (op(this.lines[at])) return true; + } + }; + + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0; i < children.length; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + + BranchChunk.prototype = { + chunkSize: function() { return this.size; }, + removeInner: function(at, n) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.removeInner(at, rm); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) break; + at = 0; + } else at -= sz; + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function(lines) { + for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); + }, + insertInner: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + while (child.lines.length > 50) { + var spilled = child.lines.splice(child.lines.length - 25, 25); + var newleaf = new LeafChunk(spilled); + child.height -= newleaf.height; + this.children.splice(i + 1, 0, newleaf); + newleaf.parent = this; + } + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + // When a node has grown, check whether it should be split. + maybeSpill: function() { + if (this.children.length <= 10) return; + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iterN: function(at, n, op) { + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) return true; + if ((n -= used) == 0) break; + at = 0; + } else at -= sz; + } + } + }; + + var nextDocId = 0; + var Doc = CodeMirror.Doc = function(text, mode, firstLine) { + if (!(this instanceof Doc)) return new Doc(text, mode, firstLine); + if (firstLine == null) firstLine = 0; + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.cleanGeneration = 1; + this.frontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = simpleSelection(start); + this.history = new History(null); + this.id = ++nextDocId; + this.modeOption = mode; + + if (typeof text == "string") text = splitLines(text); + updateDoc(this, {from: start, to: start, text: text}); + setSelection(this, simpleSelection(start), sel_dontScroll); + }; + + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) this.iterN(from - this.first, to - from, op); + else this.iterN(this.first, this.first + this.size, from); + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0; + for (var i = 0; i < lines.length; ++i) height += lines[i].height; + this.insertInner(at - this.first, lines, height); + }, + remove: function(at, n) { this.removeInner(at - this.first, n); }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) return lines; + return lines.join(lineSep || "\n"); + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1; + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: splitLines(code), origin: "setValue"}, true); + setSelection(this, simpleSelection(top)); + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) return lines; + return lines.join(lineSep || "\n"); + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, + + getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, + getLineNumber: function(line) {return lineNo(line);}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") line = getLine(this, line); + return visualLine(line); + }, + + lineCount: function() {return this.size;}, + firstLine: function() {return this.first;}, + lastLine: function() {return this.first + this.size - 1;}, + + clipPos: function(pos) {return clipPos(this, pos);}, + + getCursor: function(start) { + var range = this.sel.primary(), pos; + if (start == null || start == "head") pos = range.head; + else if (start == "anchor") pos = range.anchor; + else if (start == "end" || start == "to" || start === false) pos = range.to(); + else pos = range.from(); + return pos; + }, + listSelections: function() { return this.sel.ranges; }, + somethingSelected: function() {return this.sel.somethingSelected();}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads, options)); + }), + extendSelectionsBy: docMethodOp(function(f, options) { + extendSelections(this, map(this.sel.ranges, f), options); + }), + setSelections: docMethodOp(function(ranges, primary, options) { + if (!ranges.length) return; + for (var i = 0, out = []; i < ranges.length; i++) + out[i] = new Range(clipPos(this, ranges[i].anchor), + clipPos(this, ranges[i].head)); + if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); + setSelection(this, normalizeSelection(out, primary), options); + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0); + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); + setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); + }), + + getSelection: function(lineSep) { + var ranges = this.sel.ranges, lines; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + lines = lines ? lines.concat(sel) : sel; + } + if (lineSep === false) return lines; + else return lines.join(lineSep || "\n"); + }, + getSelections: function(lineSep) { + var parts = [], ranges = this.sel.ranges; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + if (lineSep !== false) sel = sel.join(lineSep || "\n"); + parts[i] = sel; + } + return parts; + }, + replaceSelection: docMethodOp(function(code, collapse, origin) { + var dup = []; + for (var i = 0; i < this.sel.ranges.length; i++) + dup[i] = code; + this.replaceSelections(dup, collapse, origin || "+input"); + }), + replaceSelections: function(code, collapse, origin) { + var changes = [], sel = this.sel; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin}; + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); + for (var i = changes.length - 1; i >= 0; i--) + makeChange(this, changes[i]); + if (newSel) setSelectionReplaceHistory(this, newSel); + else if (this.cm) ensureCursorVisible(this.cm); + }, + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), + + setExtending: function(val) {this.extend = val;}, + getExtending: function() {return this.extend;}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0; + for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; + for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; + return {undo: done, redo: undone}; + }, + clearHistory: function() {this.history = new History(this.history.maxGeneration);}, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true); + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + this.history.lastOp = this.history.lastOrigin = null; + return this.history.generation; + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration); + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)}; + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history.maxGeneration); + hist.done = copyHistoryArray(histData.done.slice(0), null, true); + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); + }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, "range"); + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared}; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark"); + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos); + var markers = [], spans = getLine(this, pos.line).markedSpans; + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + markers.push(span.marker.parent || span.marker); + } + return markers; + }, + findMarks: function(from, to) { + from = clipPos(this, from); to = clipPos(this, to); + var found = [], lineNo = from.line; + this.iter(from.line, to.line + 1, function(line) { + var spans = line.markedSpans; + if (spans) for (var i = 0; i < spans.length; i++) { + var span = spans[i]; + if (!(lineNo == from.line && from.ch > span.to || + span.from == null && lineNo != from.line|| + lineNo == to.line && span.from > to.ch)) + found.push(span.marker.parent || span.marker); + } + ++lineNo; + }); + return found; + }, + getAllMarks: function() { + var markers = []; + this.iter(function(line) { + var sps = line.markedSpans; + if (sps) for (var i = 0; i < sps.length; ++i) + if (sps[i].from != null) markers.push(sps[i].marker); + }); + return markers; + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first; + this.iter(function(line) { + var sz = line.text.length + 1; + if (sz > off) { ch = off; return true; } + off -= sz; + ++lineNo; + }); + return clipPos(this, Pos(lineNo, ch)); + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) return 0; + this.iter(this.first, coords.line, function (line) { + index += line.text.length + 1; + }); + return index; + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first); + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; + doc.sel = this.sel; + doc.extend = false; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc; + }, + + linkedDoc: function(options) { + if (!options) options = {}; + var from = this.first, to = this.first + this.size; + if (options.from != null && options.from > from) from = options.from; + if (options.to != null && options.to < to) to = options.to; + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from); + if (options.sharedHist) copy.history = this.history; + (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; + return copy; + }, + unlinkDoc: function(other) { + if (other instanceof CodeMirror) other = other.doc; + if (this.linked) for (var i = 0; i < this.linked.length; ++i) { + var link = this.linked[i]; + if (link.doc != other) continue; + this.linked.splice(i, 1); + other.unlinkDoc(this); + break; + } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); + other.history = new History(null); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f);}, + + getMode: function() {return this.mode;}, + getEditor: function() {return this.cm;} + }); + + // Public alias. + Doc.prototype.eachLine = Doc.prototype.iter; + + // Set up methods on CodeMirror's prototype to redirect to the editor's document. + var dontDelegate = "iter insert remove copy getEditor".split(" "); + for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments);}; + })(Doc.prototype[prop]); + + eventMixin(Doc); + + // Call f for all linked documents. + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) continue; + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) continue; + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } + } + propagate(doc, null, true); + } + + // Attach a document to an editor. + function attachDoc(cm, doc) { + if (doc.cm) throw new Error("This document is already in use."); + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + if (!cm.options.lineWrapping) findMaxLine(cm); + cm.options.mode = doc.modeOption; + regChange(cm); + } + + // LINE UTILITIES + + // Find the line object corresponding to the given line number. + function getLine(doc, n) { + n -= doc.first; + if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); + for (var chunk = doc; !chunk.lines;) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break; } + n -= sz; + } + } + return chunk.lines[n]; + } + + // Get the part of a document between two positions, as an array of + // strings. + function getBetween(doc, start, end) { + var out = [], n = start.line; + doc.iter(start.line, end.line + 1, function(line) { + var text = line.text; + if (n == end.line) text = text.slice(0, end.ch); + if (n == start.line) text = text.slice(start.ch); + out.push(text); + ++n; + }); + return out; + } + // Get the lines between from and to, as array of strings. + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function(line) { out.push(line.text); }); + return out; + } + + // Update the height of a line, propagating the height change + // upwards to parent nodes. + function updateLineHeight(line, height) { + var diff = height - line.height; + if (diff) for (var n = line; n; n = n.parent) n.height += diff; + } + + // Given a line object, find its line number by walking up through + // its parent links. + function lineNo(line) { + if (line.parent == null) return null; + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) break; + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first; + } + + // Find the line at the given vertical position, using the height + // information in the document tree. + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i = 0; i < chunk.children.length; ++i) { + var child = chunk.children[i], ch = child.height; + if (h < ch) { chunk = child; continue outer; } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) break; + h -= lh; + } + return n + i; + } + + + // Find the height above the given line. + function heightAtLine(lineObj) { + lineObj = visualLine(lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) break; + else h += line.height; + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i = 0; i < p.children.length; ++i) { + var cur = p.children[i]; + if (cur == chunk) break; + else h += cur.height; + } + } + return h; + } + + // Get the bidi ordering for the given line (and cache it). Returns + // false for lines that are fully left-to-right, and an array of + // BidiSpan objects otherwise. + function getOrder(line) { + var order = line.order; + if (order == null) order = line.order = bidiOrdering(line.text); + return order; + } + + // HISTORY + + function History(startGen) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = []; + this.undoDepth = Infinity; + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0; + this.lastOp = null; + this.lastOrigin = this.lastSelOrigin = null; + // Used by the isClean() method + this.generation = this.maxGeneration = startGen || 1; + } + + // Create a history change event from an updateDoc-style change + // object. + function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); + return histChange; + } + + // Pop all selection events off the end of a history array. Stop at + // a change event. + function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array); + if (last.ranges) array.pop(); + else break; + } + } + + // Find the top change event in the history. Pop off selection + // events that are in the way. + function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done); + return lst(hist.done); + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done); + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop(); + return lst(hist.done); + } + } + + // Register a change in the history. Merges changes that are within + // a single operation, ore are close together with an origin that + // allows merging (starting with "+") into a single event. + function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date, cur; + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + var last = lst(cur.changes); + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done); + if (!before || !before.ranges) + pushSelectionToHistory(doc.sel, hist.done); + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation}; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) { + hist.done.shift(); + if (!hist.done[0].ranges) hist.done.shift(); + } + } + hist.done.push(selAfter); + hist.generation = ++hist.maxGeneration; + hist.lastModTime = hist.lastSelTime = time; + hist.lastOp = opId; + hist.lastOrigin = hist.lastSelOrigin = change.origin; + + if (!last) signal(doc, "historyAdded"); + } + + function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0); + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); + } + + // Called whenever the selection changes, sets the new selection as + // the pending selection in the history, and pushes the old pending + // selection into the 'done' array when it was significantly + // different (in number of selected ranges, emptiness, or time). + function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin; + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + hist.done[hist.done.length - 1] = sel; + else + pushSelectionToHistory(sel, hist.done); + + hist.lastSelTime = +new Date; + hist.lastSelOrigin = origin; + hist.lastOp = opId; + if (options && options.clearRedo !== false) + clearSelectionEvents(hist.undone); + } + + function pushSelectionToHistory(sel, dest) { + var top = lst(dest); + if (!(top && top.ranges && top.equals(sel))) + dest.push(sel); + } + + // Used to store marked span information in the history. + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { + if (line.markedSpans) + (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; + ++n; + }); + } + + // When un/re-doing restores text containing marked spans, those + // that have been explicitly cleared should not be restored. + function removeClearedSpans(spans) { + if (!spans) return null; + for (var i = 0, out; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } + else if (out) out.push(spans[i]); + } + return !out ? spans : out.length ? out : null; + } + + // Retrieve and filter the old marked spans stored in a change event. + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) return null; + for (var i = 0, nw = []; i < change.text.length; ++i) + nw.push(removeClearedSpans(found[i])); + return nw; + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup, instantiateSel) { + for (var i = 0, copy = []; i < events.length; ++i) { + var event = events[i]; + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); + continue; + } + var changes = event.changes, newChanges = []; + copy.push({changes: newChanges}); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m; + newChanges.push({from: change.from, to: change.to, text: change.text}); + if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } + } + } + return copy; + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true; + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); + } + continue; + } + for (var j = 0; j < sub.changes.length; ++j) { + var cur = sub.changes[j]; + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch); + cur.to = Pos(cur.to.line + diff, cur.to.ch); + } else if (from <= cur.to.line) { + ok = false; + break; + } + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } + } + } + + function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // EVENT UTILITIES + + // Due to the fact that we still support jurassic IE versions, some + // compatibility wrappers are needed. + + var e_preventDefault = CodeMirror.e_preventDefault = function(e) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + }; + var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { + if (e.stopPropagation) e.stopPropagation(); + else e.cancelBubble = true; + }; + function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; + } + var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; + + function e_target(e) {return e.target || e.srcElement;} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) b = 1; + else if (e.button & 2) b = 3; + else if (e.button & 4) b = 2; + } + if (mac && e.ctrlKey && b == 1) b = 3; + return b; + } + + // EVENT HANDLING + + // Lightweight event framework. on/off also work on DOM nodes, + // registering native DOM handlers. + + var on = CodeMirror.on = function(emitter, type, f) { + if (emitter.addEventListener) + emitter.addEventListener(type, f, false); + else if (emitter.attachEvent) + emitter.attachEvent("on" + type, f); + else { + var map = emitter._handlers || (emitter._handlers = {}); + var arr = map[type] || (map[type] = []); + arr.push(f); + } + }; + + var off = CodeMirror.off = function(emitter, type, f) { + if (emitter.removeEventListener) + emitter.removeEventListener(type, f, false); + else if (emitter.detachEvent) + emitter.detachEvent("on" + type, f); + else { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + for (var i = 0; i < arr.length; ++i) + if (arr[i] == f) { arr.splice(i, 1); break; } + } + }; + + var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); + }; + + // Often, we want to signal events at a point where we are in the + // middle of some work, but don't want the handler to start calling + // other methods on the editor, which might be in an inconsistent + // state or simply not expect any other events to happen. + // signalLater looks whether there are any handlers, and schedules + // them to be executed when the last operation ends, or, if no + // operation is active, when a timeout fires. + var delayedCallbacks, delayedCallbackDepth = 0; + function signalLater(emitter, type /*, values...*/) { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + var args = Array.prototype.slice.call(arguments, 2); + if (!delayedCallbacks) { + ++delayedCallbackDepth; + delayedCallbacks = []; + setTimeout(fireDelayed, 0); + } + function bnd(f) {return function(){f.apply(null, args);};}; + for (var i = 0; i < arr.length; ++i) + delayedCallbacks.push(bnd(arr[i])); + } + + function fireDelayed() { + --delayedCallbackDepth; + var delayed = delayedCallbacks; + delayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) delayed[i](); + } + + // The DOM events that CodeMirror handles can be overridden by + // registering a (non-DOM) handler on the editor for the event name, + // and preventDefault-ing the event in that handler. + function signalDOMEvent(cm, e, override) { + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore; + } + + function hasHandler(emitter, type) { + var arr = emitter._handlers && emitter._handlers[type]; + return arr && arr.length > 0; + } + + // Add on and off methods to a constructor's prototype, to make + // registering events on such objects more convenient. + function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f);}; + ctor.prototype.off = function(type, f) {off(this, type, f);}; + } + + // MISC UTILITIES + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerCutOff = 30; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; + + // Reused option objects for setSelection & friends + var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; + + function Delayed() {this.id = null;} + Delayed.prototype.set = function(ms, f) { + clearTimeout(this.id); + this.id = setTimeout(f, ms); + }; + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) end = string.length; + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) + return n + (end - i); + n += nextTab - i; + n += tabSize - (n % tabSize); + i = nextTab + 1; + } + }; + + // The inverse of countColumn -- find the offset that corresponds to + // a particular column. + function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos); + if (nextTab == -1) nextTab = string.length; + var skipped = nextTab - pos; + if (nextTab == string.length || col + skipped >= goal) + return pos + Math.min(skipped, goal - col); + col += nextTab - pos; + col += tabSize - (col % tabSize); + pos = nextTab + 1; + if (col >= goal) return pos; + } + } + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + spaceStrs.push(lst(spaceStrs) + " "); + return spaceStrs[n]; + } + + function lst(arr) { return arr[arr.length-1]; } + + var selectInput = function(node) { node.select(); }; + if (ios) // Mobile Safari apparently has a bug where select() is broken. + selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; + else if (ie) // Suppress mysterious IE10 errors + selectInput = function(node) { try { node.select(); } catch(_e) {} }; + + function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + if (array[i] == elt) return i; + return -1; + } + if ([].indexOf) indexOf = function(array, elt) { return array.indexOf(elt); }; + function map(array, f) { + var out = []; + for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); + return out; + } + if ([].map) map = function(array, f) { return array.map(f); }; + + function createObj(base, props) { + var inst; + if (Object.create) { + inst = Object.create(base); + } else { + var ctor = function() {}; + ctor.prototype = base; + inst = new ctor(); + } + if (props) copyObj(props, inst); + return inst; + }; + + function copyObj(obj, target) { + if (!target) target = {}; + for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop]; + return target; + } + + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args);}; + } + + var nonASCIISingleCaseWordChar = /[\u00df\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + var isWordChar = CodeMirror.isWordChar = function(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); + }; + + function isEmpty(obj) { + for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; + return true; + } + + // Extending unicode characters. A series of a non-extending char + + // any number of extending chars is treated as a single unit as far + // as editing and measuring is concerned. This is not fully correct, + // since some scripts/fonts/browsers also treat other configurations + // of code points as a group. + var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; + function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } + + // DOM UTILITIES + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") e.appendChild(document.createTextNode(content)); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + + var range; + if (document.createRange) range = function(node, start, end) { + var r = document.createRange(); + r.setEnd(node, end); + r.setStart(node, start); + return r; + }; + else range = function(node, start, end) { + var r = document.body.createTextRange(); + r.moveToElementText(node.parentNode); + r.collapse(true); + r.moveEnd("character", end); + r.moveStart("character", start); + return r; + }; + + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + e.removeChild(e.firstChild); + return e; + } + + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e); + } + + function contains(parent, child) { + if (parent.contains) + return parent.contains(child); + while (child = child.parentNode) + if (child == parent) return true; + } + + function activeElt() { return document.activeElement; } + // Older versions of IE throws unspecified error when touching + // document.activeElement in some cases (during loading, in iframe) + if (ie_upto10) activeElt = function() { + try { return document.activeElement; } + catch(e) { return document.body; } + }; + + // FEATURE DETECTION + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie_upto8) return false; + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + + var knownScrollbarWidth; + function scrollbarWidth(measure) { + if (knownScrollbarWidth != null) return knownScrollbarWidth; + var test = elt("div", null, null, "width: 50px; height: 50px; overflow-x: scroll"); + removeChildrenAndAdd(measure, test); + if (test.offsetWidth) + knownScrollbarWidth = test.offsetHeight - test.clientHeight; + return knownScrollbarWidth || 0; + } + + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !ie_upto7; + } + if (zwspSupported) return elt("span", "\u200b"); + else return elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + } + + // Feature-detect IE's crummy client rect reporting for bidi text + var badBidiRects; + function hasBadBidiRects(measure) { + if (badBidiRects != null) return badBidiRects; + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); + var r0 = range(txt, 0, 1).getBoundingClientRect(); + if (r0.left == r0.right) return false; + var r1 = range(txt, 1, 2).getBoundingClientRect(); + return badBidiRects = (r1.right - r0.right < 3); + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLines = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) nl = string.length; + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function(string){return string.split(/\r\n?|\n/);}; + + var hasSelection = window.getSelection ? function(te) { + try { return te.selectionStart != te.selectionEnd; } + catch(e) { return false; } + } : function(te) { + try {var range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) return false; + return range.compareEndPoints("StartToEnd", range) != 0; + }; + + var hasCopyEvent = (function() { + var e = elt("div"); + if ("oncopy" in e) return true; + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == "function"; + })(); + + // KEY NAMES + + var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 107: "=", 109: "-", 127: "Delete", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"}; + CodeMirror.keyNames = keyNames; + (function() { + // Number keys + for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); + // Alphabetic keys + for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); + // Function keys + for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; + })(); + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) return f(from, to, "ltr"); + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); + found = true; + } + } + if (!found) f(from, to, "ltr"); + } + + function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } + function bidiRight(part) { return part.level % 2 ? part.from : part.to; } + + function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } + function lineRight(line) { + var order = getOrder(line); + if (!order) return line.text.length; + return bidiRight(lst(order)); + } + + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(line); + if (visual != line) lineN = lineNo(visual); + var order = getOrder(visual); + var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); + return Pos(lineN, ch); + } + function lineEnd(cm, lineN) { + var merged, line = getLine(cm.doc, lineN); + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + lineN = null; + } + var order = getOrder(line); + var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); + return Pos(lineN == null ? lineNo(line) : lineN, ch); + } + + function compareBidiLevel(order, a, b) { + var linedir = order[0].level; + if (a == linedir) return true; + if (b == linedir) return false; + return a < b; + } + var bidiOther; + function getBidiPartAt(order, pos) { + bidiOther = null; + for (var i = 0, found; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < pos && cur.to > pos) return i; + if ((cur.from == pos || cur.to == pos)) { + if (found == null) { + found = i; + } else if (compareBidiLevel(order, cur.level, order[found].level)) { + if (cur.from != cur.to) bidiOther = found; + return i; + } else { + if (cur.from != cur.to) bidiOther = i; + return found; + } + } + } + return found; + } + + function moveInLine(line, pos, dir, byUnit) { + if (!byUnit) return pos + dir; + do pos += dir; + while (pos > 0 && isExtendingChar(line.text.charAt(pos))); + return pos; + } + + // This is needed in order to move 'visually' through bi-directional + // text -- i.e., pressing left should make the cursor go left, even + // when in RTL text. The tricky part is the 'jumps', where RTL and + // LTR text touch each other. This often requires the cursor offset + // to move more than one unit, in order to visually move one unit. + function moveVisually(line, start, dir, byUnit) { + var bidi = getOrder(line); + if (!bidi) return moveLogically(line, start, dir, byUnit); + var pos = getBidiPartAt(bidi, start), part = bidi[pos]; + var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); + + for (;;) { + if (target > part.from && target < part.to) return target; + if (target == part.from || target == part.to) { + if (getBidiPartAt(bidi, target) == pos) return target; + part = bidi[pos += dir]; + return (dir > 0) == part.level % 2 ? part.to : part.from; + } else { + part = bidi[pos += dir]; + if (!part) return null; + if ((dir > 0) == part.level % 2) + target = moveInLine(line, part.to, -1, byUnit); + else + target = moveInLine(line, part.from, 1, byUnit); + } + } + } + + function moveLogically(line, start, dir, byUnit) { + var target = start + dir; + if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; + return target < 0 || target > line.text.length ? null : target; + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; + // Character types for codepoints 0x600 to 0x6ff + var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; + function charType(code) { + if (code <= 0xf7) return lowTypes.charAt(code); + else if (0x590 <= code && code <= 0x5f4) return "R"; + else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); + else if (0x6ee <= code && code <= 0x8ac) return "r"; + else if (0x2000 <= code && code <= 0x200b) return "w"; + else if (code == 0x200c) return "b"; + else return "L"; + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + // Browsers seem to always treat the boundaries of block elements as being L. + var outerType = "L"; + + function BidiSpan(level, from, to) { + this.level = level; + this.from = from; this.to = to; + } + + return function(str) { + if (!bidiRE.test(str)) return false; + var len = str.length, types = []; + for (var i = 0, type; i < len; ++i) + types.push(type = charType(str.charCodeAt(i))); + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i = 0, prev = outerType; i < len; ++i) { + var type = types[i]; + if (type == "m") types[i] = prev; + else prev = type; + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (type == "1" && cur == "r") types[i] = "n"; + else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i = 1, prev = types[0]; i < len - 1; ++i) { + var type = types[i]; + if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; + else if (type == "," && prev == types[i+1] && + (prev == "1" || prev == "n")) types[i] = prev; + prev = type; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i = 0; i < len; ++i) { + var type = types[i]; + if (type == ",") types[i] = "N"; + else if (type == "%") { + for (var end = i + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (cur == "L" && type == "1") types[i] = "L"; + else if (isStrong.test(type)) cur = type; + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i = 0; i < len; ++i) { + if (isNeutral.test(types[i])) { + for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} + var before = (i ? types[i-1] : outerType) == "L"; + var after = (end < len ? types[end] : outerType) == "L"; + var replace = before || after ? "L" : "R"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i = 0; i < len;) { + if (countsAsLeft.test(types[i])) { + var start = i; + for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} + order.push(new BidiSpan(0, start, i)); + } else { + var pos = i, at = order.length; + for (++i; i < len && types[i] != "L"; ++i) {} + for (var j = pos; j < i;) { + if (countsAsNum.test(types[j])) { + if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); + var nstart = j; + for (++j; j < i && countsAsNum.test(types[j]); ++j) {} + order.splice(at, 0, new BidiSpan(2, nstart, j)); + pos = j; + } else ++j; + } + if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); + } + } + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift(new BidiSpan(0, 0, m[0].length)); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push(new BidiSpan(0, len - m[0].length, len)); + } + if (order[0].level != lst(order).level) + order.push(new BidiSpan(order[0].level, len, len)); + + return order; + }; + })(); + + // THE END + + CodeMirror.version = "4.0.3"; + + return CodeMirror; +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/clike/clike.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/clike/clike.js new file mode 100644 index 0000000..b44d0d9 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/clike/clike.js @@ -0,0 +1,437 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("clike", function(config, parserConfig) { + var indentUnit = config.indentUnit, + statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, + dontAlignCalls = parserConfig.dontAlignCalls, + keywords = parserConfig.keywords || {}, + builtin = parserConfig.builtin || {}, + blockKeywords = parserConfig.blockKeywords || {}, + atoms = parserConfig.atoms || {}, + hooks = parserConfig.hooks || {}, + multiLineStrings = parserConfig.multiLineStrings; + var isOperatorChar = /[+\-*&%=<>!?|\/]/; + + var curPunc; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + curPunc = ch; + return null; + } + if (/\d/.test(ch)) { + stream.eatWhile(/[\w\.]/); + return "number"; + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return "operator"; + } + stream.eatWhile(/[\w\$_]/); + var cur = stream.current(); + if (keywords.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "keyword"; + } + if (builtin.propertyIsEnumerable(cur)) { + if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; + return "builtin"; + } + if (atoms.propertyIsEnumerable(cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function Context(indented, column, type, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.align = align; + this.prev = prev; + } + function pushContext(state, col, type) { + var indent = state.indented; + if (state.context && state.context.type == "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, null, state.context); + } + function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), + indented: 0, + startOfLine: true + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) return null; + curPunc = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement") popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement")) + pushContext(state, stream.column(), "statement"); + state.startOfLine = false; + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + var closing = firstChar == ctx.type; + if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); + else if (ctx.align && (!dontAlignCalls || ctx.type != ")")) return ctx.column + (closing ? 0 : 1); + else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; + else return ctx.indented + (closing ? 0 : indentUnit); + }, + + electricChars: "{}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "brace" + }; +}); + +(function() { + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + var cKeywords = "auto if break int case long char register continue return default short do sizeof " + + "double static else struct entry switch extern typedef float union for unsigned " + + "goto while enum void const signed volatile"; + + function cppHook(stream, state) { + if (!state.startOfLine) return false; + for (;;) { + if (stream.skipTo("\\")) { + stream.next(); + if (stream.eol()) { + state.tokenize = cppHook; + break; + } + } else { + stream.skipToEnd(); + state.tokenize = null; + break; + } + } + return "meta"; + } + + function cpp11StringHook(stream, state) { + stream.backUp(1); + // Raw strings. + if (stream.match(/(R|u8R|uR|UR|LR)/)) { + var match = stream.match(/"(.{0,16})\(/); + if (!match) { + return false; + } + state.cpp11RawStringDelim = match[1]; + state.tokenize = tokenRawString; + return tokenRawString(stream, state); + } + // Unicode strings/chars. + if (stream.match(/(u8|u|U|L)/)) { + if (stream.match(/["']/, /* eat */ false)) { + return "string"; + } + return false; + } + // Ignore this hook. + stream.next(); + return false; + } + + // C#-style strings where "" escapes a quote. + function tokenAtString(stream, state) { + var next; + while ((next = stream.next()) != null) { + if (next == '"' && !stream.eat('"')) { + state.tokenize = null; + break; + } + } + return "string"; + } + + // C++11 raw string literal is "( anything )", where + // can be a string up to 16 characters long. + function tokenRawString(stream, state) { + var closingSequence = new RegExp(".*?\\)" + state.cpp11RawStringDelim + '"'); + var match = stream.match(closingSequence); + if (match) { + state.tokenize = null; + } else { + stream.skipToEnd(); + } + return "string"; + } + + function def(mimes, mode) { + var words = []; + function add(obj) { + if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) + words.push(prop); + } + add(mode.keywords); + add(mode.builtin); + add(mode.atoms); + if (words.length) { + mode.helperType = mimes[0]; + CodeMirror.registerHelper("hintWords", mimes[0], words); + } + + for (var i = 0; i < mimes.length; ++i) + CodeMirror.defineMIME(mimes[i], mode); + } + + def(["text/x-csrc", "text/x-c", "text/x-chdr"], { + name: "clike", + keywords: words(cKeywords), + blockKeywords: words("case do else for if switch while struct"), + atoms: words("null"), + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); + + def(["text/x-c++src", "text/x-c++hdr"], { + name: "clike", + keywords: words(cKeywords + " asm dynamic_cast namespace reinterpret_cast try bool explicit new " + + "static_cast typeid catch operator template typename class friend private " + + "this using const_cast inline public throw virtual delete mutable protected " + + "wchar_t alignas alignof constexpr decltype nullptr noexcept thread_local final " + + "static_assert override"), + blockKeywords: words("catch class do else finally for if struct switch try while"), + atoms: words("true false null"), + hooks: { + "#": cppHook, + "u": cpp11StringHook, + "U": cpp11StringHook, + "L": cpp11StringHook, + "R": cpp11StringHook + }, + modeProps: {fold: ["brace", "include"]} + }); + CodeMirror.defineMIME("text/x-java", { + name: "clike", + keywords: words("abstract assert boolean break byte case catch char class const continue default " + + "do double else enum extends final finally float for goto if implements import " + + "instanceof int interface long native new package private protected public " + + "return short static strictfp super switch synchronized this throw throws transient " + + "try void volatile while"), + blockKeywords: words("catch class do else finally for if switch try while"), + atoms: words("true false null"), + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + }, + modeProps: {fold: ["brace", "import"]} + }); + CodeMirror.defineMIME("text/x-csharp", { + name: "clike", + keywords: words("abstract as base break case catch checked class const continue" + + " default delegate do else enum event explicit extern finally fixed for" + + " foreach goto if implicit in interface internal is lock namespace new" + + " operator out override params private protected public readonly ref return sealed" + + " sizeof stackalloc static struct switch this throw try typeof unchecked" + + " unsafe using virtual void volatile while add alias ascending descending dynamic from get" + + " global group into join let orderby partial remove select set value var yield"), + blockKeywords: words("catch class do else finally for foreach if struct switch try while"), + builtin: words("Boolean Byte Char DateTime DateTimeOffset Decimal Double" + + " Guid Int16 Int32 Int64 Object SByte Single String TimeSpan UInt16 UInt32" + + " UInt64 bool byte char decimal double short int long object" + + " sbyte float string ushort uint ulong"), + atoms: words("true false null"), + hooks: { + "@": function(stream, state) { + if (stream.eat('"')) { + state.tokenize = tokenAtString; + return tokenAtString(stream, state); + } + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); + CodeMirror.defineMIME("text/x-scala", { + name: "clike", + keywords: words( + + /* scala */ + "abstract case catch class def do else extends false final finally for forSome if " + + "implicit import lazy match new null object override package private protected return " + + "sealed super this throw trait try trye type val var while with yield _ : = => <- <: " + + "<% >: # @ " + + + /* package scala */ + "assert assume require print println printf readLine readBoolean readByte readShort " + + "readChar readInt readLong readFloat readDouble " + + + "AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either " + + "Enumeration Equiv Error Exception Fractional Function IndexedSeq Integral Iterable " + + "Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering " + + "Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder " + + "StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector :: #:: " + + + /* package java.lang */ + "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" + + + ), + blockKeywords: words("catch class do else finally for forSome if match switch try while"), + atoms: words("true false null"), + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); + def(["x-shader/x-vertex", "x-shader/x-fragment"], { + name: "clike", + keywords: words("float int bool void " + + "vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 " + + "mat2 mat3 mat4 " + + "sampler1D sampler2D sampler3D samplerCube " + + "sampler1DShadow sampler2DShadow" + + "const attribute uniform varying " + + "break continue discard return " + + "for while do if else struct " + + "in out inout"), + blockKeywords: words("for while do if else struct"), + builtin: words("radians degrees sin cos tan asin acos atan " + + "pow exp log exp2 sqrt inversesqrt " + + "abs sign floor ceil fract mod min max clamp mix step smootstep " + + "length distance dot cross normalize ftransform faceforward " + + "reflect refract matrixCompMult " + + "lessThan lessThanEqual greaterThan greaterThanEqual " + + "equal notEqual any all not " + + "texture1D texture1DProj texture1DLod texture1DProjLod " + + "texture2D texture2DProj texture2DLod texture2DProjLod " + + "texture3D texture3DProj texture3DLod texture3DProjLod " + + "textureCube textureCubeLod " + + "shadow1D shadow2D shadow1DProj shadow2DProj " + + "shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod " + + "dFdx dFdy fwidth " + + "noise1 noise2 noise3 noise4"), + atoms: words("true false " + + "gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex " + + "gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 " + + "gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 " + + "gl_FogCoord " + + "gl_Position gl_PointSize gl_ClipVertex " + + "gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor " + + "gl_TexCoord gl_FogFragCoord " + + "gl_FragCoord gl_FrontFacing " + + "gl_FragColor gl_FragData gl_FragDepth " + + "gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix " + + "gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse " + + "gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse " + + "gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose " + + "gl_ProjectionMatrixInverseTranspose " + + "gl_ModelViewProjectionMatrixInverseTranspose " + + "gl_TextureMatrixInverseTranspose " + + "gl_NormalScale gl_DepthRange gl_ClipPlane " + + "gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel " + + "gl_FrontLightModelProduct gl_BackLightModelProduct " + + "gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ " + + "gl_FogParameters " + + "gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords " + + "gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats " + + "gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits " + + "gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits " + + "gl_MaxDrawBuffers"), + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); +}()); + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/css/css.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/css/css.js new file mode 100644 index 0000000..f0483c9 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/css/css.js @@ -0,0 +1,701 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("css", function(config, parserConfig) { + if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); + + var indentUnit = config.indentUnit, + tokenHooks = parserConfig.tokenHooks, + mediaTypes = parserConfig.mediaTypes || {}, + mediaFeatures = parserConfig.mediaFeatures || {}, + propertyKeywords = parserConfig.propertyKeywords || {}, + colorKeywords = parserConfig.colorKeywords || {}, + valueKeywords = parserConfig.valueKeywords || {}, + fontProperties = parserConfig.fontProperties || {}, + allowNested = parserConfig.allowNested; + + var type, override; + function ret(style, tp) { type = tp; return style; } + + // Tokenizers + + function tokenBase(stream, state) { + var ch = stream.next(); + if (tokenHooks[ch]) { + var result = tokenHooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == "@") { + stream.eatWhile(/[\w\\\-]/); + return ret("def", stream.current()); + } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { + return ret(null, "compare"); + } else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "#") { + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "hash"); + } else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (ch === "-") { + if (/[\d.]/.test(stream.peek())) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (stream.match(/^[^-]+-/)) { + return ret("meta", "meta"); + } + } else if (/[,+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { + return ret("qualifier", "qualifier"); + } else if (/[:;{}\[\]\(\)]/.test(ch)) { + return ret(null, ch); + } else if (ch == "u" && stream.match("rl(")) { + stream.backUp(1); + state.tokenize = tokenParenthesized; + return ret("property", "word"); + } else if (/[\w\\\-]/.test(ch)) { + stream.eatWhile(/[\w\\\-]/); + return ret("property", "word"); + } else { + return ret(null, null); + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + if (quote == ")") stream.backUp(1); + break; + } + escaped = !escaped && ch == "\\"; + } + if (ch == quote || !escaped && quote != ")") state.tokenize = null; + return ret("string", "string"); + }; + } + + function tokenParenthesized(stream, state) { + stream.next(); // Must be '(' + if (!stream.match(/\s*[\"\']/, false)) + state.tokenize = tokenString(")"); + else + state.tokenize = null; + return ret(null, "("); + } + + // Context management + + function Context(type, indent, prev) { + this.type = type; + this.indent = indent; + this.prev = prev; + } + + function pushContext(state, stream, type) { + state.context = new Context(type, stream.indentation() + indentUnit, state.context); + return type; + } + + function popContext(state) { + state.context = state.context.prev; + return state.context.type; + } + + function pass(type, stream, state) { + return states[state.context.type](type, stream, state); + } + function popAndPass(type, stream, state, n) { + for (var i = n || 1; i > 0; i--) + state.context = state.context.prev; + return pass(type, stream, state); + } + + // Parser + + function wordAsValue(stream) { + var word = stream.current().toLowerCase(); + if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "variable"; + } + + var states = {}; + + states.top = function(type, stream, state) { + if (type == "{") { + return pushContext(state, stream, "block"); + } else if (type == "}" && state.context.prev) { + return popContext(state); + } else if (type == "@media") { + return pushContext(state, stream, "media"); + } else if (type == "@font-face") { + return "font_face_before"; + } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { + return "keyframes"; + } else if (type && type.charAt(0) == "@") { + return pushContext(state, stream, "at"); + } else if (type == "hash") { + override = "builtin"; + } else if (type == "word") { + override = "tag"; + } else if (type == "variable-definition") { + return "maybeprop"; + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } else if (type == ":") { + return "pseudo"; + } else if (allowNested && type == "(") { + return pushContext(state, stream, "params"); + } + return state.context.type; + }; + + states.block = function(type, stream, state) { + if (type == "word") { + if (propertyKeywords.hasOwnProperty(stream.current().toLowerCase())) { + override = "property"; + return "maybeprop"; + } else if (allowNested) { + override = stream.match(/^\s*:/, false) ? "property" : "tag"; + return "block"; + } else { + override += " error"; + return "maybeprop"; + } + } else if (type == "meta") { + return "block"; + } else if (!allowNested && (type == "hash" || type == "qualifier")) { + override = "error"; + return "block"; + } else { + return states.top(type, stream, state); + } + }; + + states.maybeprop = function(type, stream, state) { + if (type == ":") return pushContext(state, stream, "prop"); + return pass(type, stream, state); + }; + + states.prop = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); + if (type == "}" || type == "{") return popAndPass(type, stream, state); + if (type == "(") return pushContext(state, stream, "parens"); + + if (type == "hash" && !/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(stream.current())) { + override += " error"; + } else if (type == "word") { + wordAsValue(stream); + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } + return "prop"; + }; + + states.propBlock = function(type, _stream, state) { + if (type == "}") return popContext(state); + if (type == "word") { override = "property"; return "maybeprop"; } + return state.context.type; + }; + + states.parens = function(type, stream, state) { + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == ")") return popContext(state); + return "parens"; + }; + + states.pseudo = function(type, stream, state) { + if (type == "word") { + override = "variable-3"; + return state.context.type; + } + return pass(type, stream, state); + }; + + states.media = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "media_parens"); + if (type == "}") return popAndPass(type, stream, state); + if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); + + if (type == "word") { + var word = stream.current().toLowerCase(); + if (word == "only" || word == "not" || word == "and") + override = "keyword"; + else if (mediaTypes.hasOwnProperty(word)) + override = "attribute"; + else if (mediaFeatures.hasOwnProperty(word)) + override = "property"; + else + override = "error"; + } + return state.context.type; + }; + + states.media_parens = function(type, stream, state) { + if (type == ")") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); + return states.media(type, stream, state); + }; + + states.font_face_before = function(type, stream, state) { + if (type == "{") + return pushContext(state, stream, "font_face"); + return pass(type, stream, state); + }; + + states.font_face = function(type, stream, state) { + if (type == "}") return popContext(state); + if (type == "word") { + if (!fontProperties.hasOwnProperty(stream.current().toLowerCase())) + override = "error"; + else + override = "property"; + return "maybeprop"; + } + return "font_face"; + }; + + states.keyframes = function(type, stream, state) { + if (type == "word") { override = "variable"; return "keyframes"; } + if (type == "{") return pushContext(state, stream, "top"); + return pass(type, stream, state); + }; + + states.at = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == "word") override = "tag"; + else if (type == "hash") override = "builtin"; + return "at"; + }; + + states.interpolation = function(type, stream, state) { + if (type == "}") return popContext(state); + if (type == "{" || type == ";") return popAndPass(type, stream, state); + if (type != "variable") override = "error"; + return "interpolation"; + }; + + states.params = function(type, stream, state) { + if (type == ")") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == "word") wordAsValue(stream); + return "params"; + }; + + return { + startState: function(base) { + return {tokenize: null, + state: "top", + context: new Context("top", base || 0, null)}; + }, + + token: function(stream, state) { + if (!state.tokenize && stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style && typeof style == "object") { + type = style[1]; + style = style[0]; + } + override = style; + state.state = states[state.state](type, stream, state); + return override; + }, + + indent: function(state, textAfter) { + var cx = state.context, ch = textAfter && textAfter.charAt(0); + var indent = cx.indent; + if (cx.type == "prop" && ch == "}") cx = cx.prev; + if (cx.prev && + (ch == "}" && (cx.type == "block" || cx.type == "top" || cx.type == "interpolation" || cx.type == "font_face") || + ch == ")" && (cx.type == "parens" || cx.type == "params" || cx.type == "media_parens") || + ch == "{" && (cx.type == "at" || cx.type == "media"))) { + indent = cx.indent - indentUnit; + cx = cx.prev; + } + return indent; + }, + + electricChars: "}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + fold: "brace" + }; +}); + + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i]] = true; + } + return keys; + } + + var mediaTypes_ = [ + "all", "aural", "braille", "handheld", "print", "projection", "screen", + "tty", "tv", "embossed" + ], mediaTypes = keySet(mediaTypes_); + + var mediaFeatures_ = [ + "width", "min-width", "max-width", "height", "min-height", "max-height", + "device-width", "min-device-width", "max-device-width", "device-height", + "min-device-height", "max-device-height", "aspect-ratio", + "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", + "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", + "max-color", "color-index", "min-color-index", "max-color-index", + "monochrome", "min-monochrome", "max-monochrome", "resolution", + "min-resolution", "max-resolution", "scan", "grid" + ], mediaFeatures = keySet(mediaFeatures_); + + var propertyKeywords_ = [ + "align-content", "align-items", "align-self", "alignment-adjust", + "alignment-baseline", "anchor-point", "animation", "animation-delay", + "animation-direction", "animation-duration", "animation-fill-mode", + "animation-iteration-count", "animation-name", "animation-play-state", + "animation-timing-function", "appearance", "azimuth", "backface-visibility", + "background", "background-attachment", "background-clip", "background-color", + "background-image", "background-origin", "background-position", + "background-repeat", "background-size", "baseline-shift", "binding", + "bleed", "bookmark-label", "bookmark-level", "bookmark-state", + "bookmark-target", "border", "border-bottom", "border-bottom-color", + "border-bottom-left-radius", "border-bottom-right-radius", + "border-bottom-style", "border-bottom-width", "border-collapse", + "border-color", "border-image", "border-image-outset", + "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-left", "border-left-color", + "border-left-style", "border-left-width", "border-radius", "border-right", + "border-right-color", "border-right-style", "border-right-width", + "border-spacing", "border-style", "border-top", "border-top-color", + "border-top-left-radius", "border-top-right-radius", "border-top-style", + "border-top-width", "border-width", "bottom", "box-decoration-break", + "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", + "caption-side", "clear", "clip", "color", "color-profile", "column-count", + "column-fill", "column-gap", "column-rule", "column-rule-color", + "column-rule-style", "column-rule-width", "column-span", "column-width", + "columns", "content", "counter-increment", "counter-reset", "crop", "cue", + "cue-after", "cue-before", "cursor", "direction", "display", + "dominant-baseline", "drop-initial-after-adjust", + "drop-initial-after-align", "drop-initial-before-adjust", + "drop-initial-before-align", "drop-initial-size", "drop-initial-value", + "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", + "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", + "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", + "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", + "font-stretch", "font-style", "font-synthesis", "font-variant", + "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", + "font-variant-ligatures", "font-variant-numeric", "font-variant-position", + "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", + "grid-auto-position", "grid-auto-rows", "grid-column", "grid-column-end", + "grid-column-start", "grid-row", "grid-row-end", "grid-row-start", + "grid-template", "grid-template-areas", "grid-template-columns", + "grid-template-rows", "hanging-punctuation", "height", "hyphens", + "icon", "image-orientation", "image-rendering", "image-resolution", + "inline-box-align", "justify-content", "left", "letter-spacing", + "line-break", "line-height", "line-stacking", "line-stacking-ruby", + "line-stacking-shift", "line-stacking-strategy", "list-style", + "list-style-image", "list-style-position", "list-style-type", "margin", + "margin-bottom", "margin-left", "margin-right", "margin-top", + "marker-offset", "marks", "marquee-direction", "marquee-loop", + "marquee-play-count", "marquee-speed", "marquee-style", "max-height", + "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", + "nav-left", "nav-right", "nav-up", "opacity", "order", "orphans", "outline", + "outline-color", "outline-offset", "outline-style", "outline-width", + "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", + "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", + "page", "page-break-after", "page-break-before", "page-break-inside", + "page-policy", "pause", "pause-after", "pause-before", "perspective", + "perspective-origin", "pitch", "pitch-range", "play-during", "position", + "presentation-level", "punctuation-trim", "quotes", "region-break-after", + "region-break-before", "region-break-inside", "region-fragment", + "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", + "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", + "ruby-position", "ruby-span", "shape-inside", "shape-outside", "size", + "speak", "speak-as", "speak-header", + "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", + "tab-size", "table-layout", "target", "target-name", "target-new", + "target-position", "text-align", "text-align-last", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-skip", + "text-decoration-style", "text-emphasis", "text-emphasis-color", + "text-emphasis-position", "text-emphasis-style", "text-height", + "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", + "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", + "text-wrap", "top", "transform", "transform-origin", "transform-style", + "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "unicode-bidi", + "vertical-align", "visibility", "voice-balance", "voice-duration", + "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", + "voice-volume", "volume", "white-space", "widows", "width", "word-break", + "word-spacing", "word-wrap", "z-index", "zoom", + // SVG-specific + "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", + "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", + "color-interpolation", "color-interpolation-filters", "color-profile", + "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", + "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", + "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", + "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", + "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", + "glyph-orientation-vertical", "kerning", "text-anchor", "writing-mode" + ], propertyKeywords = keySet(propertyKeywords_); + + var colorKeywords_ = [ + "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", + "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", + "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", + "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", + "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", + "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", + "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", + "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", + "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", + "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", + "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", + "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", + "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", + "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", + "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", + "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", + "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", + "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", + "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", + "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", + "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", + "purple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", + "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", + "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", + "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", + "whitesmoke", "yellow", "yellowgreen" + ], colorKeywords = keySet(colorKeywords_); + + var valueKeywords_ = [ + "above", "absolute", "activeborder", "activecaption", "afar", + "after-white-space", "ahead", "alias", "all", "all-scroll", "alternate", + "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", + "arabic-indic", "armenian", "asterisks", "auto", "avoid", "avoid-column", "avoid-page", + "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", + "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", + "both", "bottom", "break", "break-all", "break-word", "button", "button-bevel", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "cambodian", + "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", + "cell", "center", "checkbox", "circle", "cjk-earthly-branch", + "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", + "col-resize", "collapse", "column", "compact", "condensed", "contain", "content", + "content-box", "context-menu", "continuous", "copy", "cover", "crop", + "cross", "crosshair", "currentcolor", "cursive", "dashed", "decimal", + "decimal-leading-zero", "default", "default-button", "destination-atop", + "destination-in", "destination-out", "destination-over", "devanagari", + "disc", "discard", "document", "dot-dash", "dot-dot-dash", "dotted", + "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", + "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", + "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", + "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", + "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", + "ethiopic-halehame-gez", "ethiopic-halehame-om-et", + "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", + "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", + "ethiopic-halehame-tig", "ew-resize", "expanded", "extra-condensed", + "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "footnotes", + "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove", + "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew", + "help", "hidden", "hide", "higher", "highlight", "highlighttext", + "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore", + "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", + "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", + "inline-block", "inline-table", "inset", "inside", "intrinsic", "invert", + "italic", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", + "landscape", "lao", "large", "larger", "left", "level", "lighter", + "line-through", "linear", "lines", "list-item", "listbox", "listitem", + "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", + "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", + "lower-roman", "lowercase", "ltr", "malayalam", "match", + "media-controls-background", "media-current-time-display", + "media-fullscreen-button", "media-mute-button", "media-play-button", + "media-return-to-realtime-button", "media-rewind-button", + "media-seek-back-button", "media-seek-forward-button", "media-slider", + "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", + "media-volume-slider-container", "media-volume-sliderthumb", "medium", + "menu", "menulist", "menulist-button", "menulist-text", + "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", + "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize", + "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", + "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", + "ns-resize", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", + "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", + "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", + "painted", "page", "paused", "persian", "plus-darker", "plus-lighter", "pointer", + "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", + "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", + "relative", "repeat", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", + "ridge", "right", "round", "row-resize", "rtl", "run-in", "running", + "s-resize", "sans-serif", "scroll", "scrollbar", "se-resize", "searchfield", + "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", + "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", + "single", "skip-white-space", "slide", "slider-horizontal", + "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", + "small", "small-caps", "small-caption", "smaller", "solid", "somali", + "source-atop", "source-in", "source-out", "source-over", "space", "square", + "square-button", "start", "static", "status-bar", "stretch", "stroke", + "sub", "subpixel-antialiased", "super", "sw-resize", "table", + "table-caption", "table-cell", "table-column", "table-column-group", + "table-footer-group", "table-header-group", "table-row", "table-row-group", + "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", + "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", + "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", + "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", + "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", + "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", + "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", + "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", + "window", "windowframe", "windowtext", "x-large", "x-small", "xor", + "xx-large", "xx-small" + ], valueKeywords = keySet(valueKeywords_); + + var fontProperties_ = [ + "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", + "font-stretch", "font-weight", "font-style" + ], fontProperties = keySet(fontProperties_); + + var allWords = mediaTypes_.concat(mediaFeatures_).concat(propertyKeywords_).concat(colorKeywords_).concat(valueKeywords_); + CodeMirror.registerHelper("hintWords", "css", allWords); + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + function tokenSGMLComment(stream, state) { + if (stream.skipTo("-->")) { + stream.match("-->"); + state.tokenize = null; + } else { + stream.skipToEnd(); + } + return ["comment", "comment"]; + } + + CodeMirror.defineMIME("text/css", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + propertyKeywords: propertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + tokenHooks: { + "<": function(stream, state) { + if (!stream.match("!--")) return false; + state.tokenize = tokenSGMLComment; + return tokenSGMLComment(stream, state); + }, + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css" + }); + + CodeMirror.defineMIME("text/x-scss", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + propertyKeywords: propertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + ":": function(stream) { + if (stream.match(/\s*{/)) + return [null, "{"]; + return false; + }, + "$": function(stream) { + stream.match(/^[\w-]+/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "#": function(stream) { + if (!stream.eat("{")) return false; + return [null, "interpolation"]; + } + }, + name: "css", + helperType: "scss" + }); + + CodeMirror.defineMIME("text/x-less", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + propertyKeywords: propertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + "@": function(stream) { + if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/, false)) return false; + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "&": function() { + return ["atom", "atom"]; + } + }, + name: "css", + helperType: "less" + }); + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/htmlmixed/htmlmixed.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/htmlmixed/htmlmixed.js new file mode 100644 index 0000000..a88d9e6 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/htmlmixed/htmlmixed.js @@ -0,0 +1,117 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("htmlmixed", function(config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, {name: "xml", + htmlMode: true, + multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, + multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag}); + var cssMode = CodeMirror.getMode(config, "css"); + + var scriptTypes = [], scriptTypesConf = parserConfig && parserConfig.scriptTypes; + scriptTypes.push({matches: /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i, + mode: CodeMirror.getMode(config, "javascript")}); + if (scriptTypesConf) for (var i = 0; i < scriptTypesConf.length; ++i) { + var conf = scriptTypesConf[i]; + scriptTypes.push({matches: conf.matches, mode: conf.mode && CodeMirror.getMode(config, conf.mode)}); + } + scriptTypes.push({matches: /./, + mode: CodeMirror.getMode(config, "text/plain")}); + + function html(stream, state) { + var tagName = state.htmlState.tagName; + var style = htmlMode.token(stream, state.htmlState); + if (tagName == "script" && /\btag\b/.test(style) && stream.current() == ">") { + // Script block: mode to change to depends on type attribute + var scriptType = stream.string.slice(Math.max(0, stream.pos - 100), stream.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i); + scriptType = scriptType ? scriptType[1] : ""; + if (scriptType && /[\"\']/.test(scriptType.charAt(0))) scriptType = scriptType.slice(1, scriptType.length - 1); + for (var i = 0; i < scriptTypes.length; ++i) { + var tp = scriptTypes[i]; + if (typeof tp.matches == "string" ? scriptType == tp.matches : tp.matches.test(scriptType)) { + if (tp.mode) { + state.token = script; + state.localMode = tp.mode; + state.localState = tp.mode.startState && tp.mode.startState(htmlMode.indent(state.htmlState, "")); + } + break; + } + } + } else if (tagName == "style" && /\btag\b/.test(style) && stream.current() == ">") { + state.token = css; + state.localMode = cssMode; + state.localState = cssMode.startState(htmlMode.indent(state.htmlState, "")); + } + return style; + } + function maybeBackup(stream, pat, style) { + var cur = stream.current(); + var close = cur.search(pat), m; + if (close > -1) stream.backUp(cur.length - close); + else if (m = cur.match(/<\/?$/)) { + stream.backUp(cur.length); + if (!stream.match(pat, false)) stream.match(cur); + } + return style; + } + function script(stream, state) { + if (stream.match(/^<\/\s*script\s*>/i, false)) { + state.token = html; + state.localState = state.localMode = null; + return html(stream, state); + } + return maybeBackup(stream, /<\/\s*script\s*>/, + state.localMode.token(stream, state.localState)); + } + function css(stream, state) { + if (stream.match(/^<\/\s*style\s*>/i, false)) { + state.token = html; + state.localState = state.localMode = null; + return html(stream, state); + } + return maybeBackup(stream, /<\/\s*style\s*>/, + cssMode.token(stream, state.localState)); + } + + return { + startState: function() { + var state = htmlMode.startState(); + return {token: html, localMode: null, localState: null, htmlState: state}; + }, + + copyState: function(state) { + if (state.localState) + var local = CodeMirror.copyState(state.localMode, state.localState); + return {token: state.token, localMode: state.localMode, localState: local, + htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; + }, + + token: function(stream, state) { + return state.token(stream, state); + }, + + indent: function(state, textAfter) { + if (!state.localMode || /^\s*<\//.test(textAfter)) + return htmlMode.indent(state.htmlState, textAfter); + else if (state.localMode.indent) + return state.localMode.indent(state.localState, textAfter); + else + return CodeMirror.Pass; + }, + + innerMode: function(state) { + return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; + } + }; +}, "xml", "javascript", "css"); + +CodeMirror.defineMIME("text/html", "htmlmixed"); + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/javascript/javascript.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/javascript/javascript.js new file mode 100644 index 0000000..329e2ab --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/javascript/javascript.js @@ -0,0 +1,652 @@ +// TODO actually recognize syntax of TypeScript constructs + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("javascript", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var statementIndent = parserConfig.statementIndent; + var jsonldMode = parserConfig.jsonld; + var jsonMode = parserConfig.json || jsonldMode; + var isTS = parserConfig.typescript; + + // Tokenizer + + var keywords = function(){ + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}; + + var jsKeywords = { + "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, + "return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C, "debugger": C, + "var": kw("var"), "const": kw("var"), "let": kw("var"), + "function": kw("function"), "catch": kw("catch"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "typeof": operator, "instanceof": operator, + "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, + "this": kw("this"), "module": kw("module"), "class": kw("class"), "super": kw("atom"), + "yield": C, "export": kw("export"), "import": kw("import"), "extends": C + }; + + // Extend the 'normal' keywords with the TypeScript language extensions + if (isTS) { + var type = {type: "variable", style: "variable-3"}; + var tsKeywords = { + // object-like things + "interface": kw("interface"), + "extends": kw("extends"), + "constructor": kw("constructor"), + + // scope modifiers + "public": kw("public"), + "private": kw("private"), + "protected": kw("protected"), + "static": kw("static"), + + // types + "string": type, "number": type, "bool": type, "any": type + }; + + for (var attr in tsKeywords) { + jsKeywords[attr] = tsKeywords[attr]; + } + } + + return jsKeywords; + }(); + + var isOperatorChar = /[+\-*&%=<>!?|~^]/; + var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; + + function readRegexp(stream) { + var escaped = false, next, inSet = false; + while ((next = stream.next()) != null) { + if (!escaped) { + if (next == "/" && !inSet) return; + if (next == "[") inSet = true; + else if (inSet && next == "]") inSet = false; + } + escaped = !escaped && next == "\\"; + } + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { + return ret("number", "number"); + } else if (ch == "." && stream.match("..")) { + return ret("spread", "meta"); + } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return ret(ch); + } else if (ch == "=" && stream.eat(">")) { + return ret("=>", "operator"); + } else if (ch == "0" && stream.eat(/x/i)) { + stream.eatWhile(/[\da-f]/i); + return ret("number", "number"); + } else if (/\d/.test(ch)) { + stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); + return ret("number", "number"); + } else if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else if (state.lastType == "operator" || state.lastType == "keyword c" || + state.lastType == "sof" || /^[\[{}\(,;:]$/.test(state.lastType)) { + readRegexp(stream); + stream.eatWhile(/[gimy]/); // 'y' is "sticky" option in Mozilla + return ret("regexp", "string-2"); + } else { + stream.eatWhile(isOperatorChar); + return ret("operator", "operator", stream.current()); + } + } else if (ch == "`") { + state.tokenize = tokenQuasi; + return tokenQuasi(stream, state); + } else if (ch == "#") { + stream.skipToEnd(); + return ret("error", "error"); + } else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return ret("operator", "operator", stream.current()); + } else { + stream.eatWhile(/[\w\$_]/); + var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; + return (known && state.lastType != ".") ? ret(known.type, known.style, word) : + ret("variable", "variable", word); + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next; + if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ + state.tokenize = tokenBase; + return ret("jsonld-keyword", "meta"); + } + while ((next = stream.next()) != null) { + if (next == quote && !escaped) break; + escaped = !escaped && next == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenQuasi(stream, state) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && next == "\\"; + } + return ret("quasi", "string-2", stream.current()); + } + + var brackets = "([{}])"; + // This is a crude lookahead trick to try and notice that we're + // parsing the argument patterns for a fat-arrow function before we + // actually hit the arrow token. It only works if the arrow is on + // the same line as the arguments and there's no strange noise + // (comments) in between. Fallback is to only notice when we hit the + // arrow, and not declare the arguments as locals for the arrow + // body. + function findFatArrow(stream, state) { + if (state.fatArrowAt) state.fatArrowAt = null; + var arrow = stream.string.indexOf("=>", stream.start); + if (arrow < 0) return; + + var depth = 0, sawSomething = false; + for (var pos = arrow - 1; pos >= 0; --pos) { + var ch = stream.string.charAt(pos); + var bracket = brackets.indexOf(ch); + if (bracket >= 0 && bracket < 3) { + if (!depth) { ++pos; break; } + if (--depth == 0) break; + } else if (bracket >= 3 && bracket < 6) { + ++depth; + } else if (/[$\w]/.test(ch)) { + sawSomething = true; + } else if (sawSomething && !depth) { + ++pos; + break; + } + } + if (sawSomething && !depth) state.fatArrowAt = pos; + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; + + function JSLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + for (var cx = state.context; cx; cx = cx.prev) { + for (var v = cx.vars; v; v = v.next) + if (v.name == varname) return true; + } + } + + function parseJS(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + return style; + } + } + } + + // Combinator utils + + var cx = {state: null, column: null, marked: null, cc: null}; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function register(varname) { + function inList(list) { + for (var v = list; v; v = v.next) + if (v.name == varname) return true; + return false; + } + var state = cx.state; + if (state.context) { + cx.marked = "def"; + if (inList(state.localVars)) return; + state.localVars = {name: varname, next: state.localVars}; + } else { + if (inList(state.globalVars)) return; + if (parserConfig.globalVars) + state.globalVars = {name: varname, next: state.globalVars}; + } + } + + // Combinators + + var defaultVars = {name: "this", next: {name: "arguments"}}; + function pushcontext() { + cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; + cx.state.localVars = defaultVars; + } + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + function pushlex(type, info) { + var result = function() { + var state = cx.state, indent = state.indented; + if (state.lexical.type == "stat") indent = state.lexical.indented; + state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + function exp(type) { + if (type == wanted) return cont(); + else if (wanted == ";") return pass(); + else return cont(exp); + }; + return exp; + } + + function statement(type, value) { + if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "{") return cont(pushlex("}"), block, poplex); + if (type == ";") return cont(); + if (type == "if") return cont(pushlex("form"), expression, statement, poplex, maybeelse); + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); + if (type == "variable") return cont(pushlex("stat"), maybelabel); + if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), + block, poplex, poplex); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), + statement, poplex, popcontext); + if (type == "module") return cont(pushlex("form"), pushcontext, afterModule, popcontext, poplex); + if (type == "class") return cont(pushlex("form"), className, objlit, poplex); + if (type == "export") return cont(pushlex("form"), afterExport, poplex); + if (type == "import") return cont(pushlex("form"), afterImport, poplex); + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function expression(type) { + return expressionInner(type, false); + } + function expressionNoComma(type) { + return expressionInner(type, true); + } + function expressionInner(type, noComma) { + if (cx.state.fatArrowAt == cx.stream.start) { + var body = noComma ? arrowBodyNoComma : arrowBody; + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext); + else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); + } + + var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; + if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); + if (type == "function") return cont(functiondef); + if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression); + if (type == "(") return cont(pushlex(")"), maybeexpression, comprehension, expect(")"), poplex, maybeop); + if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); + if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); + if (type == "{") return contCommasep(objprop, "}", null, maybeop); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + function maybeexpressionNoComma(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expressionNoComma); + } + + function maybeoperatorComma(type, value) { + if (type == ",") return cont(expression); + return maybeoperatorNoComma(type, value, false); + } + function maybeoperatorNoComma(type, value, noComma) { + var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; + var expr = noComma == false ? expression : expressionNoComma; + if (value == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); + if (type == "operator") { + if (/\+\+|--/.test(value)) return cont(me); + if (value == "?") return cont(expression, expect(":"), expr); + return cont(expr); + } + if (type == "quasi") { cx.cc.push(me); return quasi(value); } + if (type == ";") return; + if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); + if (type == ".") return cont(property, me); + if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); + } + function quasi(value) { + if (value.slice(value.length - 2) != "${") return cont(); + return cont(expression, continueQuasi); + } + function continueQuasi(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(); + } + } + function arrowBody(type) { + findFatArrow(cx.stream, cx.state); + if (type == "{") return pass(statement); + return pass(expression); + } + function arrowBodyNoComma(type) { + findFatArrow(cx.stream, cx.state); + if (type == "{") return pass(statement); + return pass(expressionNoComma); + } + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperatorComma, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type, value) { + if (type == "variable") { + cx.marked = "property"; + if (value == "get" || value == "set") return cont(getterSetter); + } else if (type == "number" || type == "string") { + cx.marked = jsonldMode ? "property" : (type + " property"); + } else if (type == "[") { + return cont(expression, expect("]"), afterprop); + } + if (atomicTypes.hasOwnProperty(type)) return cont(afterprop); + } + function getterSetter(type) { + if (type != "variable") return pass(afterprop); + cx.marked = "property"; + return cont(functiondef); + } + function afterprop(type) { + if (type == ":") return cont(expressionNoComma); + if (type == "(") return pass(functiondef); + } + function commasep(what, end) { + function proceed(type) { + if (type == ",") { + var lex = cx.state.lexical; + if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; + return cont(what, proceed); + } + if (type == end) return cont(); + return cont(expect(end)); + } + return function(type) { + if (type == end) return cont(); + return pass(what, proceed); + }; + } + function contCommasep(what, end, info) { + for (var i = 3; i < arguments.length; i++) + cx.cc.push(arguments[i]); + return cont(pushlex(end, info), commasep(what, end), poplex); + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function maybetype(type) { + if (isTS && type == ":") return cont(typedef); + } + function typedef(type) { + if (type == "variable"){cx.marked = "variable-3"; return cont();} + } + function vardef() { + return pass(pattern, maybetype, maybeAssign, vardefCont); + } + function pattern(type, value) { + if (type == "variable") { register(value); return cont(); } + if (type == "[") return contCommasep(pattern, "]"); + if (type == "{") return contCommasep(proppattern, "}"); + } + function proppattern(type, value) { + if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { + register(value); + return cont(maybeAssign); + } + if (type == "variable") cx.marked = "property"; + return cont(expect(":"), pattern, maybeAssign); + } + function maybeAssign(_type, value) { + if (value == "=") return cont(expressionNoComma); + } + function vardefCont(type) { + if (type == ",") return cont(vardef); + } + function maybeelse(type, value) { + if (type == "keyword b" && value == "else") return cont(pushlex("form"), statement, poplex); + } + function forspec(type) { + if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); + } + function forspec1(type) { + if (type == "var") return cont(vardef, expect(";"), forspec2); + if (type == ";") return cont(forspec2); + if (type == "variable") return cont(formaybeinof); + return pass(expression, expect(";"), forspec2); + } + function formaybeinof(_type, value) { + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } + return cont(maybeoperatorComma, forspec2); + } + function forspec2(type, value) { + if (type == ";") return cont(forspec3); + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } + return pass(expression, expect(";"), forspec3); + } + function forspec3(type) { + if (type != ")") cont(expression); + } + function functiondef(type, value) { + if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} + if (type == "variable") {register(value); return cont(functiondef);} + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, statement, popcontext); + } + function funarg(type) { + if (type == "spread") return cont(funarg); + return pass(pattern, maybetype); + } + function className(type, value) { + if (type == "variable") {register(value); return cont(classNameAfter);} + } + function classNameAfter(_type, value) { + if (value == "extends") return cont(expression); + } + function objlit(type) { + if (type == "{") return contCommasep(objprop, "}"); + } + function afterModule(type, value) { + if (type == "string") return cont(statement); + if (type == "variable") { register(value); return cont(maybeFrom); } + } + function afterExport(_type, value) { + if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } + if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } + return pass(statement); + } + function afterImport(type) { + if (type == "string") return cont(); + return pass(importSpec, maybeFrom); + } + function importSpec(type, value) { + if (type == "{") return contCommasep(importSpec, "}"); + if (type == "variable") register(value); + return cont(); + } + function maybeFrom(_type, value) { + if (value == "from") { cx.marked = "keyword"; return cont(expression); } + } + function arrayLiteral(type) { + if (type == "]") return cont(); + return pass(expressionNoComma, maybeArrayComprehension); + } + function maybeArrayComprehension(type) { + if (type == "for") return pass(comprehension, expect("]")); + if (type == ",") return cont(commasep(expressionNoComma, "]")); + return pass(commasep(expressionNoComma, "]")); + } + function comprehension(type) { + if (type == "for") return cont(forspec, comprehension); + if (type == "if") return cont(expression, comprehension); + } + + // Interface + + return { + startState: function(basecolumn) { + var state = { + tokenize: tokenBase, + lastType: "sof", + cc: [], + lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + context: parserConfig.localVars && {vars: parserConfig.localVars}, + indented: 0 + }; + if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") + state.globalVars = parserConfig.globalVars; + return state; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + findFatArrow(stream, state); + } + if (state.tokenize != tokenComment && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; + return parseJS(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize == tokenComment) return CodeMirror.Pass; + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; + // Kludge to prevent 'maybelse' from blocking lexical scope pops + for (var i = state.cc.length - 1; i >= 0; --i) { + var c = state.cc[i]; + if (c == poplex) lexical = lexical.prev; + else if (c != maybeelse) break; + } + if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; + if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") + lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + + if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0); + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "form") return lexical.indented + indentUnit; + else if (type == "stat") + return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? statementIndent || indentUnit : 0); + else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricChars: ":{}", + blockCommentStart: jsonMode ? null : "/*", + blockCommentEnd: jsonMode ? null : "*/", + lineComment: jsonMode ? null : "//", + fold: "brace", + + helperType: jsonMode ? "json" : "javascript", + jsonldMode: jsonldMode, + jsonMode: jsonMode + }; +}); + +CodeMirror.defineMIME("text/javascript", "javascript"); +CodeMirror.defineMIME("text/ecmascript", "javascript"); +CodeMirror.defineMIME("application/javascript", "javascript"); +CodeMirror.defineMIME("application/ecmascript", "javascript"); +CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); +CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); +CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/markdown/markdown.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/markdown/markdown.js new file mode 100644 index 0000000..33e536d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/markdown/markdown.js @@ -0,0 +1,760 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror", require("../xml/xml"))); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../xml/xml"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) { + + var htmlFound = CodeMirror.modes.hasOwnProperty("xml"); + var htmlMode = CodeMirror.getMode(cmCfg, htmlFound ? {name: "xml", htmlMode: true} : "text/plain"); + var aliases = { + html: "htmlmixed", + js: "javascript", + json: "application/json", + c: "text/x-csrc", + "c++": "text/x-c++src", + java: "text/x-java", + csharp: "text/x-csharp", + "c#": "text/x-csharp", + scala: "text/x-scala" + }; + + var getMode = (function () { + var i, modes = {}, mimes = {}, mime; + + var list = []; + for (var m in CodeMirror.modes) + if (CodeMirror.modes.propertyIsEnumerable(m)) list.push(m); + for (i = 0; i < list.length; i++) { + modes[list[i]] = list[i]; + } + var mimesList = []; + for (var m in CodeMirror.mimeModes) + if (CodeMirror.mimeModes.propertyIsEnumerable(m)) + mimesList.push({mime: m, mode: CodeMirror.mimeModes[m]}); + for (i = 0; i < mimesList.length; i++) { + mime = mimesList[i].mime; + mimes[mime] = mimesList[i].mime; + } + + for (var a in aliases) { + if (aliases[a] in modes || aliases[a] in mimes) + modes[a] = aliases[a]; + } + + return function (lang) { + return modes[lang] ? CodeMirror.getMode(cmCfg, modes[lang]) : null; + }; + }()); + + // Should characters that affect highlighting be highlighted separate? + // Does not include characters that will be output (such as `1.` and `-` for lists) + if (modeCfg.highlightFormatting === undefined) + modeCfg.highlightFormatting = false; + + // Maximum number of nested blockquotes. Set to 0 for infinite nesting. + // Excess `>` will emit `error` token. + if (modeCfg.maxBlockquoteDepth === undefined) + modeCfg.maxBlockquoteDepth = 0; + + // Should underscores in words open/close em/strong? + if (modeCfg.underscoresBreakWords === undefined) + modeCfg.underscoresBreakWords = true; + + // Turn on fenced code blocks? ("```" to start/end) + if (modeCfg.fencedCodeBlocks === undefined) modeCfg.fencedCodeBlocks = false; + + // Turn on task lists? ("- [ ] " and "- [x] ") + if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; + + var codeDepth = 0; + + var header = 'header' + , code = 'comment' + , quote = 'quote' + , list1 = 'variable-2' + , list2 = 'variable-3' + , list3 = 'keyword' + , hr = 'hr' + , image = 'tag' + , formatting = 'formatting' + , linkinline = 'link' + , linkemail = 'link' + , linktext = 'link' + , linkhref = 'string' + , em = 'em' + , strong = 'strong'; + + var hrRE = /^([*\-=_])(?:\s*\1){2,}\s*$/ + , ulRE = /^[*\-+]\s+/ + , olRE = /^[0-9]+\.\s+/ + , taskListRE = /^\[(x| )\](?=\s)/ // Must follow ulRE or olRE + , atxHeaderRE = /^#+/ + , setextHeaderRE = /^(?:\={1,}|-{1,})$/ + , textRE = /^[^#!\[\]*_\\<>` "'(]+/; + + function switchInline(stream, state, f) { + state.f = state.inline = f; + return f(stream, state); + } + + function switchBlock(stream, state, f) { + state.f = state.block = f; + return f(stream, state); + } + + + // Blocks + + function blankLine(state) { + // Reset linkTitle state + state.linkTitle = false; + // Reset EM state + state.em = false; + // Reset STRONG state + state.strong = false; + // Reset state.quote + state.quote = 0; + if (!htmlFound && state.f == htmlBlock) { + state.f = inlineNormal; + state.block = blockNormal; + } + // Reset state.trailingSpace + state.trailingSpace = 0; + state.trailingSpaceNewLine = false; + // Mark this line as blank + state.thisLineHasContent = false; + return null; + } + + function blockNormal(stream, state) { + + var sol = stream.sol(); + + var prevLineIsList = (state.list !== false); + if (state.list !== false && state.indentationDiff >= 0) { // Continued list + if (state.indentationDiff < 4) { // Only adjust indentation if *not* a code block + state.indentation -= state.indentationDiff; + } + state.list = null; + } else if (state.list !== false && state.indentation > 0) { + state.list = null; + state.listDepth = Math.floor(state.indentation / 4); + } else if (state.list !== false) { // No longer a list + state.list = false; + state.listDepth = 0; + } + + var match = null; + if (state.indentationDiff >= 4) { + state.indentation -= 4; + stream.skipToEnd(); + return code; + } else if (stream.eatSpace()) { + return null; + } else if (match = stream.match(atxHeaderRE)) { + state.header = match[0].length <= 6 ? match[0].length : 6; + if (modeCfg.highlightFormatting) state.formatting = "header"; + state.f = state.inline; + return getType(state); + } else if (state.prevLineHasContent && (match = stream.match(setextHeaderRE))) { + state.header = match[0].charAt(0) == '=' ? 1 : 2; + if (modeCfg.highlightFormatting) state.formatting = "header"; + state.f = state.inline; + return getType(state); + } else if (stream.eat('>')) { + state.indentation++; + state.quote = sol ? 1 : state.quote + 1; + if (modeCfg.highlightFormatting) state.formatting = "quote"; + stream.eatSpace(); + return getType(state); + } else if (stream.peek() === '[') { + return switchInline(stream, state, footnoteLink); + } else if (stream.match(hrRE, true)) { + return hr; + } else if ((!state.prevLineHasContent || prevLineIsList) && (stream.match(ulRE, false) || stream.match(olRE, false))) { + var listType = null; + if (stream.match(ulRE, true)) { + listType = 'ul'; + } else { + stream.match(olRE, true); + listType = 'ol'; + } + state.indentation += 4; + state.list = true; + state.listDepth++; + if (modeCfg.taskLists && stream.match(taskListRE, false)) { + state.taskList = true; + } + state.f = state.inline; + if (modeCfg.highlightFormatting) state.formatting = ["list", "list-" + listType]; + return getType(state); + } else if (modeCfg.fencedCodeBlocks && stream.match(/^```([\w+#]*)/, true)) { + // try switching mode + state.localMode = getMode(RegExp.$1); + if (state.localMode) state.localState = state.localMode.startState(); + switchBlock(stream, state, local); + if (modeCfg.highlightFormatting) state.formatting = "code-block"; + state.code = true; + return getType(state); + } + + return switchInline(stream, state, state.inline); + } + + function htmlBlock(stream, state) { + var style = htmlMode.token(stream, state.htmlState); + if ((htmlFound && !state.htmlState.tagName && !state.htmlState.context) || + (state.md_inside && stream.current().indexOf(">") > -1)) { + state.f = inlineNormal; + state.block = blockNormal; + state.htmlState = null; + } + return style; + } + + function local(stream, state) { + if (stream.sol() && stream.match(/^```/, true)) { + state.localMode = state.localState = null; + state.f = inlineNormal; + state.block = blockNormal; + if (modeCfg.highlightFormatting) state.formatting = "code-block"; + state.code = true; + var returnType = getType(state); + state.code = false; + return returnType; + } else if (state.localMode) { + return state.localMode.token(stream, state.localState); + } else { + stream.skipToEnd(); + return code; + } + } + + // Inline + function getType(state) { + var styles = []; + + if (state.formatting) { + styles.push(formatting); + + if (typeof state.formatting === "string") state.formatting = [state.formatting]; + + for (var i = 0; i < state.formatting.length; i++) { + styles.push(formatting + "-" + state.formatting[i]); + + if (state.formatting[i] === "header") { + styles.push(formatting + "-" + state.formatting[i] + "-" + state.header); + } + + // Add `formatting-quote` and `formatting-quote-#` for blockquotes + // Add `error` instead if the maximum blockquote nesting depth is passed + if (state.formatting[i] === "quote") { + if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { + styles.push(formatting + "-" + state.formatting[i] + "-" + state.quote); + } else { + styles.push("error"); + } + } + } + } + + if (state.taskOpen) { + styles.push("meta"); + return styles.length ? styles.join(' ') : null; + } + if (state.taskClosed) { + styles.push("property"); + return styles.length ? styles.join(' ') : null; + } + + if (state.linkHref) { + styles.push(linkhref); + return styles.length ? styles.join(' ') : null; + } + + if (state.strong) { styles.push(strong); } + if (state.em) { styles.push(em); } + + if (state.linkText) { styles.push(linktext); } + + if (state.code) { styles.push(code); } + + if (state.header) { styles.push(header); styles.push(header + "-" + state.header); } + + if (state.quote) { + styles.push(quote); + + // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth + if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { + styles.push(quote + "-" + state.quote); + } else { + styles.push(quote + "-" + modeCfg.maxBlockquoteDepth); + } + } + + if (state.list !== false) { + var listMod = (state.listDepth - 1) % 3; + if (!listMod) { + styles.push(list1); + } else if (listMod === 1) { + styles.push(list2); + } else { + styles.push(list3); + } + } + + if (state.trailingSpaceNewLine) { + styles.push("trailing-space-new-line"); + } else if (state.trailingSpace) { + styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b")); + } + + return styles.length ? styles.join(' ') : null; + } + + function handleText(stream, state) { + if (stream.match(textRE, true)) { + return getType(state); + } + return undefined; + } + + function inlineNormal(stream, state) { + var style = state.text(stream, state); + if (typeof style !== 'undefined') + return style; + + if (state.list) { // List marker (*, +, -, 1., etc) + state.list = null; + return getType(state); + } + + if (state.taskList) { + var taskOpen = stream.match(taskListRE, true)[1] !== "x"; + if (taskOpen) state.taskOpen = true; + else state.taskClosed = true; + if (modeCfg.highlightFormatting) state.formatting = "task"; + state.taskList = false; + return getType(state); + } + + state.taskOpen = false; + state.taskClosed = false; + + if (state.header && stream.match(/^#+$/, true)) { + if (modeCfg.highlightFormatting) state.formatting = "header"; + return getType(state); + } + + // Get sol() value now, before character is consumed + var sol = stream.sol(); + + var ch = stream.next(); + + if (state.escape) { + state.escape = false; + return getType(state); + } + + if (ch === '\\') { + if (modeCfg.highlightFormatting) state.formatting = "escape"; + state.escape = true; + return getType(state); + } + + // Matches link titles present on next line + if (state.linkTitle) { + state.linkTitle = false; + var matchCh = ch; + if (ch === '(') { + matchCh = ')'; + } + matchCh = (matchCh+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); + var regex = '^\\s*(?:[^' + matchCh + '\\\\]+|\\\\\\\\|\\\\.)' + matchCh; + if (stream.match(new RegExp(regex), true)) { + return linkhref; + } + } + + // If this block is changed, it may need to be updated in GFM mode + if (ch === '`') { + var previousFormatting = state.formatting; + if (modeCfg.highlightFormatting) state.formatting = "code"; + var t = getType(state); + var before = stream.pos; + stream.eatWhile('`'); + var difference = 1 + stream.pos - before; + if (!state.code) { + codeDepth = difference; + state.code = true; + return getType(state); + } else { + if (difference === codeDepth) { // Must be exact + state.code = false; + return t; + } + state.formatting = previousFormatting; + return getType(state); + } + } else if (state.code) { + return getType(state); + } + + if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) { + stream.match(/\[[^\]]*\]/); + state.inline = state.f = linkHref; + return image; + } + + if (ch === '[' && stream.match(/.*\](\(| ?\[)/, false)) { + state.linkText = true; + if (modeCfg.highlightFormatting) state.formatting = "link"; + return getType(state); + } + + if (ch === ']' && state.linkText) { + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + state.linkText = false; + state.inline = state.f = linkHref; + return type; + } + + if (ch === '<' && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) { + state.f = state.inline = linkInline; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + if (type){ + type += " "; + } else { + type = ""; + } + return type + linkinline; + } + + if (ch === '<' && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) { + state.f = state.inline = linkInline; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + if (type){ + type += " "; + } else { + type = ""; + } + return type + linkemail; + } + + if (ch === '<' && stream.match(/^\w/, false)) { + if (stream.string.indexOf(">") != -1) { + var atts = stream.string.substring(1,stream.string.indexOf(">")); + if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) { + state.md_inside = true; + } + } + stream.backUp(1); + state.htmlState = CodeMirror.startState(htmlMode); + return switchBlock(stream, state, htmlBlock); + } + + if (ch === '<' && stream.match(/^\/\w*?>/)) { + state.md_inside = false; + return "tag"; + } + + var ignoreUnderscore = false; + if (!modeCfg.underscoresBreakWords) { + if (ch === '_' && stream.peek() !== '_' && stream.match(/(\w)/, false)) { + var prevPos = stream.pos - 2; + if (prevPos >= 0) { + var prevCh = stream.string.charAt(prevPos); + if (prevCh !== '_' && prevCh.match(/(\w)/, false)) { + ignoreUnderscore = true; + } + } + } + } + if (ch === '*' || (ch === '_' && !ignoreUnderscore)) { + if (sol && stream.peek() === ' ') { + // Do nothing, surrounded by newline and space + } else if (state.strong === ch && stream.eat(ch)) { // Remove STRONG + if (modeCfg.highlightFormatting) state.formatting = "strong"; + var t = getType(state); + state.strong = false; + return t; + } else if (!state.strong && stream.eat(ch)) { // Add STRONG + state.strong = ch; + if (modeCfg.highlightFormatting) state.formatting = "strong"; + return getType(state); + } else if (state.em === ch) { // Remove EM + if (modeCfg.highlightFormatting) state.formatting = "em"; + var t = getType(state); + state.em = false; + return t; + } else if (!state.em) { // Add EM + state.em = ch; + if (modeCfg.highlightFormatting) state.formatting = "em"; + return getType(state); + } + } else if (ch === ' ') { + if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces + if (stream.peek() === ' ') { // Surrounded by spaces, ignore + return getType(state); + } else { // Not surrounded by spaces, back up pointer + stream.backUp(1); + } + } + } + + if (ch === ' ') { + if (stream.match(/ +$/, false)) { + state.trailingSpace++; + } else if (state.trailingSpace) { + state.trailingSpaceNewLine = true; + } + } + + return getType(state); + } + + function linkInline(stream, state) { + var ch = stream.next(); + + if (ch === ">") { + state.f = state.inline = inlineNormal; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var type = getType(state); + if (type){ + type += " "; + } else { + type = ""; + } + return type + linkinline; + } + + stream.match(/^[^>]+/, true); + + return linkinline; + } + + function linkHref(stream, state) { + // Check if space, and return NULL if so (to avoid marking the space) + if(stream.eatSpace()){ + return null; + } + var ch = stream.next(); + if (ch === '(' || ch === '[') { + state.f = state.inline = getLinkHrefInside(ch === "(" ? ")" : "]"); + if (modeCfg.highlightFormatting) state.formatting = "link-string"; + state.linkHref = true; + return getType(state); + } + return 'error'; + } + + function getLinkHrefInside(endChar) { + return function(stream, state) { + var ch = stream.next(); + + if (ch === endChar) { + state.f = state.inline = inlineNormal; + if (modeCfg.highlightFormatting) state.formatting = "link-string"; + var returnState = getType(state); + state.linkHref = false; + return returnState; + } + + if (stream.match(inlineRE(endChar), true)) { + stream.backUp(1); + } + + state.linkHref = true; + return getType(state); + }; + } + + function footnoteLink(stream, state) { + if (stream.match(/^[^\]]*\]:/, false)) { + state.f = footnoteLinkInside; + stream.next(); // Consume [ + if (modeCfg.highlightFormatting) state.formatting = "link"; + state.linkText = true; + return getType(state); + } + return switchInline(stream, state, inlineNormal); + } + + function footnoteLinkInside(stream, state) { + if (stream.match(/^\]:/, true)) { + state.f = state.inline = footnoteUrl; + if (modeCfg.highlightFormatting) state.formatting = "link"; + var returnType = getType(state); + state.linkText = false; + return returnType; + } + + stream.match(/^[^\]]+/, true); + + return linktext; + } + + function footnoteUrl(stream, state) { + // Check if space, and return NULL if so (to avoid marking the space) + if(stream.eatSpace()){ + return null; + } + // Match URL + stream.match(/^[^\s]+/, true); + // Check for link title + if (stream.peek() === undefined) { // End of line, set flag to check next line + state.linkTitle = true; + } else { // More content on line, check if link title + stream.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/, true); + } + state.f = state.inline = inlineNormal; + return linkhref; + } + + var savedInlineRE = []; + function inlineRE(endChar) { + if (!savedInlineRE[endChar]) { + // Escape endChar for RegExp (taken from http://stackoverflow.com/a/494122/526741) + endChar = (endChar+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); + // Match any non-endChar, escaped character, as well as the closing + // endChar. + savedInlineRE[endChar] = new RegExp('^(?:[^\\\\]|\\\\.)*?(' + endChar + ')'); + } + return savedInlineRE[endChar]; + } + + var mode = { + startState: function() { + return { + f: blockNormal, + + prevLineHasContent: false, + thisLineHasContent: false, + + block: blockNormal, + htmlState: null, + indentation: 0, + + inline: inlineNormal, + text: handleText, + + escape: false, + formatting: false, + linkText: false, + linkHref: false, + linkTitle: false, + em: false, + strong: false, + header: 0, + taskList: false, + list: false, + listDepth: 0, + quote: 0, + trailingSpace: 0, + trailingSpaceNewLine: false + }; + }, + + copyState: function(s) { + return { + f: s.f, + + prevLineHasContent: s.prevLineHasContent, + thisLineHasContent: s.thisLineHasContent, + + block: s.block, + htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState), + indentation: s.indentation, + + localMode: s.localMode, + localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null, + + inline: s.inline, + text: s.text, + escape: false, + formatting: false, + linkTitle: s.linkTitle, + em: s.em, + strong: s.strong, + header: s.header, + taskList: s.taskList, + list: s.list, + listDepth: s.listDepth, + quote: s.quote, + trailingSpace: s.trailingSpace, + trailingSpaceNewLine: s.trailingSpaceNewLine, + md_inside: s.md_inside + }; + }, + + token: function(stream, state) { + + // Reset state.formatting + state.formatting = false; + + if (stream.sol()) { + var forceBlankLine = stream.match(/^\s*$/, true) || state.header; + + // Reset state.header + state.header = 0; + + if (forceBlankLine) { + state.prevLineHasContent = false; + return blankLine(state); + } else { + state.prevLineHasContent = state.thisLineHasContent; + state.thisLineHasContent = true; + } + + // Reset state.escape + state.escape = false; + + // Reset state.taskList + state.taskList = false; + + // Reset state.code + state.code = false; + + // Reset state.trailingSpace + state.trailingSpace = 0; + state.trailingSpaceNewLine = false; + + state.f = state.block; + var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, ' ').length; + var difference = Math.floor((indentation - state.indentation) / 4) * 4; + if (difference > 4) difference = 4; + var adjustedIndentation = state.indentation + difference; + state.indentationDiff = adjustedIndentation - state.indentation; + state.indentation = adjustedIndentation; + if (indentation > 0) return null; + } + return state.f(stream, state); + }, + + innerMode: function(state) { + if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode}; + if (state.localState) return {state: state.localState, mode: state.localMode}; + return {state: state, mode: mode}; + }, + + blankLine: blankLine, + + getType: getType, + + fold: "markdown" + }; + return mode; +}, "xml"); + +CodeMirror.defineMIME("text/x-markdown", "markdown"); + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/perl/perl.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/perl/perl.js new file mode 100644 index 0000000..ec54804 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/perl/perl.js @@ -0,0 +1,827 @@ +// CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08) +// This is a part of CodeMirror from https://github.com/sabaca/CodeMirror_mode_perl (mail@sabaca.com) + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("perl",function(){ + // http://perldoc.perl.org + var PERL={ // null - magic touch + // 1 - keyword + // 2 - def + // 3 - atom + // 4 - operator + // 5 - variable-2 (predefined) + // [x,y] - x=1,2,3; y=must be defined if x{...} + // PERL operators + '->' : 4, + '++' : 4, + '--' : 4, + '**' : 4, + // ! ~ \ and unary + and - + '=~' : 4, + '!~' : 4, + '*' : 4, + '/' : 4, + '%' : 4, + 'x' : 4, + '+' : 4, + '-' : 4, + '.' : 4, + '<<' : 4, + '>>' : 4, + // named unary operators + '<' : 4, + '>' : 4, + '<=' : 4, + '>=' : 4, + 'lt' : 4, + 'gt' : 4, + 'le' : 4, + 'ge' : 4, + '==' : 4, + '!=' : 4, + '<=>' : 4, + 'eq' : 4, + 'ne' : 4, + 'cmp' : 4, + '~~' : 4, + '&' : 4, + '|' : 4, + '^' : 4, + '&&' : 4, + '||' : 4, + '//' : 4, + '..' : 4, + '...' : 4, + '?' : 4, + ':' : 4, + '=' : 4, + '+=' : 4, + '-=' : 4, + '*=' : 4, // etc. ??? + ',' : 4, + '=>' : 4, + '::' : 4, + // list operators (rightward) + 'not' : 4, + 'and' : 4, + 'or' : 4, + 'xor' : 4, + // PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;) + 'BEGIN' : [5,1], + 'END' : [5,1], + 'PRINT' : [5,1], + 'PRINTF' : [5,1], + 'GETC' : [5,1], + 'READ' : [5,1], + 'READLINE' : [5,1], + 'DESTROY' : [5,1], + 'TIE' : [5,1], + 'TIEHANDLE' : [5,1], + 'UNTIE' : [5,1], + 'STDIN' : 5, + 'STDIN_TOP' : 5, + 'STDOUT' : 5, + 'STDOUT_TOP' : 5, + 'STDERR' : 5, + 'STDERR_TOP' : 5, + '$ARG' : 5, + '$_' : 5, + '@ARG' : 5, + '@_' : 5, + '$LIST_SEPARATOR' : 5, + '$"' : 5, + '$PROCESS_ID' : 5, + '$PID' : 5, + '$$' : 5, + '$REAL_GROUP_ID' : 5, + '$GID' : 5, + '$(' : 5, + '$EFFECTIVE_GROUP_ID' : 5, + '$EGID' : 5, + '$)' : 5, + '$PROGRAM_NAME' : 5, + '$0' : 5, + '$SUBSCRIPT_SEPARATOR' : 5, + '$SUBSEP' : 5, + '$;' : 5, + '$REAL_USER_ID' : 5, + '$UID' : 5, + '$<' : 5, + '$EFFECTIVE_USER_ID' : 5, + '$EUID' : 5, + '$>' : 5, + '$a' : 5, + '$b' : 5, + '$COMPILING' : 5, + '$^C' : 5, + '$DEBUGGING' : 5, + '$^D' : 5, + '${^ENCODING}' : 5, + '$ENV' : 5, + '%ENV' : 5, + '$SYSTEM_FD_MAX' : 5, + '$^F' : 5, + '@F' : 5, + '${^GLOBAL_PHASE}' : 5, + '$^H' : 5, + '%^H' : 5, + '@INC' : 5, + '%INC' : 5, + '$INPLACE_EDIT' : 5, + '$^I' : 5, + '$^M' : 5, + '$OSNAME' : 5, + '$^O' : 5, + '${^OPEN}' : 5, + '$PERLDB' : 5, + '$^P' : 5, + '$SIG' : 5, + '%SIG' : 5, + '$BASETIME' : 5, + '$^T' : 5, + '${^TAINT}' : 5, + '${^UNICODE}' : 5, + '${^UTF8CACHE}' : 5, + '${^UTF8LOCALE}' : 5, + '$PERL_VERSION' : 5, + '$^V' : 5, + '${^WIN32_SLOPPY_STAT}' : 5, + '$EXECUTABLE_NAME' : 5, + '$^X' : 5, + '$1' : 5, // - regexp $1, $2... + '$MATCH' : 5, + '$&' : 5, + '${^MATCH}' : 5, + '$PREMATCH' : 5, + '$`' : 5, + '${^PREMATCH}' : 5, + '$POSTMATCH' : 5, + "$'" : 5, + '${^POSTMATCH}' : 5, + '$LAST_PAREN_MATCH' : 5, + '$+' : 5, + '$LAST_SUBMATCH_RESULT' : 5, + '$^N' : 5, + '@LAST_MATCH_END' : 5, + '@+' : 5, + '%LAST_PAREN_MATCH' : 5, + '%+' : 5, + '@LAST_MATCH_START' : 5, + '@-' : 5, + '%LAST_MATCH_START' : 5, + '%-' : 5, + '$LAST_REGEXP_CODE_RESULT' : 5, + '$^R' : 5, + '${^RE_DEBUG_FLAGS}' : 5, + '${^RE_TRIE_MAXBUF}' : 5, + '$ARGV' : 5, + '@ARGV' : 5, + 'ARGV' : 5, + 'ARGVOUT' : 5, + '$OUTPUT_FIELD_SEPARATOR' : 5, + '$OFS' : 5, + '$,' : 5, + '$INPUT_LINE_NUMBER' : 5, + '$NR' : 5, + '$.' : 5, + '$INPUT_RECORD_SEPARATOR' : 5, + '$RS' : 5, + '$/' : 5, + '$OUTPUT_RECORD_SEPARATOR' : 5, + '$ORS' : 5, + '$\\' : 5, + '$OUTPUT_AUTOFLUSH' : 5, + '$|' : 5, + '$ACCUMULATOR' : 5, + '$^A' : 5, + '$FORMAT_FORMFEED' : 5, + '$^L' : 5, + '$FORMAT_PAGE_NUMBER' : 5, + '$%' : 5, + '$FORMAT_LINES_LEFT' : 5, + '$-' : 5, + '$FORMAT_LINE_BREAK_CHARACTERS' : 5, + '$:' : 5, + '$FORMAT_LINES_PER_PAGE' : 5, + '$=' : 5, + '$FORMAT_TOP_NAME' : 5, + '$^' : 5, + '$FORMAT_NAME' : 5, + '$~' : 5, + '${^CHILD_ERROR_NATIVE}' : 5, + '$EXTENDED_OS_ERROR' : 5, + '$^E' : 5, + '$EXCEPTIONS_BEING_CAUGHT' : 5, + '$^S' : 5, + '$WARNING' : 5, + '$^W' : 5, + '${^WARNING_BITS}' : 5, + '$OS_ERROR' : 5, + '$ERRNO' : 5, + '$!' : 5, + '%OS_ERROR' : 5, + '%ERRNO' : 5, + '%!' : 5, + '$CHILD_ERROR' : 5, + '$?' : 5, + '$EVAL_ERROR' : 5, + '$@' : 5, + '$OFMT' : 5, + '$#' : 5, + '$*' : 5, + '$ARRAY_BASE' : 5, + '$[' : 5, + '$OLD_PERL_VERSION' : 5, + '$]' : 5, + // PERL blocks + 'if' :[1,1], + elsif :[1,1], + 'else' :[1,1], + 'while' :[1,1], + unless :[1,1], + 'for' :[1,1], + foreach :[1,1], + // PERL functions + 'abs' :1, // - absolute value function + accept :1, // - accept an incoming socket connect + alarm :1, // - schedule a SIGALRM + 'atan2' :1, // - arctangent of Y/X in the range -PI to PI + bind :1, // - binds an address to a socket + binmode :1, // - prepare binary files for I/O + bless :1, // - create an object + bootstrap :1, // + 'break' :1, // - break out of a "given" block + caller :1, // - get context of the current subroutine call + chdir :1, // - change your current working directory + chmod :1, // - changes the permissions on a list of files + chomp :1, // - remove a trailing record separator from a string + chop :1, // - remove the last character from a string + chown :1, // - change the owership on a list of files + chr :1, // - get character this number represents + chroot :1, // - make directory new root for path lookups + close :1, // - close file (or pipe or socket) handle + closedir :1, // - close directory handle + connect :1, // - connect to a remote socket + 'continue' :[1,1], // - optional trailing block in a while or foreach + 'cos' :1, // - cosine function + crypt :1, // - one-way passwd-style encryption + dbmclose :1, // - breaks binding on a tied dbm file + dbmopen :1, // - create binding on a tied dbm file + 'default' :1, // + defined :1, // - test whether a value, variable, or function is defined + 'delete' :1, // - deletes a value from a hash + die :1, // - raise an exception or bail out + 'do' :1, // - turn a BLOCK into a TERM + dump :1, // - create an immediate core dump + each :1, // - retrieve the next key/value pair from a hash + endgrent :1, // - be done using group file + endhostent :1, // - be done using hosts file + endnetent :1, // - be done using networks file + endprotoent :1, // - be done using protocols file + endpwent :1, // - be done using passwd file + endservent :1, // - be done using services file + eof :1, // - test a filehandle for its end + 'eval' :1, // - catch exceptions or compile and run code + 'exec' :1, // - abandon this program to run another + exists :1, // - test whether a hash key is present + exit :1, // - terminate this program + 'exp' :1, // - raise I to a power + fcntl :1, // - file control system call + fileno :1, // - return file descriptor from filehandle + flock :1, // - lock an entire file with an advisory lock + fork :1, // - create a new process just like this one + format :1, // - declare a picture format with use by the write() function + formline :1, // - internal function used for formats + getc :1, // - get the next character from the filehandle + getgrent :1, // - get next group record + getgrgid :1, // - get group record given group user ID + getgrnam :1, // - get group record given group name + gethostbyaddr :1, // - get host record given its address + gethostbyname :1, // - get host record given name + gethostent :1, // - get next hosts record + getlogin :1, // - return who logged in at this tty + getnetbyaddr :1, // - get network record given its address + getnetbyname :1, // - get networks record given name + getnetent :1, // - get next networks record + getpeername :1, // - find the other end of a socket connection + getpgrp :1, // - get process group + getppid :1, // - get parent process ID + getpriority :1, // - get current nice value + getprotobyname :1, // - get protocol record given name + getprotobynumber :1, // - get protocol record numeric protocol + getprotoent :1, // - get next protocols record + getpwent :1, // - get next passwd record + getpwnam :1, // - get passwd record given user login name + getpwuid :1, // - get passwd record given user ID + getservbyname :1, // - get services record given its name + getservbyport :1, // - get services record given numeric port + getservent :1, // - get next services record + getsockname :1, // - retrieve the sockaddr for a given socket + getsockopt :1, // - get socket options on a given socket + given :1, // + glob :1, // - expand filenames using wildcards + gmtime :1, // - convert UNIX time into record or string using Greenwich time + 'goto' :1, // - create spaghetti code + grep :1, // - locate elements in a list test true against a given criterion + hex :1, // - convert a string to a hexadecimal number + 'import' :1, // - patch a module's namespace into your own + index :1, // - find a substring within a string + 'int' :1, // - get the integer portion of a number + ioctl :1, // - system-dependent device control system call + 'join' :1, // - join a list into a string using a separator + keys :1, // - retrieve list of indices from a hash + kill :1, // - send a signal to a process or process group + last :1, // - exit a block prematurely + lc :1, // - return lower-case version of a string + lcfirst :1, // - return a string with just the next letter in lower case + length :1, // - return the number of bytes in a string + 'link' :1, // - create a hard link in the filesytem + listen :1, // - register your socket as a server + local : 2, // - create a temporary value for a global variable (dynamic scoping) + localtime :1, // - convert UNIX time into record or string using local time + lock :1, // - get a thread lock on a variable, subroutine, or method + 'log' :1, // - retrieve the natural logarithm for a number + lstat :1, // - stat a symbolic link + m :null, // - match a string with a regular expression pattern + map :1, // - apply a change to a list to get back a new list with the changes + mkdir :1, // - create a directory + msgctl :1, // - SysV IPC message control operations + msgget :1, // - get SysV IPC message queue + msgrcv :1, // - receive a SysV IPC message from a message queue + msgsnd :1, // - send a SysV IPC message to a message queue + my : 2, // - declare and assign a local variable (lexical scoping) + 'new' :1, // + next :1, // - iterate a block prematurely + no :1, // - unimport some module symbols or semantics at compile time + oct :1, // - convert a string to an octal number + open :1, // - open a file, pipe, or descriptor + opendir :1, // - open a directory + ord :1, // - find a character's numeric representation + our : 2, // - declare and assign a package variable (lexical scoping) + pack :1, // - convert a list into a binary representation + 'package' :1, // - declare a separate global namespace + pipe :1, // - open a pair of connected filehandles + pop :1, // - remove the last element from an array and return it + pos :1, // - find or set the offset for the last/next m//g search + print :1, // - output a list to a filehandle + printf :1, // - output a formatted list to a filehandle + prototype :1, // - get the prototype (if any) of a subroutine + push :1, // - append one or more elements to an array + q :null, // - singly quote a string + qq :null, // - doubly quote a string + qr :null, // - Compile pattern + quotemeta :null, // - quote regular expression magic characters + qw :null, // - quote a list of words + qx :null, // - backquote quote a string + rand :1, // - retrieve the next pseudorandom number + read :1, // - fixed-length buffered input from a filehandle + readdir :1, // - get a directory from a directory handle + readline :1, // - fetch a record from a file + readlink :1, // - determine where a symbolic link is pointing + readpipe :1, // - execute a system command and collect standard output + recv :1, // - receive a message over a Socket + redo :1, // - start this loop iteration over again + ref :1, // - find out the type of thing being referenced + rename :1, // - change a filename + require :1, // - load in external functions from a library at runtime + reset :1, // - clear all variables of a given name + 'return' :1, // - get out of a function early + reverse :1, // - flip a string or a list + rewinddir :1, // - reset directory handle + rindex :1, // - right-to-left substring search + rmdir :1, // - remove a directory + s :null, // - replace a pattern with a string + say :1, // - print with newline + scalar :1, // - force a scalar context + seek :1, // - reposition file pointer for random-access I/O + seekdir :1, // - reposition directory pointer + select :1, // - reset default output or do I/O multiplexing + semctl :1, // - SysV semaphore control operations + semget :1, // - get set of SysV semaphores + semop :1, // - SysV semaphore operations + send :1, // - send a message over a socket + setgrent :1, // - prepare group file for use + sethostent :1, // - prepare hosts file for use + setnetent :1, // - prepare networks file for use + setpgrp :1, // - set the process group of a process + setpriority :1, // - set a process's nice value + setprotoent :1, // - prepare protocols file for use + setpwent :1, // - prepare passwd file for use + setservent :1, // - prepare services file for use + setsockopt :1, // - set some socket options + shift :1, // - remove the first element of an array, and return it + shmctl :1, // - SysV shared memory operations + shmget :1, // - get SysV shared memory segment identifier + shmread :1, // - read SysV shared memory + shmwrite :1, // - write SysV shared memory + shutdown :1, // - close down just half of a socket connection + 'sin' :1, // - return the sine of a number + sleep :1, // - block for some number of seconds + socket :1, // - create a socket + socketpair :1, // - create a pair of sockets + 'sort' :1, // - sort a list of values + splice :1, // - add or remove elements anywhere in an array + 'split' :1, // - split up a string using a regexp delimiter + sprintf :1, // - formatted print into a string + 'sqrt' :1, // - square root function + srand :1, // - seed the random number generator + stat :1, // - get a file's status information + state :1, // - declare and assign a state variable (persistent lexical scoping) + study :1, // - optimize input data for repeated searches + 'sub' :1, // - declare a subroutine, possibly anonymously + 'substr' :1, // - get or alter a portion of a stirng + symlink :1, // - create a symbolic link to a file + syscall :1, // - execute an arbitrary system call + sysopen :1, // - open a file, pipe, or descriptor + sysread :1, // - fixed-length unbuffered input from a filehandle + sysseek :1, // - position I/O pointer on handle used with sysread and syswrite + system :1, // - run a separate program + syswrite :1, // - fixed-length unbuffered output to a filehandle + tell :1, // - get current seekpointer on a filehandle + telldir :1, // - get current seekpointer on a directory handle + tie :1, // - bind a variable to an object class + tied :1, // - get a reference to the object underlying a tied variable + time :1, // - return number of seconds since 1970 + times :1, // - return elapsed time for self and child processes + tr :null, // - transliterate a string + truncate :1, // - shorten a file + uc :1, // - return upper-case version of a string + ucfirst :1, // - return a string with just the next letter in upper case + umask :1, // - set file creation mode mask + undef :1, // - remove a variable or function definition + unlink :1, // - remove one link to a file + unpack :1, // - convert binary structure into normal perl variables + unshift :1, // - prepend more elements to the beginning of a list + untie :1, // - break a tie binding to a variable + use :1, // - load in a module at compile time + utime :1, // - set a file's last access and modify times + values :1, // - return a list of the values in a hash + vec :1, // - test or set particular bits in a string + wait :1, // - wait for any child process to die + waitpid :1, // - wait for a particular child process to die + wantarray :1, // - get void vs scalar vs list context of current subroutine call + warn :1, // - print debugging info + when :1, // + write :1, // - print a picture record + y :null}; // - transliterate a string + + var RXstyle="string-2"; + var RXmodifiers=/[goseximacplud]/; // NOTE: "m", "s", "y" and "tr" need to correct real modifiers for each regexp type + + function tokenChain(stream,state,chain,style,tail){ // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;) + state.chain=null; // 12 3tail + state.style=null; + state.tail=null; + state.tokenize=function(stream,state){ + var e=false,c,i=0; + while(c=stream.next()){ + if(c===chain[i]&&!e){ + if(chain[++i]!==undefined){ + state.chain=chain[i]; + state.style=style; + state.tail=tail;} + else if(tail) + stream.eatWhile(tail); + state.tokenize=tokenPerl; + return style;} + e=!e&&c=="\\";} + return style;}; + return state.tokenize(stream,state);} + + function tokenSOMETHING(stream,state,string){ + state.tokenize=function(stream,state){ + if(stream.string==string) + state.tokenize=tokenPerl; + stream.skipToEnd(); + return "string";}; + return state.tokenize(stream,state);} + + function tokenPerl(stream,state){ + if(stream.eatSpace()) + return null; + if(state.chain) + return tokenChain(stream,state,state.chain,state.style,state.tail); + if(stream.match(/^\-?[\d\.]/,false)) + if(stream.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/)) + return 'number'; + if(stream.match(/^<<(?=\w)/)){ // NOTE: <"],RXstyle,RXmodifiers);} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} + else if(c=="q"){ + c=look(stream, 1); + if(c=="("){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[")"],"string");} + if(c=="["){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["]"],"string");} + if(c=="{"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["}"],"string");} + if(c=="<"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[">"],"string");} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],"string");}} + else if(c=="w"){ + c=look(stream, 1); + if(c=="("){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[")"],"bracket");} + if(c=="["){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["]"],"bracket");} + if(c=="{"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["}"],"bracket");} + if(c=="<"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[">"],"bracket");} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],"bracket");}} + else if(c=="r"){ + c=look(stream, 1); + if(c=="("){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} + if(c=="["){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} + if(c=="{"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} + if(c=="<"){ + eatSuffix(stream, 2); + return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);} + if(/[\^'"!~\/]/.test(c)){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} + else if(/[\^'"!~\/(\[{<]/.test(c)){ + if(c=="("){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[")"],"string");} + if(c=="["){ + eatSuffix(stream, 1); + return tokenChain(stream,state,["]"],"string");} + if(c=="{"){ + eatSuffix(stream, 1); + return tokenChain(stream,state,["}"],"string");} + if(c=="<"){ + eatSuffix(stream, 1); + return tokenChain(stream,state,[">"],"string");} + if(/[\^'"!~\/]/.test(c)){ + return tokenChain(stream,state,[stream.eat(c)],"string");}}}} + if(ch=="m"){ + var c=look(stream, -2); + if(!(c&&/\w/.test(c))){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(/[\^'"!~\/]/.test(c)){ + return tokenChain(stream,state,[c],RXstyle,RXmodifiers);} + if(c=="("){ + return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} + if(c=="["){ + return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} + if(c=="{"){ + return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} + if(c=="<"){ + return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}}}} + if(ch=="s"){ + var c=/[\/>\]})\w]/.test(look(stream, -2)); + if(!c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} + if(ch=="y"){ + var c=/[\/>\]})\w]/.test(look(stream, -2)); + if(!c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} + if(ch=="t"){ + var c=/[\/>\]})\w]/.test(look(stream, -2)); + if(!c){ + c=stream.eat("r");if(c){ + c=stream.eat(/[(\[{<\^'"!~\/]/); + if(c){ + if(c=="[") + return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); + if(c=="{") + return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); + if(c=="<") + return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); + if(c=="(") + return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); + return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}} + if(ch=="`"){ + return tokenChain(stream,state,[ch],"variable-2");} + if(ch=="/"){ + if(!/~\s*$/.test(prefix(stream))) + return "operator"; + else + return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);} + if(ch=="$"){ + var p=stream.pos; + if(stream.eatWhile(/\d/)||stream.eat("{")&&stream.eatWhile(/\d/)&&stream.eat("}")) + return "variable-2"; + else + stream.pos=p;} + if(/[$@%]/.test(ch)){ + var p=stream.pos; + if(stream.eat("^")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(look(stream, -2))&&stream.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){ + var c=stream.current(); + if(PERL[c]) + return "variable-2";} + stream.pos=p;} + if(/[$@%&]/.test(ch)){ + if(stream.eatWhile(/[\w$\[\]]/)||stream.eat("{")&&stream.eatWhile(/[\w$\[\]]/)&&stream.eat("}")){ + var c=stream.current(); + if(PERL[c]) + return "variable-2"; + else + return "variable";}} + if(ch=="#"){ + if(look(stream, -2)!="$"){ + stream.skipToEnd(); + return "comment";}} + if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(ch)){ + var p=stream.pos; + stream.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/); + if(PERL[stream.current()]) + return "operator"; + else + stream.pos=p;} + if(ch=="_"){ + if(stream.pos==1){ + if(suffix(stream, 6)=="_END__"){ + return tokenChain(stream,state,['\0'],"comment");} + else if(suffix(stream, 7)=="_DATA__"){ + return tokenChain(stream,state,['\0'],"variable-2");} + else if(suffix(stream, 7)=="_C__"){ + return tokenChain(stream,state,['\0'],"string");}}} + if(/\w/.test(ch)){ + var p=stream.pos; + if(look(stream, -2)=="{"&&(look(stream, 0)=="}"||stream.eatWhile(/\w/)&&look(stream, 0)=="}")) + return "string"; + else + stream.pos=p;} + if(/[A-Z]/.test(ch)){ + var l=look(stream, -2); + var p=stream.pos; + stream.eatWhile(/[A-Z_]/); + if(/[\da-z]/.test(look(stream, 0))){ + stream.pos=p;} + else{ + var c=PERL[stream.current()]; + if(!c) + return "meta"; + if(c[1]) + c=c[0]; + if(l!=":"){ + if(c==1) + return "keyword"; + else if(c==2) + return "def"; + else if(c==3) + return "atom"; + else if(c==4) + return "operator"; + else if(c==5) + return "variable-2"; + else + return "meta";} + else + return "meta";}} + if(/[a-zA-Z_]/.test(ch)){ + var l=look(stream, -2); + stream.eatWhile(/\w/); + var c=PERL[stream.current()]; + if(!c) + return "meta"; + if(c[1]) + c=c[0]; + if(l!=":"){ + if(c==1) + return "keyword"; + else if(c==2) + return "def"; + else if(c==3) + return "atom"; + else if(c==4) + return "operator"; + else if(c==5) + return "variable-2"; + else + return "meta";} + else + return "meta";} + return null;} + + return{ + startState:function(){ + return{ + tokenize:tokenPerl, + chain:null, + style:null, + tail:null};}, + token:function(stream,state){ + return (state.tokenize||tokenPerl)(stream,state);}, + electricChars:"{}"};}); + +CodeMirror.defineMIME("text/x-perl", "perl"); + +// it's like "peek", but need for look-ahead or look-behind if index < 0 +function look(stream, c){ + return stream.string.charAt(stream.pos+(c||0)); +} + +// return a part of prefix of current stream from current position +function prefix(stream, c){ + if(c){ + var x=stream.pos-c; + return stream.string.substr((x>=0?x:0),c);} + else{ + return stream.string.substr(0,stream.pos-1); + } +} + +// return a part of suffix of current stream from current position +function suffix(stream, c){ + var y=stream.string.length; + var x=y-stream.pos+1; + return stream.string.substr(stream.pos,(c&&c=(y=stream.string.length-1)) + stream.pos=y; + else + stream.pos=x; +} + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/php/php.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/php/php.js new file mode 100644 index 0000000..e0c880f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/php/php.js @@ -0,0 +1,140 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../clike/clike")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../clike/clike"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function keywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + function heredoc(delim) { + return function(stream, state) { + if (stream.match(delim)) state.tokenize = null; + else stream.skipToEnd(); + return "string"; + }; + } + var phpConfig = { + name: "clike", + keywords: keywords("abstract and array as break case catch class clone const continue declare default " + + "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " + + "for foreach function global goto if implements interface instanceof namespace " + + "new or private protected public static switch throw trait try use var while xor " + + "die echo empty exit eval include include_once isset list require require_once return " + + "print unset __halt_compiler self static parent yield insteadof finally"), + blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"), + atoms: keywords("true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__"), + builtin: keywords("func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once"), + multiLineStrings: true, + hooks: { + "$": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "variable-2"; + }, + "<": function(stream, state) { + if (stream.match(/<", false)) stream.next(); + return "comment"; + }, + "/": function(stream) { + if (stream.eat("/")) { + while (!stream.eol() && !stream.match("?>", false)) stream.next(); + return "comment"; + } + return false; + } + } + }; + + CodeMirror.defineMode("php", function(config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, "text/html"); + var phpMode = CodeMirror.getMode(config, phpConfig); + + function dispatch(stream, state) { + var isPHP = state.curMode == phpMode; + if (stream.sol() && state.pending && state.pending != '"' && state.pending != "'") state.pending = null; + if (!isPHP) { + if (stream.match(/^<\?\w*/)) { + state.curMode = phpMode; + state.curState = state.php; + return "meta"; + } + if (state.pending == '"' || state.pending == "'") { + while (!stream.eol() && stream.next() != state.pending) {} + var style = "string"; + } else if (state.pending && stream.pos < state.pending.end) { + stream.pos = state.pending.end; + var style = state.pending.style; + } else { + var style = htmlMode.token(stream, state.curState); + } + if (state.pending) state.pending = null; + var cur = stream.current(), openPHP = cur.search(/<\?/), m; + if (openPHP != -1) { + if (style == "string" && (m = cur.match(/[\'\"]$/)) && !/\?>/.test(cur)) state.pending = m[0]; + else state.pending = {end: stream.pos, style: style}; + stream.backUp(cur.length - openPHP); + } + return style; + } else if (isPHP && state.php.tokenize == null && stream.match("?>")) { + state.curMode = htmlMode; + state.curState = state.html; + return "meta"; + } else { + return phpMode.token(stream, state.curState); + } + } + + return { + startState: function() { + var html = CodeMirror.startState(htmlMode), php = CodeMirror.startState(phpMode); + return {html: html, + php: php, + curMode: parserConfig.startOpen ? phpMode : htmlMode, + curState: parserConfig.startOpen ? php : html, + pending: null}; + }, + + copyState: function(state) { + var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html), + php = state.php, phpNew = CodeMirror.copyState(phpMode, php), cur; + if (state.curMode == htmlMode) cur = htmlNew; + else cur = phpNew; + return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur, + pending: state.pending}; + }, + + token: dispatch, + + indent: function(state, textAfter) { + if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) || + (state.curMode == phpMode && /^\?>/.test(textAfter))) + return htmlMode.indent(state.html, textAfter); + return state.curMode.indent(state.curState, textAfter); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + + innerMode: function(state) { return {state: state.curState, mode: state.curMode}; } + }; + }, "htmlmixed", "clike"); + + CodeMirror.defineMIME("application/x-httpd-php", "php"); + CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true}); + CodeMirror.defineMIME("text/x-php", phpConfig); +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/python/python.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/python/python.js new file mode 100644 index 0000000..dce4fc2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/python/python.js @@ -0,0 +1,388 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + + +CodeMirror.defineMode("python", function(conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var singleOperators = parserConf.singleOperators || new RegExp("^[\\+\\-\\*/%&|\\^~<>!]"); + var singleDelimiters = parserConf.singleDelimiters || new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); + var doubleOperators = parserConf.doubleOperators || new RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); + var doubleDelimiters = parserConf.doubleDelimiters || new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); + var tripleDelimiters = parserConf.tripleDelimiters || new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); + var identifiers = parserConf.identifiers|| new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); + var hangingIndent = parserConf.hangingIndent || parserConf.indentUnit; + + var wordOperators = wordRegexp(['and', 'or', 'not', 'is', 'in']); + var commonkeywords = ['as', 'assert', 'break', 'class', 'continue', + 'def', 'del', 'elif', 'else', 'except', 'finally', + 'for', 'from', 'global', 'if', 'import', + 'lambda', 'pass', 'raise', 'return', + 'try', 'while', 'with', 'yield']; + var commonBuiltins = ['abs', 'all', 'any', 'bin', 'bool', 'bytearray', 'callable', 'chr', + 'classmethod', 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', + 'enumerate', 'eval', 'filter', 'float', 'format', 'frozenset', + 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', + 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', + 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', + 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range', + 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', + 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', + 'type', 'vars', 'zip', '__import__', 'NotImplemented', + 'Ellipsis', '__debug__']; + var py2 = {'builtins': ['apply', 'basestring', 'buffer', 'cmp', 'coerce', 'execfile', + 'file', 'intern', 'long', 'raw_input', 'reduce', 'reload', + 'unichr', 'unicode', 'xrange', 'False', 'True', 'None'], + 'keywords': ['exec', 'print']}; + var py3 = {'builtins': ['ascii', 'bytes', 'exec', 'print'], + 'keywords': ['nonlocal', 'False', 'True', 'None']}; + + if(parserConf.extra_keywords != undefined){ + commonkeywords = commonkeywords.concat(parserConf.extra_keywords); + } + if(parserConf.extra_builtins != undefined){ + commonBuiltins = commonBuiltins.concat(parserConf.extra_builtins); + } + if (!!parserConf.version && parseInt(parserConf.version, 10) === 3) { + commonkeywords = commonkeywords.concat(py3.keywords); + commonBuiltins = commonBuiltins.concat(py3.builtins); + var stringPrefixes = new RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))", "i"); + } else { + commonkeywords = commonkeywords.concat(py2.keywords); + commonBuiltins = commonBuiltins.concat(py2.builtins); + var stringPrefixes = new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); + } + var keywords = wordRegexp(commonkeywords); + var builtins = wordRegexp(commonBuiltins); + + var indentInfo = null; + + // tokenizers + function tokenBase(stream, state) { + // Handle scope changes + if (stream.sol()) { + var scopeOffset = state.scopes[0].offset; + if (stream.eatSpace()) { + var lineOffset = stream.indentation(); + if (lineOffset > scopeOffset) { + indentInfo = 'indent'; + } else if (lineOffset < scopeOffset) { + indentInfo = 'dedent'; + } + return null; + } else { + if (scopeOffset > 0) { + dedent(stream, state); + } + } + } + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle Comments + if (ch === '#') { + stream.skipToEnd(); + return 'comment'; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.]/, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } + if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } + if (stream.match(/^\.\d+/)) { floatLiteral = true; } + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^0x[0-9a-f]+/i)) { intLiteral = true; } + // Binary + if (stream.match(/^0b[01]+/i)) { intLiteral = true; } + // Octal + if (stream.match(/^0o[0-7]+/i)) { intLiteral = true; } + // Decimal + if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return 'number'; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { + return null; + } + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return null; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(builtins)) { + return 'builtin'; + } + + if (stream.match(/^(self|cls)\b/)) { + return "variable-2"; + } + + if (stream.match(identifiers)) { + if (state.lastToken == 'def' || state.lastToken == 'class') { + return 'def'; + } + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + while ('rub'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) { + delimiter = delimiter.substr(1); + } + var singleline = delimiter.length == 1; + var OUTCLASS = 'string'; + + function tokenString(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\\]/); + if (stream.eat('\\')) { + stream.next(); + if (singleline && stream.eol()) { + return OUTCLASS; + } + } else if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + return ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return OUTCLASS; + } + tokenString.isString = true; + return tokenString; + } + + function indent(stream, state, type) { + type = type || 'py'; + var indentUnit = 0; + if (type === 'py') { + if (state.scopes[0].type !== 'py') { + state.scopes[0].offset = stream.indentation(); + return; + } + for (var i = 0; i < state.scopes.length; ++i) { + if (state.scopes[i].type === 'py') { + indentUnit = state.scopes[i].offset + conf.indentUnit; + break; + } + } + } else if (stream.match(/\s*($|#)/, false)) { + // An open paren/bracket/brace with only space or comments after it + // on the line will indent the next line a fixed amount, to make it + // easier to put arguments, list items, etc. on their own lines. + indentUnit = stream.indentation() + hangingIndent; + } else { + indentUnit = stream.column() + stream.current().length; + } + state.scopes.unshift({ + offset: indentUnit, + type: type + }); + } + + function dedent(stream, state, type) { + type = type || 'py'; + if (state.scopes.length == 1) return; + if (state.scopes[0].type === 'py') { + var _indent = stream.indentation(); + var _indent_index = -1; + for (var i = 0; i < state.scopes.length; ++i) { + if (_indent === state.scopes[i].offset) { + _indent_index = i; + break; + } + } + if (_indent_index === -1) { + return true; + } + while (state.scopes[0].offset !== _indent) { + state.scopes.shift(); + } + return false; + } else { + if (type === 'py') { + state.scopes[0].offset = stream.indentation(); + return false; + } else { + if (state.scopes[0].type != type) { + return true; + } + state.scopes.shift(); + return false; + } + } + } + + function tokenLexer(stream, state) { + indentInfo = null; + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = stream.match(identifiers, false) ? null : ERRORCLASS; + if (style === null && state.lastStyle === 'meta') { + // Apply 'meta' style to '.' connected identifiers when + // appropriate. + style = 'meta'; + } + return style; + } + + // Handle decorators + if (current === '@') { + return stream.match(identifiers, false) ? 'meta' : ERRORCLASS; + } + + if ((style === 'variable' || style === 'builtin') + && state.lastStyle === 'meta') { + style = 'meta'; + } + + // Handle scope changes. + if (current === 'pass' || current === 'return') { + state.dedent += 1; + } + if (current === 'lambda') state.lambda = true; + if ((current === ':' && !state.lambda && state.scopes[0].type == 'py') + || indentInfo === 'indent') { + indent(stream, state); + } + var delimiter_index = '[({'.indexOf(current); + if (delimiter_index !== -1) { + indent(stream, state, '])}'.slice(delimiter_index, delimiter_index+1)); + } + if (indentInfo === 'dedent') { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + delimiter_index = '])}'.indexOf(current); + if (delimiter_index !== -1) { + if (dedent(stream, state, current)) { + return ERRORCLASS; + } + } + if (state.dedent > 0 && stream.eol() && state.scopes[0].type == 'py') { + if (state.scopes.length > 1) state.scopes.shift(); + state.dedent -= 1; + } + + return style; + } + + var external = { + startState: function(basecolumn) { + return { + tokenize: tokenBase, + scopes: [{offset:basecolumn || 0, type:'py'}], + lastStyle: null, + lastToken: null, + lambda: false, + dedent: 0 + }; + }, + + token: function(stream, state) { + var style = tokenLexer(stream, state); + + state.lastStyle = style; + + var current = stream.current(); + if (current && style) { + state.lastToken = current; + } + + if (stream.eol() && state.lambda) { + state.lambda = false; + } + return style; + }, + + indent: function(state) { + if (state.tokenize != tokenBase) { + return state.tokenize.isString ? CodeMirror.Pass : 0; + } + + return state.scopes[0].offset; + }, + + lineComment: "#", + fold: "indent" + }; + return external; +}); + +CodeMirror.defineMIME("text/x-python", "python"); + +var words = function(str){return str.split(' ');}; + +CodeMirror.defineMIME("text/x-cython", { + name: "python", + extra_keywords: words("by cdef cimport cpdef ctypedef enum except"+ + "extern gil include nogil property public"+ + "readonly struct union DEF IF ELIF ELSE") +}); + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/rst/rst.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/rst/rst.js new file mode 100644 index 0000000..3bff690 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/rst/rst.js @@ -0,0 +1,575 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../python/python"), require("../stex/stex"), require("../../addon/mode/overlay")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../python/python", "../stex/stex", "../../addon/mode/overlay"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode('rst', function (config, options) { + + var rx_strong = /^\*\*[^\*\s](?:[^\*]*[^\*\s])?\*\*/; + var rx_emphasis = /^\*[^\*\s](?:[^\*]*[^\*\s])?\*/; + var rx_literal = /^``[^`\s](?:[^`]*[^`\s])``/; + + var rx_number = /^(?:[\d]+(?:[\.,]\d+)*)/; + var rx_positive = /^(?:\s\+[\d]+(?:[\.,]\d+)*)/; + var rx_negative = /^(?:\s\-[\d]+(?:[\.,]\d+)*)/; + + var rx_uri_protocol = "[Hh][Tt][Tt][Pp][Ss]?://"; + var rx_uri_domain = "(?:[\\d\\w.-]+)\\.(?:\\w{2,6})"; + var rx_uri_path = "(?:/[\\d\\w\\#\\%\\&\\-\\.\\,\\/\\:\\=\\?\\~]+)*"; + var rx_uri = new RegExp("^" + rx_uri_protocol + rx_uri_domain + rx_uri_path); + + var overlay = { + token: function (stream) { + + if (stream.match(rx_strong) && stream.match (/\W+|$/, false)) + return 'strong'; + if (stream.match(rx_emphasis) && stream.match (/\W+|$/, false)) + return 'em'; + if (stream.match(rx_literal) && stream.match (/\W+|$/, false)) + return 'string-2'; + if (stream.match(rx_number)) + return 'number'; + if (stream.match(rx_positive)) + return 'positive'; + if (stream.match(rx_negative)) + return 'negative'; + if (stream.match(rx_uri)) + return 'link'; + + while (stream.next() != null) { + if (stream.match(rx_strong, false)) break; + if (stream.match(rx_emphasis, false)) break; + if (stream.match(rx_literal, false)) break; + if (stream.match(rx_number, false)) break; + if (stream.match(rx_positive, false)) break; + if (stream.match(rx_negative, false)) break; + if (stream.match(rx_uri, false)) break; + } + + return null; + } + }; + + var mode = CodeMirror.getMode( + config, options.backdrop || 'rst-base' + ); + + return CodeMirror.overlayMode(mode, overlay, true); // combine +}, 'python', 'stex'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +CodeMirror.defineMode('rst-base', function (config) { + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function format(string) { + var args = Array.prototype.slice.call(arguments, 1); + return string.replace(/{(\d+)}/g, function (match, n) { + return typeof args[n] != 'undefined' ? args[n] : match; + }); + } + + function AssertException(message) { + this.message = message; + } + + AssertException.prototype.toString = function () { + return 'AssertException: ' + this.message; + }; + + function assert(expression, message) { + if (!expression) throw new AssertException(message); + return expression; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + var mode_python = CodeMirror.getMode(config, 'python'); + var mode_stex = CodeMirror.getMode(config, 'stex'); + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + var SEPA = "\\s+"; + var TAIL = "(?:\\s*|\\W|$)", + rx_TAIL = new RegExp(format('^{0}', TAIL)); + + var NAME = + "(?:[^\\W\\d_](?:[\\w!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)", + rx_NAME = new RegExp(format('^{0}', NAME)); + var NAME_WWS = + "(?:[^\\W\\d_](?:[\\w\\s!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)"; + var REF_NAME = format('(?:{0}|`{1}`)', NAME, NAME_WWS); + + var TEXT1 = "(?:[^\\s\\|](?:[^\\|]*[^\\s\\|])?)"; + var TEXT2 = "(?:[^\\`]+)", + rx_TEXT2 = new RegExp(format('^{0}', TEXT2)); + + var rx_section = new RegExp( + "^([!'#$%&\"()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~])\\1{3,}\\s*$"); + var rx_explicit = new RegExp( + format('^\\.\\.{0}', SEPA)); + var rx_link = new RegExp( + format('^_{0}:{1}|^__:{1}', REF_NAME, TAIL)); + var rx_directive = new RegExp( + format('^{0}::{1}', REF_NAME, TAIL)); + var rx_substitution = new RegExp( + format('^\\|{0}\\|{1}{2}::{3}', TEXT1, SEPA, REF_NAME, TAIL)); + var rx_footnote = new RegExp( + format('^\\[(?:\\d+|#{0}?|\\*)]{1}', REF_NAME, TAIL)); + var rx_citation = new RegExp( + format('^\\[{0}\\]{1}', REF_NAME, TAIL)); + + var rx_substitution_ref = new RegExp( + format('^\\|{0}\\|', TEXT1)); + var rx_footnote_ref = new RegExp( + format('^\\[(?:\\d+|#{0}?|\\*)]_', REF_NAME)); + var rx_citation_ref = new RegExp( + format('^\\[{0}\\]_', REF_NAME)); + var rx_link_ref1 = new RegExp( + format('^{0}__?', REF_NAME)); + var rx_link_ref2 = new RegExp( + format('^`{0}`_', TEXT2)); + + var rx_role_pre = new RegExp( + format('^:{0}:`{1}`{2}', NAME, TEXT2, TAIL)); + var rx_role_suf = new RegExp( + format('^`{1}`:{0}:{2}', NAME, TEXT2, TAIL)); + var rx_role = new RegExp( + format('^:{0}:{1}', NAME, TAIL)); + + var rx_directive_name = new RegExp(format('^{0}', REF_NAME)); + var rx_directive_tail = new RegExp(format('^::{0}', TAIL)); + var rx_substitution_text = new RegExp(format('^\\|{0}\\|', TEXT1)); + var rx_substitution_sepa = new RegExp(format('^{0}', SEPA)); + var rx_substitution_name = new RegExp(format('^{0}', REF_NAME)); + var rx_substitution_tail = new RegExp(format('^::{0}', TAIL)); + var rx_link_head = new RegExp("^_"); + var rx_link_name = new RegExp(format('^{0}|_', REF_NAME)); + var rx_link_tail = new RegExp(format('^:{0}', TAIL)); + + var rx_verbatim = new RegExp('^::\\s*$'); + var rx_examples = new RegExp('^\\s+(?:>>>|In \\[\\d+\\]:)\\s'); + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_normal(stream, state) { + var token = null; + + if (stream.sol() && stream.match(rx_examples, false)) { + change(state, to_mode, { + mode: mode_python, local: CodeMirror.startState(mode_python) + }); + } else if (stream.sol() && stream.match(rx_explicit)) { + change(state, to_explicit); + token = 'meta'; + } else if (stream.sol() && stream.match(rx_section)) { + change(state, to_normal); + token = 'header'; + } else if (phase(state) == rx_role_pre || + stream.match(rx_role_pre, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role_pre, 1)); + assert(stream.match(/^:/)); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role_pre, 2)); + assert(stream.match(rx_NAME)); + token = 'keyword'; + + if (stream.current().match(/^(?:math|latex)/)) { + state.tmp_stex = true; + } + break; + case 2: + change(state, to_normal, context(rx_role_pre, 3)); + assert(stream.match(/^:`/)); + token = 'meta'; + break; + case 3: + if (state.tmp_stex) { + state.tmp_stex = undefined; state.tmp = { + mode: mode_stex, local: CodeMirror.startState(mode_stex) + }; + } + + if (state.tmp) { + if (stream.peek() == '`') { + change(state, to_normal, context(rx_role_pre, 4)); + state.tmp = undefined; + break; + } + + token = state.tmp.mode.token(stream, state.tmp.local); + break; + } + + change(state, to_normal, context(rx_role_pre, 4)); + assert(stream.match(rx_TEXT2)); + token = 'string'; + break; + case 4: + change(state, to_normal, context(rx_role_pre, 5)); + assert(stream.match(/^`/)); + token = 'meta'; + break; + case 5: + change(state, to_normal, context(rx_role_pre, 6)); + assert(stream.match(rx_TAIL)); + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (phase(state) == rx_role_suf || + stream.match(rx_role_suf, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role_suf, 1)); + assert(stream.match(/^`/)); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role_suf, 2)); + assert(stream.match(rx_TEXT2)); + token = 'string'; + break; + case 2: + change(state, to_normal, context(rx_role_suf, 3)); + assert(stream.match(/^`:/)); + token = 'meta'; + break; + case 3: + change(state, to_normal, context(rx_role_suf, 4)); + assert(stream.match(rx_NAME)); + token = 'keyword'; + break; + case 4: + change(state, to_normal, context(rx_role_suf, 5)); + assert(stream.match(/^:/)); + token = 'meta'; + break; + case 5: + change(state, to_normal, context(rx_role_suf, 6)); + assert(stream.match(rx_TAIL)); + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (phase(state) == rx_role || stream.match(rx_role, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_role, 1)); + assert(stream.match(/^:/)); + token = 'meta'; + break; + case 1: + change(state, to_normal, context(rx_role, 2)); + assert(stream.match(rx_NAME)); + token = 'keyword'; + break; + case 2: + change(state, to_normal, context(rx_role, 3)); + assert(stream.match(/^:/)); + token = 'meta'; + break; + case 3: + change(state, to_normal, context(rx_role, 4)); + assert(stream.match(rx_TAIL)); + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (phase(state) == rx_substitution_ref || + stream.match(rx_substitution_ref, false)) { + + switch (stage(state)) { + case 0: + change(state, to_normal, context(rx_substitution_ref, 1)); + assert(stream.match(rx_substitution_text)); + token = 'variable-2'; + break; + case 1: + change(state, to_normal, context(rx_substitution_ref, 2)); + if (stream.match(/^_?_?/)) token = 'link'; + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (stream.match(rx_footnote_ref)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_citation_ref)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_link_ref1)) { + change(state, to_normal); + if (!stream.peek() || stream.peek().match(/^\W$/)) { + token = 'link'; + } + } else if (phase(state) == rx_link_ref2 || + stream.match(rx_link_ref2, false)) { + + switch (stage(state)) { + case 0: + if (!stream.peek() || stream.peek().match(/^\W$/)) { + change(state, to_normal, context(rx_link_ref2, 1)); + } else { + stream.match(rx_link_ref2); + } + break; + case 1: + change(state, to_normal, context(rx_link_ref2, 2)); + assert(stream.match(/^`/)); + token = 'link'; + break; + case 2: + change(state, to_normal, context(rx_link_ref2, 3)); + assert(stream.match(rx_TEXT2)); + break; + case 3: + change(state, to_normal, context(rx_link_ref2, 4)); + assert(stream.match(/^`_/)); + token = 'link'; + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (stream.match(rx_verbatim)) { + change(state, to_verbatim); + } + + else { + if (stream.next()) change(state, to_normal); + } + + return token; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_explicit(stream, state) { + var token = null; + + if (phase(state) == rx_substitution || + stream.match(rx_substitution, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_substitution, 1)); + assert(stream.match(rx_substitution_text)); + token = 'variable-2'; + break; + case 1: + change(state, to_explicit, context(rx_substitution, 2)); + assert(stream.match(rx_substitution_sepa)); + break; + case 2: + change(state, to_explicit, context(rx_substitution, 3)); + assert(stream.match(rx_substitution_name)); + token = 'keyword'; + break; + case 3: + change(state, to_explicit, context(rx_substitution, 4)); + assert(stream.match(rx_substitution_tail)); + token = 'meta'; + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (phase(state) == rx_directive || + stream.match(rx_directive, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_directive, 1)); + assert(stream.match(rx_directive_name)); + token = 'keyword'; + + if (stream.current().match(/^(?:math|latex)/)) + state.tmp_stex = true; + else if (stream.current().match(/^python/)) + state.tmp_py = true; + break; + case 1: + change(state, to_explicit, context(rx_directive, 2)); + assert(stream.match(rx_directive_tail)); + token = 'meta'; + + if (stream.match(/^latex\s*$/) || state.tmp_stex) { + state.tmp_stex = undefined; change(state, to_mode, { + mode: mode_stex, local: CodeMirror.startState(mode_stex) + }); + } + break; + case 2: + change(state, to_explicit, context(rx_directive, 3)); + if (stream.match(/^python\s*$/) || state.tmp_py) { + state.tmp_py = undefined; change(state, to_mode, { + mode: mode_python, local: CodeMirror.startState(mode_python) + }); + } + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (phase(state) == rx_link || stream.match(rx_link, false)) { + + switch (stage(state)) { + case 0: + change(state, to_explicit, context(rx_link, 1)); + assert(stream.match(rx_link_head)); + assert(stream.match(rx_link_name)); + token = 'link'; + break; + case 1: + change(state, to_explicit, context(rx_link, 2)); + assert(stream.match(rx_link_tail)); + token = 'meta'; + break; + default: + change(state, to_normal); + assert(stream.current() == ''); + } + } else if (stream.match(rx_footnote)) { + change(state, to_normal); + token = 'quote'; + } else if (stream.match(rx_citation)) { + change(state, to_normal); + token = 'quote'; + } + + else { + stream.eatSpace(); + if (stream.eol()) { + change(state, to_normal); + } else { + stream.skipToEnd(); + change(state, to_comment); + token = 'comment'; + } + } + + return token; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_comment(stream, state) { + return as_block(stream, state, 'comment'); + } + + function to_verbatim(stream, state) { + return as_block(stream, state, 'meta'); + } + + function as_block(stream, state, token) { + if (stream.eol() || stream.eatSpace()) { + stream.skipToEnd(); + return token; + } else { + change(state, to_normal); + return null; + } + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function to_mode(stream, state) { + + if (state.ctx.mode && state.ctx.local) { + + if (stream.sol()) { + if (!stream.eatSpace()) change(state, to_normal); + return null; + } + + return state.ctx.mode.token(stream, state.ctx.local); + } + + change(state, to_normal); + return null; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + function context(phase, stage, mode, local) { + return {phase: phase, stage: stage, mode: mode, local: local}; + } + + function change(state, tok, ctx) { + state.tok = tok; + state.ctx = ctx || {}; + } + + function stage(state) { + return state.ctx.stage || 0; + } + + function phase(state) { + return state.ctx.phase; + } + + /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////// + + return { + startState: function () { + return {tok: to_normal, ctx: context(undefined, 0)}; + }, + + copyState: function (state) { + var ctx = state.ctx, tmp = state.tmp; + if (ctx.local) + ctx = {mode: ctx.mode, local: CodeMirror.copyState(ctx.mode, ctx.local)}; + if (tmp) + tmp = {mode: tmp.mode, local: CodeMirror.copyState(tmp.mode, tmp.local)}; + return {tok: state.tok, ctx: ctx, tmp: tmp}; + }, + + innerMode: function (state) { + return state.tmp ? {state: state.tmp.local, mode: state.tmp.mode} + : state.ctx.mode ? {state: state.ctx.local, mode: state.ctx.mode} + : null; + }, + + token: function (stream, state) { + return state.tok(stream, state); + } + }; +}, 'python', 'stex'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +CodeMirror.defineMIME('text/x-rst', 'rst'); + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/ruby/ruby.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/ruby/ruby.js new file mode 100644 index 0000000..6dd6660 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/ruby/ruby.js @@ -0,0 +1,261 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("ruby", function(config) { + function wordObj(words) { + var o = {}; + for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; + return o; + } + var keywords = wordObj([ + "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else", + "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or", + "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", + "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc", + "caller", "lambda", "proc", "public", "protected", "private", "require", "load", + "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__" + ]); + var indentWords = wordObj(["def", "class", "case", "for", "while", "module", "then", + "catch", "loop", "proc", "begin"]); + var dedentWords = wordObj(["end", "until"]); + var matching = {"[": "]", "{": "}", "(": ")"}; + var curPunc; + + function chain(newtok, stream, state) { + state.tokenize.push(newtok); + return newtok(stream, state); + } + + function tokenBase(stream, state) { + curPunc = null; + if (stream.sol() && stream.match("=begin") && stream.eol()) { + state.tokenize.push(readBlockComment); + return "comment"; + } + if (stream.eatSpace()) return null; + var ch = stream.next(), m; + if (ch == "`" || ch == "'" || ch == '"') { + return chain(readQuoted(ch, "string", ch == '"' || ch == "`"), stream, state); + } else if (ch == "/" && !stream.eol() && stream.peek() != " ") { + if (stream.eat("=")) return "operator"; + return chain(readQuoted(ch, "string-2", true), stream, state); + } else if (ch == "%") { + var style = "string", embed = true; + if (stream.eat("s")) style = "atom"; + else if (stream.eat(/[WQ]/)) style = "string"; + else if (stream.eat(/[r]/)) style = "string-2"; + else if (stream.eat(/[wxq]/)) { style = "string"; embed = false; } + var delim = stream.eat(/[^\w\s]/); + if (!delim) return "operator"; + if (matching.propertyIsEnumerable(delim)) delim = matching[delim]; + return chain(readQuoted(delim, style, embed, true), stream, state); + } else if (ch == "#") { + stream.skipToEnd(); + return "comment"; + } else if (ch == "<" && (m = stream.match(/^<-?[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/))) { + return chain(readHereDoc(m[1]), stream, state); + } else if (ch == "0") { + if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/); + else if (stream.eat("b")) stream.eatWhile(/[01]/); + else stream.eatWhile(/[0-7]/); + return "number"; + } else if (/\d/.test(ch)) { + stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/); + return "number"; + } else if (ch == "?") { + while (stream.match(/^\\[CM]-/)) {} + if (stream.eat("\\")) stream.eatWhile(/\w/); + else stream.next(); + return "string"; + } else if (ch == ":") { + if (stream.eat("'")) return chain(readQuoted("'", "atom", false), stream, state); + if (stream.eat('"')) return chain(readQuoted('"', "atom", true), stream, state); + + // :> :>> :< :<< are valid symbols + if (stream.eat(/[\<\>]/)) { + stream.eat(/[\<\>]/); + return "atom"; + } + + // :+ :- :/ :* :| :& :! are valid symbols + if (stream.eat(/[\+\-\*\/\&\|\:\!]/)) { + return "atom"; + } + + // Symbols can't start by a digit + if (stream.eat(/[a-zA-Z$@_]/)) { + stream.eatWhile(/[\w]/); + // Only one ? ! = is allowed and only as the last character + stream.eat(/[\?\!\=]/); + return "atom"; + } + return "operator"; + } else if (ch == "@" && stream.match(/^@?[a-zA-Z_]/)) { + stream.eat("@"); + stream.eatWhile(/[\w]/); + return "variable-2"; + } else if (ch == "$") { + if (stream.eat(/[a-zA-Z_]/)) { + stream.eatWhile(/[\w]/); + } else if (stream.eat(/\d/)) { + stream.eat(/\d/); + } else { + stream.next(); // Must be a special global like $: or $! + } + return "variable-3"; + } else if (/[a-zA-Z_]/.test(ch)) { + stream.eatWhile(/[\w]/); + stream.eat(/[\?\!]/); + if (stream.eat(":")) return "atom"; + return "ident"; + } else if (ch == "|" && (state.varList || state.lastTok == "{" || state.lastTok == "do")) { + curPunc = "|"; + return null; + } else if (/[\(\)\[\]{}\\;]/.test(ch)) { + curPunc = ch; + return null; + } else if (ch == "-" && stream.eat(">")) { + return "arrow"; + } else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) { + stream.eatWhile(/[=+\-\/*:\.^%<>~|]/); + return "operator"; + } else { + return null; + } + } + + function tokenBaseUntilBrace() { + var depth = 1; + return function(stream, state) { + if (stream.peek() == "}") { + depth--; + if (depth == 0) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } + } else if (stream.peek() == "{") { + depth++; + } + return tokenBase(stream, state); + }; + } + function tokenBaseOnce() { + var alreadyCalled = false; + return function(stream, state) { + if (alreadyCalled) { + state.tokenize.pop(); + return state.tokenize[state.tokenize.length-1](stream, state); + } + alreadyCalled = true; + return tokenBase(stream, state); + }; + } + function readQuoted(quote, style, embed, unescaped) { + return function(stream, state) { + var escaped = false, ch; + + if (state.context.type === 'read-quoted-paused') { + state.context = state.context.prev; + stream.eat("}"); + } + + while ((ch = stream.next()) != null) { + if (ch == quote && (unescaped || !escaped)) { + state.tokenize.pop(); + break; + } + if (embed && ch == "#" && !escaped) { + if (stream.eat("{")) { + if (quote == "}") { + state.context = {prev: state.context, type: 'read-quoted-paused'}; + } + state.tokenize.push(tokenBaseUntilBrace()); + break; + } else if (/[@\$]/.test(stream.peek())) { + state.tokenize.push(tokenBaseOnce()); + break; + } + } + escaped = !escaped && ch == "\\"; + } + return style; + }; + } + function readHereDoc(phrase) { + return function(stream, state) { + if (stream.match(phrase)) state.tokenize.pop(); + else stream.skipToEnd(); + return "string"; + }; + } + function readBlockComment(stream, state) { + if (stream.sol() && stream.match("=end") && stream.eol()) + state.tokenize.pop(); + stream.skipToEnd(); + return "comment"; + } + + return { + startState: function() { + return {tokenize: [tokenBase], + indented: 0, + context: {type: "top", indented: -config.indentUnit}, + continuedLine: false, + lastTok: null, + varList: false}; + }, + + token: function(stream, state) { + if (stream.sol()) state.indented = stream.indentation(); + var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype; + if (style == "ident") { + var word = stream.current(); + style = keywords.propertyIsEnumerable(stream.current()) ? "keyword" + : /^[A-Z]/.test(word) ? "tag" + : (state.lastTok == "def" || state.lastTok == "class" || state.varList) ? "def" + : "variable"; + if (indentWords.propertyIsEnumerable(word)) kwtype = "indent"; + else if (dedentWords.propertyIsEnumerable(word)) kwtype = "dedent"; + else if ((word == "if" || word == "unless") && stream.column() == stream.indentation()) + kwtype = "indent"; + else if (word == "do" && state.context.indented < state.indented) + kwtype = "indent"; + } + if (curPunc || (style && style != "comment")) state.lastTok = word || curPunc || style; + if (curPunc == "|") state.varList = !state.varList; + + if (kwtype == "indent" || /[\(\[\{]/.test(curPunc)) + state.context = {prev: state.context, type: curPunc || style, indented: state.indented}; + else if ((kwtype == "dedent" || /[\)\]\}]/.test(curPunc)) && state.context.prev) + state.context = state.context.prev; + + if (stream.eol()) + state.continuedLine = (curPunc == "\\" || style == "operator"); + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize[state.tokenize.length-1] != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0); + var ct = state.context; + var closing = ct.type == matching[firstChar] || + ct.type == "keyword" && /^(?:end|until|else|elsif|when|rescue)\b/.test(textAfter); + return ct.indented + (closing ? 0 : config.indentUnit) + + (state.continuedLine ? config.indentUnit : 0); + }, + + electricChars: "}de", // enD and rescuE + lineComment: "#" + }; +}); + +CodeMirror.defineMIME("text/x-ruby", "ruby"); + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/sass/sass.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/sass/sass.js new file mode 100644 index 0000000..84d016e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/sass/sass.js @@ -0,0 +1,342 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sass", function(config) { + var tokenRegexp = function(words){ + return new RegExp("^" + words.join("|")); + }; + + var keywords = ["true", "false", "null", "auto"]; + var keywordsRegexp = new RegExp("^" + keywords.join("|")); + + var operators = ["\\(", "\\)", "=", ">", "<", "==", ">=", "<=", "\\+", "-", "\\!=", "/", "\\*", "%", "and", "or", "not"]; + var opRegexp = tokenRegexp(operators); + + var pseudoElementsRegexp = /^::?[\w\-]+/; + + var urlTokens = function(stream, state){ + var ch = stream.peek(); + + if (ch === ")"){ + stream.next(); + state.tokenizer = tokenBase; + return "operator"; + }else if (ch === "("){ + stream.next(); + stream.eatSpace(); + + return "operator"; + }else if (ch === "'" || ch === '"'){ + state.tokenizer = buildStringTokenizer(stream.next()); + return "string"; + }else{ + state.tokenizer = buildStringTokenizer(")", false); + return "string"; + } + }; + var multilineComment = function(stream, state) { + if (stream.skipTo("*/")){ + stream.next(); + stream.next(); + state.tokenizer = tokenBase; + }else { + stream.next(); + } + + return "comment"; + }; + + var buildStringTokenizer = function(quote, greedy){ + if(greedy == null){ greedy = true; } + + function stringTokenizer(stream, state){ + var nextChar = stream.next(); + var peekChar = stream.peek(); + var previousChar = stream.string.charAt(stream.pos-2); + + var endingString = ((nextChar !== "\\" && peekChar === quote) || (nextChar === quote && previousChar !== "\\")); + + /* + console.log("previousChar: " + previousChar); + console.log("nextChar: " + nextChar); + console.log("peekChar: " + peekChar); + console.log("ending: " + endingString); + */ + + if (endingString){ + if (nextChar !== quote && greedy) { stream.next(); } + state.tokenizer = tokenBase; + return "string"; + }else if (nextChar === "#" && peekChar === "{"){ + state.tokenizer = buildInterpolationTokenizer(stringTokenizer); + stream.next(); + return "operator"; + }else { + return "string"; + } + } + + return stringTokenizer; + }; + + var buildInterpolationTokenizer = function(currentTokenizer){ + return function(stream, state){ + if (stream.peek() === "}"){ + stream.next(); + state.tokenizer = currentTokenizer; + return "operator"; + }else{ + return tokenBase(stream, state); + } + }; + }; + + var indent = function(state){ + if (state.indentCount == 0){ + state.indentCount++; + var lastScopeOffset = state.scopes[0].offset; + var currentOffset = lastScopeOffset + config.indentUnit; + state.scopes.unshift({ offset:currentOffset }); + } + }; + + var dedent = function(state){ + if (state.scopes.length == 1) { return; } + + state.scopes.shift(); + }; + + var tokenBase = function(stream, state) { + var ch = stream.peek(); + + // Single line Comment + if (stream.match('//')) { + stream.skipToEnd(); + return "comment"; + } + + // Multiline Comment + if (stream.match('/*')){ + state.tokenizer = multilineComment; + return state.tokenizer(stream, state); + } + + // Interpolation + if (stream.match('#{')){ + state.tokenizer = buildInterpolationTokenizer(tokenBase); + return "operator"; + } + + if (ch === "."){ + stream.next(); + + // Match class selectors + if (stream.match(/^[\w-]+/)){ + indent(state); + return "atom"; + }else if (stream.peek() === "#"){ + indent(state); + return "atom"; + }else{ + return "operator"; + } + } + + if (ch === "#"){ + stream.next(); + + // Hex numbers + if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){ + return "number"; + } + + // ID selectors + if (stream.match(/^[\w-]+/)){ + indent(state); + return "atom"; + } + + if (stream.peek() === "#"){ + indent(state); + return "atom"; + } + } + + // Numbers + if (stream.match(/^-?[0-9\.]+/)){ + return "number"; + } + + // Units + if (stream.match(/^(px|em|in)\b/)){ + return "unit"; + } + + if (stream.match(keywordsRegexp)){ + return "keyword"; + } + + if (stream.match(/^url/) && stream.peek() === "("){ + state.tokenizer = urlTokens; + return "atom"; + } + + // Variables + if (ch === "$"){ + stream.next(); + stream.eatWhile(/[\w-]/); + + if (stream.peek() === ":"){ + stream.next(); + return "variable-2"; + }else{ + return "variable-3"; + } + } + + if (ch === "!"){ + stream.next(); + + if (stream.match(/^[\w]+/)){ + return "keyword"; + } + + return "operator"; + } + + if (ch === "="){ + stream.next(); + + // Match shortcut mixin definition + if (stream.match(/^[\w-]+/)){ + indent(state); + return "meta"; + }else { + return "operator"; + } + } + + if (ch === "+"){ + stream.next(); + + // Match shortcut mixin definition + if (stream.match(/^[\w-]+/)){ + return "variable-3"; + }else { + return "operator"; + } + } + + // Indent Directives + if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)){ + indent(state); + return "meta"; + } + + // Other Directives + if (ch === "@"){ + stream.next(); + stream.eatWhile(/[\w-]/); + return "meta"; + } + + // Strings + if (ch === '"' || ch === "'"){ + stream.next(); + state.tokenizer = buildStringTokenizer(ch); + return "string"; + } + + // Pseudo element selectors + if (ch == ':' && stream.match(pseudoElementsRegexp)){ + return "keyword"; + } + + // atoms + if (stream.eatWhile(/[\w-&]/)){ + // matches a property definition + if (stream.peek() === ":" && !stream.match(pseudoElementsRegexp, false)) + return "property"; + else + return "atom"; + } + + if (stream.match(opRegexp)){ + return "operator"; + } + + // If we haven't returned by now, we move 1 character + // and return an error + stream.next(); + return null; + }; + + var tokenLexer = function(stream, state) { + if (stream.sol()){ + state.indentCount = 0; + } + var style = state.tokenizer(stream, state); + var current = stream.current(); + + if (current === "@return"){ + dedent(state); + } + + if (style === "atom"){ + indent(state); + } + + if (style !== null){ + var startOfToken = stream.pos - current.length; + var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount); + + var newScopes = []; + + for (var i = 0; i < state.scopes.length; i++){ + var scope = state.scopes[i]; + + if (scope.offset <= withCurrentIndent){ + newScopes.push(scope); + } + } + + state.scopes = newScopes; + } + + + return style; + }; + + return { + startState: function() { + return { + tokenizer: tokenBase, + scopes: [{offset: 0, type: 'sass'}], + definedVars: [], + definedMixins: [] + }; + }, + token: function(stream, state) { + var style = tokenLexer(stream, state); + + state.lastToken = { style: style, content: stream.current() }; + + return style; + }, + + indent: function(state) { + return state.scopes[0].offset; + } + }; +}); + +CodeMirror.defineMIME("text/x-sass", "sass"); + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/sql/sql.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/sql/sql.js new file mode 100644 index 0000000..1649971 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/sql/sql.js @@ -0,0 +1,389 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sql", function(config, parserConfig) { + "use strict"; + + var client = parserConfig.client || {}, + atoms = parserConfig.atoms || {"false": true, "true": true, "null": true}, + builtin = parserConfig.builtin || {}, + keywords = parserConfig.keywords || {}, + operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^]/, + support = parserConfig.support || {}, + hooks = parserConfig.hooks || {}, + dateSQL = parserConfig.dateSQL || {"date" : true, "time" : true, "timestamp" : true}; + + function tokenBase(stream, state) { + var ch = stream.next(); + + // call hooks from the mime type + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + + if (support.hexNumber == true && + ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) + || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]+'/))) { + // hex + // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html + return "number"; + } else if (support.binaryNumber == true && + (((ch == "b" || ch == "B") && stream.match(/^'[01]+'/)) + || (ch == "0" && stream.match(/^b[01]+/)))) { + // bitstring + // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html + return "number"; + } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { + // numbers + // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html + stream.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/); + support.decimallessFloat == true && stream.eat('.'); + return "number"; + } else if (ch == "?" && (stream.eatSpace() || stream.eol() || stream.eat(";"))) { + // placeholders + return "variable-3"; + } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { + // strings + // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } else if ((((support.nCharCast == true && (ch == "n" || ch == "N")) + || (support.charsetCast == true && ch == "_" && stream.match(/[a-z][a-z0-9]*/i))) + && (stream.peek() == "'" || stream.peek() == '"'))) { + // charset casting: _utf8'str', N'str', n'str' + // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + return "keyword"; + } else if (/^[\(\),\;\[\]]/.test(ch)) { + // no highlightning + return null; + } else if (support.commentSlashSlash && ch == "/" && stream.eat("/")) { + // 1-line comment + stream.skipToEnd(); + return "comment"; + } else if ((support.commentHash && ch == "#") + || (ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { + // 1-line comments + // ref: https://kb.askmonty.org/en/comment-syntax/ + stream.skipToEnd(); + return "comment"; + } else if (ch == "/" && stream.eat("*")) { + // multi-line comments + // ref: https://kb.askmonty.org/en/comment-syntax/ + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } else if (ch == ".") { + // .1 for 0.1 + if (support.zerolessFloat == true && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) { + return "number"; + } + // .table_name (ODBC) + // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + if (support.ODBCdotTable == true && stream.match(/^[a-zA-Z_]+/)) { + return "variable-2"; + } + } else if (operatorChars.test(ch)) { + // operators + stream.eatWhile(operatorChars); + return null; + } else if (ch == '{' && + (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) { + // dates (weird ODBC syntax) + // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + return "number"; + } else { + stream.eatWhile(/^[_\w\d]/); + var word = stream.current().toLowerCase(); + // dates (standard SQL syntax) + // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) + return "number"; + if (atoms.hasOwnProperty(word)) return "atom"; + if (builtin.hasOwnProperty(word)) return "builtin"; + if (keywords.hasOwnProperty(word)) return "keyword"; + if (client.hasOwnProperty(word)) return "string-2"; + return null; + } + } + + // 'string', with char specified in quote escaped by '\' + function tokenLiteral(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return "string"; + }; + } + function tokenComment(stream, state) { + while (true) { + if (stream.skipTo("*")) { + stream.next(); + if (stream.eat("/")) { + state.tokenize = tokenBase; + break; + } + } else { + stream.skipToEnd(); + break; + } + } + return "comment"; + } + + function pushContext(stream, state, type) { + state.context = { + prev: state.context, + indent: stream.indentation(), + col: stream.column(), + type: type + }; + } + + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, context: null}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) + state.context.align = false; + } + if (stream.eatSpace()) return null; + + var style = state.tokenize(stream, state); + if (style == "comment") return style; + + if (state.context && state.context.align == null) + state.context.align = true; + + var tok = stream.current(); + if (tok == "(") + pushContext(stream, state, ")"); + else if (tok == "[") + pushContext(stream, state, "]"); + else if (state.context && state.context.type == tok) + popContext(state); + return style; + }, + + indent: function(state, textAfter) { + var cx = state.context; + if (!cx) return 0; + var closing = textAfter.charAt(0) == cx.type; + if (cx.align) return cx.col + (closing ? 0 : 1); + else return cx.indent + (closing ? 0 : config.indentUnit); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: support.commentSlashSlash ? "//" : support.commentHash ? "#" : null + }; +}); + +(function() { + "use strict"; + + // `identifier` + function hookIdentifier(stream) { + // MySQL/MariaDB identifiers + // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + var ch; + while ((ch = stream.next()) != null) { + if (ch == "`" && !stream.eat("`")) return "variable-2"; + } + return null; + } + + // variable token + function hookVar(stream) { + // variables + // @@prefix.varName @varName + // varName can be quoted with ` or ' or " + // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html + if (stream.eat("@")) { + stream.match(/^session\./); + stream.match(/^local\./); + stream.match(/^global\./); + } + + if (stream.eat("'")) { + stream.match(/^.*'/); + return "variable-2"; + } else if (stream.eat('"')) { + stream.match(/^.*"/); + return "variable-2"; + } else if (stream.eat("`")) { + stream.match(/^.*`/); + return "variable-2"; + } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { + return "variable-2"; + } + return null; + }; + + // short client keyword token + function hookClient(stream) { + // \N means NULL + // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html + if (stream.eat("N")) { + return "atom"; + } + // \g, etc + // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html + return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; + } + + // these keywords are used by all SQL dialects (however, a mode can still overwrite it) + var sqlKeywords = "alter and as asc between by count create delete desc distinct drop from having in insert into is join like not on or order select set table union update values where "; + + // turn a space-separated list into an array + function set(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + // A generic SQL Mode. It's not a standard, it just try to support what is generally supported + CodeMirror.defineMIME("text/x-sql", { + name: "sql", + keywords: set(sqlKeywords + "begin"), + builtin: set("bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") + }); + + CodeMirror.defineMIME("text/x-mssql", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered"), + builtin: set("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date datetimeoffset datetime2 smalldatetime datetime time"), + hooks: { + "@": hookVar + } + }); + + CodeMirror.defineMIME("text/x-mysql", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group groupby_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), + builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), + hooks: { + "@": hookVar, + "`": hookIdentifier, + "\\": hookClient + } + }); + + CodeMirror.defineMIME("text/x-mariadb", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), + builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), + hooks: { + "@": hookVar, + "`": hookIdentifier, + "\\": hookClient + } + }); + + // the query language used by Apache Cassandra is called CQL, but this mime type + // is called Cassandra to avoid confusion with Contextual Query Language + CodeMirror.defineMIME("text/x-cassandra", { + name: "sql", + client: { }, + keywords: set("use select from using consistency where limit first reversed first and in insert into values using consistency ttl update set delete truncate begin batch apply create keyspace with columnfamily primary key index on drop alter type add any one quorum all local_quorum each_quorum"), + builtin: set("ascii bigint blob boolean counter decimal double float int text timestamp uuid varchar varint"), + atoms: set("false true"), + operatorChars: /^[<>=]/, + dateSQL: { }, + support: set("commentSlashSlash decimallessFloat"), + hooks: { } + }); + + // this is based on Peter Raganitsch's 'plsql' mode + CodeMirror.defineMIME("text/x-plsql", { + name: "sql", + client: set("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"), + keywords: set("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"), + builtin: set("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least lenght lenghtb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"), + operatorChars: /^[*+\-%<>!=~]/, + dateSQL: set("date time timestamp"), + support: set("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber") + }); + + // Created to support specific hive keywords + CodeMirror.defineMIME("text/x-hive", { + name: "sql", + keywords: set("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external false fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger true unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with"), + builtin: set("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date timestamp"), + support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") + }); +}()); + +}); + +/* + How Properties of Mime Types are used by SQL Mode + ================================================= + + keywords: + A list of keywords you want to be highlighted. + functions: + A list of function names you want to be highlighted. + builtin: + A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). + operatorChars: + All characters that must be handled as operators. + client: + Commands parsed and executed by the client (not the server). + support: + A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. + * ODBCdotTable: .tableName + * zerolessFloat: .1 + * doubleQuote + * nCharCast: N'string' + * charsetCast: _utf8'string' + * commentHash: use # char for comments + * commentSlashSlash: use // for comments + * commentSpaceRequired: require a space after -- for comments + atoms: + Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: + UNKNOWN, INFINITY, UNDERFLOW, NaN... + dateSQL: + Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. +*/ diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/stex/stex.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/stex/stex.js new file mode 100644 index 0000000..f869b68 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/stex/stex.js @@ -0,0 +1,258 @@ +/* + * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de) + * Licence: MIT + */ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("stex", function() { + "use strict"; + + function pushCommand(state, command) { + state.cmdState.push(command); + } + + function peekCommand(state) { + if (state.cmdState.length > 0) { + return state.cmdState[state.cmdState.length - 1]; + } else { + return null; + } + } + + function popCommand(state) { + var plug = state.cmdState.pop(); + if (plug) { + plug.closeBracket(); + } + } + + // returns the non-default plugin closest to the end of the list + function getMostPowerful(state) { + var context = state.cmdState; + for (var i = context.length - 1; i >= 0; i--) { + var plug = context[i]; + if (plug.name == "DEFAULT") { + continue; + } + return plug; + } + return { styleIdentifier: function() { return null; } }; + } + + function addPluginPattern(pluginName, cmdStyle, styles) { + return function () { + this.name = pluginName; + this.bracketNo = 0; + this.style = cmdStyle; + this.styles = styles; + this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin + + this.styleIdentifier = function() { + return this.styles[this.bracketNo - 1] || null; + }; + this.openBracket = function() { + this.bracketNo++; + return "bracket"; + }; + this.closeBracket = function() {}; + }; + } + + var plugins = {}; + + plugins["importmodule"] = addPluginPattern("importmodule", "tag", ["string", "builtin"]); + plugins["documentclass"] = addPluginPattern("documentclass", "tag", ["", "atom"]); + plugins["usepackage"] = addPluginPattern("usepackage", "tag", ["atom"]); + plugins["begin"] = addPluginPattern("begin", "tag", ["atom"]); + plugins["end"] = addPluginPattern("end", "tag", ["atom"]); + + plugins["DEFAULT"] = function () { + this.name = "DEFAULT"; + this.style = "tag"; + + this.styleIdentifier = this.openBracket = this.closeBracket = function() {}; + }; + + function setState(state, f) { + state.f = f; + } + + // called when in a normal (no environment) context + function normal(source, state) { + var plug; + // Do we look like '\command' ? If so, attempt to apply the plugin 'command' + if (source.match(/^\\[a-zA-Z@]+/)) { + var cmdName = source.current().slice(1); + plug = plugins[cmdName] || plugins["DEFAULT"]; + plug = new plug(); + pushCommand(state, plug); + setState(state, beginParams); + return plug.style; + } + + // escape characters + if (source.match(/^\\[$&%#{}_]/)) { + return "tag"; + } + + // white space control characters + if (source.match(/^\\[,;!\/\\]/)) { + return "tag"; + } + + // find if we're starting various math modes + if (source.match("\\[")) { + setState(state, function(source, state){ return inMathMode(source, state, "\\]"); }); + return "keyword"; + } + if (source.match("$$")) { + setState(state, function(source, state){ return inMathMode(source, state, "$$"); }); + return "keyword"; + } + if (source.match("$")) { + setState(state, function(source, state){ return inMathMode(source, state, "$"); }); + return "keyword"; + } + + var ch = source.next(); + if (ch == "%") { + // special case: % at end of its own line; stay in same state + if (!source.eol()) { + setState(state, inCComment); + } + return "comment"; + } + else if (ch == '}' || ch == ']') { + plug = peekCommand(state); + if (plug) { + plug.closeBracket(ch); + setState(state, beginParams); + } else { + return "error"; + } + return "bracket"; + } else if (ch == '{' || ch == '[') { + plug = plugins["DEFAULT"]; + plug = new plug(); + pushCommand(state, plug); + return "bracket"; + } + else if (/\d/.test(ch)) { + source.eatWhile(/[\w.%]/); + return "atom"; + } + else { + source.eatWhile(/[\w\-_]/); + plug = getMostPowerful(state); + if (plug.name == 'begin') { + plug.argument = source.current(); + } + return plug.styleIdentifier(); + } + } + + function inCComment(source, state) { + source.skipToEnd(); + setState(state, normal); + return "comment"; + } + + function inMathMode(source, state, endModeSeq) { + if (source.eatSpace()) { + return null; + } + if (source.match(endModeSeq)) { + setState(state, normal); + return "keyword"; + } + if (source.match(/^\\[a-zA-Z@]+/)) { + return "tag"; + } + if (source.match(/^[a-zA-Z]+/)) { + return "variable-2"; + } + // escape characters + if (source.match(/^\\[$&%#{}_]/)) { + return "tag"; + } + // white space control characters + if (source.match(/^\\[,;!\/]/)) { + return "tag"; + } + // special math-mode characters + if (source.match(/^[\^_&]/)) { + return "tag"; + } + // non-special characters + if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) { + return null; + } + if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) { + return "number"; + } + var ch = source.next(); + if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") { + return "bracket"; + } + + // eat comments here, because inCComment returns us to normal state! + if (ch == "%") { + if (!source.eol()) { + source.skipToEnd(); + } + return "comment"; + } + return "error"; + } + + function beginParams(source, state) { + var ch = source.peek(), lastPlug; + if (ch == '{' || ch == '[') { + lastPlug = peekCommand(state); + lastPlug.openBracket(ch); + source.eat(ch); + setState(state, normal); + return "bracket"; + } + if (/[ \t\r]/.test(ch)) { + source.eat(ch); + return null; + } + setState(state, normal); + popCommand(state); + + return normal(source, state); + } + + return { + startState: function() { + return { + cmdState: [], + f: normal + }; + }, + copyState: function(s) { + return { + cmdState: s.cmdState.slice(), + f: s.f + }; + }, + token: function(stream, state) { + return state.f(stream, state); + } + }; +}); + +CodeMirror.defineMIME("text/x-stex", "stex"); +CodeMirror.defineMIME("text/x-latex", "stex"); + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/xml/xml.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/xml/xml.js new file mode 100644 index 0000000..f9f9147 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/codemirror/mode/xml/xml.js @@ -0,0 +1,349 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("xml", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var multilineTagIndentFactor = parserConfig.multilineTagIndentFactor || 1; + var multilineTagIndentPastTag = parserConfig.multilineTagIndentPastTag; + if (multilineTagIndentPastTag == null) multilineTagIndentPastTag = true; + + var Kludges = parserConfig.htmlMode ? { + autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, + 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, + 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, + 'track': true, 'wbr': true}, + implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, + 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, + 'th': true, 'tr': true}, + contextGrabbers: { + 'dd': {'dd': true, 'dt': true}, + 'dt': {'dd': true, 'dt': true}, + 'li': {'li': true}, + 'option': {'option': true, 'optgroup': true}, + 'optgroup': {'optgroup': true}, + 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, + 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, + 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, + 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, + 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, + 'rp': {'rp': true, 'rt': true}, + 'rt': {'rp': true, 'rt': true}, + 'tbody': {'tbody': true, 'tfoot': true}, + 'td': {'td': true, 'th': true}, + 'tfoot': {'tbody': true}, + 'th': {'td': true, 'th': true}, + 'thead': {'tbody': true, 'tfoot': true}, + 'tr': {'tr': true} + }, + doNotIndent: {"pre": true}, + allowUnquoted: true, + allowMissing: true, + caseFold: true + } : { + autoSelfClosers: {}, + implicitlyClosed: {}, + contextGrabbers: {}, + doNotIndent: {}, + allowUnquoted: false, + allowMissing: false, + caseFold: false + }; + var alignCDATA = parserConfig.alignCDATA; + + // Return variables for tokenizers + var tagName, type, setStyle; + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var ch = stream.next(); + if (ch == "<") { + if (stream.eat("!")) { + if (stream.eat("[")) { + if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); + else return null; + } else if (stream.match("--")) { + return chain(inBlock("comment", "-->")); + } else if (stream.match("DOCTYPE", true, true)) { + stream.eatWhile(/[\w\._\-]/); + return chain(doctype(1)); + } else { + return null; + } + } else if (stream.eat("?")) { + stream.eatWhile(/[\w\._\-]/); + state.tokenize = inBlock("meta", "?>"); + return "meta"; + } else { + var isClose = stream.eat("/"); + tagName = ""; + var c; + while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; + if (Kludges.caseFold) tagName = tagName.toLowerCase(); + if (!tagName) return "tag error"; + type = isClose ? "closeTag" : "openTag"; + state.tokenize = inTag; + return "tag"; + } + } else if (ch == "&") { + var ok; + if (stream.eat("#")) { + if (stream.eat("x")) { + ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); + } else { + ok = stream.eatWhile(/[\d]/) && stream.eat(";"); + } + } else { + ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); + } + return ok ? "atom" : "error"; + } else { + stream.eatWhile(/[^&<]/); + return null; + } + } + + function inTag(stream, state) { + var ch = stream.next(); + if (ch == ">" || (ch == "/" && stream.eat(">"))) { + state.tokenize = inText; + type = ch == ">" ? "endTag" : "selfcloseTag"; + return "tag"; + } else if (ch == "=") { + type = "equals"; + return null; + } else if (ch == "<") { + state.tokenize = inText; + state.state = baseState; + state.tagName = state.tagStart = null; + var next = state.tokenize(stream, state); + return next ? next + " error" : "error"; + } else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + state.stringStartCol = stream.column(); + return state.tokenize(stream, state); + } else { + stream.eatWhile(/[^\s\u00a0=<>\"\']/); + return "word"; + } + } + + function inAttribute(quote) { + var closure = function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inTag; + break; + } + } + return "string"; + }; + closure.isInAttribute = true; + return closure; + } + + function inBlock(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + return style; + }; + } + function doctype(depth) { + return function(stream, state) { + var ch; + while ((ch = stream.next()) != null) { + if (ch == "<") { + state.tokenize = doctype(depth + 1); + return state.tokenize(stream, state); + } else if (ch == ">") { + if (depth == 1) { + state.tokenize = inText; + break; + } else { + state.tokenize = doctype(depth - 1); + return state.tokenize(stream, state); + } + } + } + return "meta"; + }; + } + + function Context(state, tagName, startOfLine) { + this.prev = state.context; + this.tagName = tagName; + this.indent = state.indented; + this.startOfLine = startOfLine; + if (Kludges.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent)) + this.noIndent = true; + } + function popContext(state) { + if (state.context) state.context = state.context.prev; + } + function maybePopContext(state, nextTagName) { + var parentTagName; + while (true) { + if (!state.context) { + return; + } + parentTagName = state.context.tagName; + if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) || + !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { + return; + } + popContext(state); + } + } + + function baseState(type, stream, state) { + if (type == "openTag") { + state.tagName = tagName; + state.tagStart = stream.column(); + return attrState; + } else if (type == "closeTag") { + var err = false; + if (state.context) { + if (state.context.tagName != tagName) { + if (Kludges.implicitlyClosed.hasOwnProperty(state.context.tagName)) + popContext(state); + err = !state.context || state.context.tagName != tagName; + } + } else { + err = true; + } + if (err) setStyle = "error"; + return err ? closeStateErr : closeState; + } else { + return baseState; + } + } + + function closeState(type, _stream, state) { + if (type != "endTag") { + setStyle = "error"; + return closeState; + } + popContext(state); + return baseState; + } + function closeStateErr(type, stream, state) { + setStyle = "error"; + return closeState(type, stream, state); + } + + function attrState(type, _stream, state) { + if (type == "word") { + setStyle = "attribute"; + return attrEqState; + } else if (type == "endTag" || type == "selfcloseTag") { + var tagName = state.tagName, tagStart = state.tagStart; + state.tagName = state.tagStart = null; + if (type == "selfcloseTag" || + Kludges.autoSelfClosers.hasOwnProperty(tagName)) { + maybePopContext(state, tagName); + } else { + maybePopContext(state, tagName); + state.context = new Context(state, tagName, tagStart == state.indented); + } + return baseState; + } + setStyle = "error"; + return attrState; + } + function attrEqState(type, stream, state) { + if (type == "equals") return attrValueState; + if (!Kludges.allowMissing) setStyle = "error"; + return attrState(type, stream, state); + } + function attrValueState(type, stream, state) { + if (type == "string") return attrContinuedState; + if (type == "word" && Kludges.allowUnquoted) {setStyle = "string"; return attrState;} + setStyle = "error"; + return attrState(type, stream, state); + } + function attrContinuedState(type, stream, state) { + if (type == "string") return attrContinuedState; + return attrState(type, stream, state); + } + + return { + startState: function() { + return {tokenize: inText, + state: baseState, + indented: 0, + tagName: null, tagStart: null, + context: null}; + }, + + token: function(stream, state) { + if (!state.tagName && stream.sol()) + state.indented = stream.indentation(); + + if (stream.eatSpace()) return null; + tagName = type = null; + var style = state.tokenize(stream, state); + if ((style || type) && style != "comment") { + setStyle = null; + state.state = state.state(type || style, stream, state); + if (setStyle) + style = setStyle == "error" ? style + " error" : setStyle; + } + return style; + }, + + indent: function(state, textAfter, fullLine) { + var context = state.context; + // Indent multi-line strings (e.g. css). + if (state.tokenize.isInAttribute) { + return state.stringStartCol + 1; + } + if (context && context.noIndent) return CodeMirror.Pass; + if (state.tokenize != inTag && state.tokenize != inText) + return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; + // Indent the starts of attribute names. + if (state.tagName) { + if (multilineTagIndentPastTag) + return state.tagStart + state.tagName.length + 2; + else + return state.tagStart + indentUnit * multilineTagIndentFactor; + } + if (alignCDATA && /", + + configuration: parserConfig.htmlMode ? "html" : "xml", + helperType: parserConfig.htmlMode ? "html" : "xml" + }; +}); + +CodeMirror.defineMIME("text/xml", "xml"); +CodeMirror.defineMIME("application/xml", "xml"); +if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) + CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); + +}); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/plugin.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/plugin.js new file mode 100644 index 0000000..5191ab0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/plugin.js @@ -0,0 +1,270 @@ +/* + * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see license.txt or http://cksource.com/ckfinder/license + * + * The software, this file and its contents are subject to the CKFinder + * License. Please read the license.txt file before using, installing, copying, + * modifying or distribute this file or part of its contents. The contents of + * this file is part of the Source Code of CKFinder. + */ + +CKFinder.addPlugin( 'fileeditor', function( api ) +{ + var regexTextExt = /^(ascx|asp|aspx|c|cfc|cfm|cpp|cs|css|htm|html|inc|java|js|less|md|mysql|php|pl|py|rb|rst|sass|scss|sql|txt|xml|xsl|xslt)$/i, + regexCodeMirrorExt = /^(ascx|asp|aspx|c|cfc|cfm|cpp|cs|css|htm|html|java|js|less|md|mysql|php|pl|py|rb|rst|sass|scss|sql|xml|xsl)$/i, + codemirror, + file, + fileLoaded = false, + doc, + + codeMirrorPath = CKFinder.getPluginPath( 'fileeditor' ) + 'codemirror/', + codeMirrorModePath = codeMirrorPath + 'mode/', + + codeMirrorParsers = { + c: codeMirrorModePath + 'clike/clike.js', + css: codeMirrorModePath + 'css/css.js', + html: [ codeMirrorModePath + 'xml/xml.js', codeMirrorModePath + 'javascript/javascript.js', codeMirrorModePath + 'css/css.js', codeMirrorModePath + 'htmlmixed/htmlmixed.js' ], + js: codeMirrorModePath + 'javascript/javascript.js', + md: codeMirrorModePath + 'markdown/markdown.js', + php: [ codeMirrorModePath + 'xml/xml.js', codeMirrorModePath + 'javascript/javascript.js', codeMirrorModePath + 'css/css.js', codeMirrorModePath + 'clike/clike.js', codeMirrorModePath + 'php/php.js' ], + pl: codeMirrorModePath + 'perl/perl.js', + py: codeMirrorModePath + 'python/python.js', + rb: codeMirrorModePath + 'ruby/ruby.js', + rst: [ codeMirrorModePath + 'rst/rst.js', codeMirrorModePath + 'python/python.js', codeMirrorModePath + 'stex/stex.js', codeMirrorPath + 'addon/mode/overlay.js' ], + sql: codeMirrorModePath + 'sql/sql.js', + sass: codeMirrorModePath + 'sass/sass.js', + xml: codeMirrorModePath + 'xml/xml.js' + }; + codeMirrorParsers.ascx = codeMirrorParsers.html; + codeMirrorParsers.asp = codeMirrorParsers.html; + codeMirrorParsers.aspx = codeMirrorParsers.html; + codeMirrorParsers.cfm = codeMirrorParsers.html; + codeMirrorParsers.cfc = codeMirrorParsers.html; + codeMirrorParsers.less = codeMirrorParsers.css; + codeMirrorParsers.cpp = codeMirrorParsers.c; + codeMirrorParsers.cs = codeMirrorParsers.c; + codeMirrorParsers.htm = codeMirrorParsers.html; + codeMirrorParsers.java = codeMirrorParsers.c; + codeMirrorParsers.mysql = codeMirrorParsers.sql; + codeMirrorParsers.scss = codeMirrorParsers.css; + codeMirrorParsers.xsl = codeMirrorParsers.xml; + + var codeMirrorModes = { + ascx : 'htmlmixed', + asp : 'htmlmixed', + aspx : 'htmlmixed', + c : 'clike', + cpp : 'clike', + cs : 'clike', + cfc : 'htmlmixed', + cfm : 'htmlmixed', + htm : 'htmlmixed', + html : 'htmlmixed', + java : 'clike', + js : 'javascript', + less : 'css', + md : 'markdown', + mysql : 'sql', + php : 'php', + pl : 'perl', + py : 'python', + rb : 'ruby', + rst : 'rst', + sass : 'sass', + scss : 'css', + sql : 'sql', + xsl : 'xml' + }; + + CKFinder.dialog.add( 'fileEditor', function( api ) + { + var height, width, + saveButton = (function() + { + return { + id : 'save', + label : api.lang.Fileeditor.save, + type : 'button', + onClick : function ( evt ) + { + if ( !fileLoaded ) + return true; + + var dialog = evt.data.dialog, + content = codemirror ? codemirror.getValue() : doc.getById( 'fileContent' ).getValue(); + api.connector.sendCommandPost( 'SaveFile', null, { + content : content, + fileName : file.name + }, + function( xml ) + { + if ( xml.checkError() ) + return false; + + api.openMsgDialog( '', api.lang.Fileeditor.fileSaveSuccess ); + dialog.hide(); + return undefined; + }, + file.folder.type, + file.folder + ); + return false; + } + }; + })(); + + if ( api.inPopup ) + { + width = api.document.documentElement.offsetWidth; + height = api.document.documentElement.offsetHeight; + } + else + { + var parentWindow = ( api.document.parentWindow || api.document.defaultView ).parent; + width = parentWindow.innerWidth ? parentWindow.innerWidth : parentWindow.document.documentElement.clientWidth; + height = parentWindow.innerHeight ? parentWindow.innerHeight : parentWindow.document.documentElement.clientHeight; + } + + var cssWidth = parseInt( parseInt( width, 10 ) * 0.6 ), + cssHeight = parseInt( parseInt( height, 10 ) * 0.7 - 20 ); + + return { + title : api.getSelectedFile().name, + minWidth : parseInt( parseInt( width, 10 ) * 0.6 ), + minHeight : parseInt( parseInt( height, 10 ) * 0.7 ), + onHide : function() + { + if ( fileLoaded ) + { + var fileContent = doc.getById( 'fileContent' ); + if ( fileContent ) + fileContent.remove(); + } + }, + onShow : function() + { + var dialog = this; + + doc = dialog.getElement().getDocument(); + var win = doc.getWindow(); + doc.getById( 'fileArea' ).setHtml( '

      ' + api.lang.Fileeditor.loadingFile + '

      ' ); + + file = api.getSelectedFile(); + var enableCodeMirror = regexCodeMirrorExt.test( file.ext ); + this.setTitle( file.name ); + + if ( enableCodeMirror && win.$.CodeMirror === undefined ) { + doc.appendStyleSheet( codeMirrorPath + 'lib/codemirror.css' ); + } + + // If CKFinder is running under a different domain than baseUrl, then the following call will fail: + // CKFinder.ajax.load( file.getUrl() + '?t=' + (new Date().getTime()), function( data )... + + var url = api.connector.composeUrl( 'DownloadFile', { FileName : file.name, format : 'text', t : new Date().getTime() }, + file.folder.type, file.folder ); + + CKFinder.ajax.load( url, function( data ) + { + if ( data === null || ( file.size > 0 && data === '' ) ) + { + api.openMsgDialog( '', api.lang.Fileeditor.fileOpenError ); + dialog.hide(); + return; + } + else + fileLoaded = true; + + var fileArea = doc.getById( 'fileArea' ); + + fileArea.setStyle( 'height', '100%' ); + fileArea.setHtml( '' ); + + var fileContent = doc.getById( 'fileContent' ); + if ( CKFinder.env.chrome || CKFinder.env.opera ) { + fileContent.setHtml( CKFinder.tools.htmlEncode( data ) ); + } else { + fileContent.setText( data ); + } + + codemirror = null; + if ( enableCodeMirror ) + { + CKFinder.scriptLoader.load( codeMirrorPath + 'lib/codemirror.js', function() + { + CKFinder.scriptLoader.load( codeMirrorParsers[ file.ext ], function() + { + codemirror = win.$.CodeMirror.fromTextArea( doc.getById( 'fileContent' ).$, { mode : codeMirrorModes[ file.ext ] || file.ext } ); + var fileArea = doc.getById( 'fileArea' ); + + // TODO get rid of ugly buttons and provide something better + var undoB = doc.createElement( 'button', { attributes: { 'label' : api.lang.common.undo, 'class' : 'fileeditor-button' } } ); + undoB.on( 'click', function() + { + codemirror.undo(); + }); + undoB.setHtml( api.lang.common.undo ); + undoB.appendTo( fileArea ); + + var redoB = doc.createElement( 'button', { attributes: { 'label' : api.lang.common.redo, 'class' : 'fileeditor-button' } } ); + redoB.on( 'click', function() + { + codemirror.redo(); + }); + redoB.setHtml( api.lang.common.redo ); + redoB.appendTo( fileArea ); + }, this, false, doc.getHead(), doc ); + }, this, false, doc.getHead(), doc ); + } + }); + }, + contents : [ + { + id : 'tab1', + label : '', + title : '', + expand : true, + padding : 0, + elements : + [ + { + type : 'html', + id : 'htmlLoader', + html : '' + + '' + + '
      ' + } + ] + } + ], + // TODO http://dev.fckeditor.net/ticket/4750 + buttons : [ saveButton, CKFinder.dialog.cancelButton ] + }; + } ); + + api.addFileContextMenuOption( { label : api.lang.Fileeditor.contextMenuName, command : 'fileEditor' } , function( api, file ) + { + api.openDialog( 'fileEditor' ); + }, + function ( file ) + { + var maxSize = 1024; + + if ( typeof ( CKFinder.config.fileeditorMaxSize ) != 'undefined' ) + maxSize = CKFinder.config.fileeditorMaxSize; + + // Disable for images, binary files, large files etc. + if ( regexTextExt.test( file.ext ) && file.size <= maxSize ) + return file.folder.acl.fileDelete ? true : -1; + + return false; + }); +} ); diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/plugin.php b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/plugin.php new file mode 100644 index 0000000..486afff --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/fileeditor/plugin.php @@ -0,0 +1,101 @@ +_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $this->checkConnector(); + $this->checkRequest(); + + // Saving empty file is equal to deleting a file, that's why FILE_DELETE permissions are required + if (!$this->_currentFolder->checkAcl(CKFINDER_CONNECTOR_ACL_FILE_DELETE)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UNAUTHORIZED); + } + + if (!isset($_POST["fileName"])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_NAME); + } + if (!isset($_POST["content"])) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $fileName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding($_POST["fileName"]); + $resourceTypeInfo = $this->_currentFolder->getResourceTypeConfig(); + + if (!$resourceTypeInfo->checkExtension($fileName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_EXTENSION); + } + + if (!CKFinder_Connector_Utils_FileSystem::checkFileName($fileName) || $resourceTypeInfo->checkIsHiddenFile($fileName)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_INVALID_REQUEST); + } + + $filePath = CKFinder_Connector_Utils_FileSystem::combinePaths($this->_currentFolder->getServerPath(), $fileName); + + if (!file_exists($filePath) || !is_file($filePath)) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_FILE_NOT_FOUND); + } + + if (!is_writable(dirname($filePath))) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } + + $fp = @fopen($filePath, 'wb'); + if ($fp === false || !flock($fp, LOCK_EX)) { + $result = false; + } + else { + $result = fwrite($fp, $_POST["content"]); + flock($fp, LOCK_UN); + fclose($fp); + } + if ($result === false) { + $this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_ACCESS_DENIED); + } + } + + /** + * @access public + */ + function onBeforeExecuteCommand( &$command ) + { + if ( $command == 'SaveFile' ) + { + $this->sendResponse(); + return false; + } + + return true ; + } +} + +$CommandHandler_FileEditor = new CKFinder_Connector_CommandHandler_FileEditor(); +$config['Hooks']['BeforeExecuteCommand'][] = array($CommandHandler_FileEditor, "onBeforeExecuteCommand"); +$config['Plugins'][] = 'fileeditor'; diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/flashupload/Uploader.html b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/flashupload/Uploader.html new file mode 100644 index 0000000..f977fd7 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/flashupload/Uploader.html @@ -0,0 +1,146 @@ + + + + + + + + +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/flashupload/flash/Uploader.swf b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/flashupload/flash/Uploader.swf new file mode 100644 index 0000000000000000000000000000000000000000..536a3ad07033759515efdbad2a8b0ac50623abd5 GIT binary patch literal 260902 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 wZ;>bsl3P6EH! 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�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 FO#q`M9f1G< literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/controls.png b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/controls.png new file mode 100644 index 0000000000000000000000000000000000000000..dcfd6fb9f178454613123d018bf742c8cc905df7 GIT binary patch literal 2893 zcmV-T3$pZyP)_ZK9@9A5hhZ`zJ|^XJp&7A=Y=V7G`@Q^Xk=19M@a5{n88C2urGbw3uPN`H$U$)~*R zDGEm-Oe{b=fr%W&zPaoidK{8ZW&+R7$+5&?)ea32b3ErF@rofuL&nCyXl{)NO9?c& z5Ey{Uhey?FhDDCD(o(}6HC#(hR;g)@MC`aP{9?V42DhOydhL#M>}EP`9b!c^x2QOy zl`aYl$KiM$b82xQ48Xo-M;Wj`j>GZsIBd4V@8W?T$FAK`0i&1By^!d25J#Rod6E@u zbDTbNhJA*=q6g#0^7E;26cm-{cE&DUxDwEt*rWuKM!V(XG0kMn79Al8g`GaY*U zPcb))2!6aChtduaM~@zruKld;HR#w;N$y8w#t9g`ZwxUhn{_m)8#Zoa+qZAurc>{> z(wWnz+5gLzFK0#B%%h1{8*kO(fMDSfd4Xua^~Rw?s-Dsc2Nz>g(;?>JBav_nr;-X=cl`B@5o*7f)K+_H}g~MT0F|A*}o;F6q7%Lo@B8CTVXt+NF zIygA!sVh@M2)>X;L@*enBS#Li?QPq(QDb8x6IxweT}-pfk2lMK=KJZVpOOE+aN*y~ zGv?*xO$#5aa#U4SQ6LbIMO<218pEla=rF=z71DM1q~e#Z$y6*V)x$OE`dg$D@&v2^ zdhTetF+m_!JiO!Hy?fdAvSrJdC!8aB-QP-|L1gIBZ{4~zrsDZDv{4R-3xz`pO<7#J zYuB!6okXh~oTsLyhW1OX2g0G}pZ|gG4WPx52#y^)=9hj$OT$h*t#8A)SlTUBr$r=0T_cSXuSO zy)~b`5h~IUv47?7;DQ92Nwe^eJ3B>q-9K00<@A>-MNu32V zYQo~n9rcb;au{u<6XCGK4lD6%vg^x^bGm*Mf-h4-Yv35N%EONNn4i9N4U=f*8;hu1v z!A$Qb@Zbs9gNKJXgb>F@mEe!WC)#UwBC&}Rc6dl50V@-Nh>1tUju77`8A(Sl9;}vh zq_?-1m1J<(VTXq_6EHj?1Y;&42n0}GUT)Y^8cm*pXYxc2Gm{KX*x@0~1k5YlY(fw; z&o~ZitC1OD2m$&lBr$SQJ~Rxw$!MDV=bxbbqucEfSkNx%x5c{NDg8M_bM_ zvA%QaGM)dphkfRoQ$X`eAH>+jL!YkjKU8{yDOY=WDww&5LW zeZN!p8uU1<0#8sRL&P|T_ehZfJgum5inXGAE^YY63Oau3BI~KwH=UwShCgH9%`JX} zzUyB-ty832@2lj%NPq}^} z+|#`2ol*MrtIc%c+<$5JPoFi+p=Jke60{%?DhF;5*wKAU>hukKN*!9pZB1{_VO!7rad%iH0g+loSbYbo}EwSWks~=@dZ?vpDTa2_AATi zwb~bAyuDctggHOo=BK3V@fH>-b`M4)f=plRGzkVQls9y%Y#XRBepKX#q>*)(oPyd6V zrg(`>)HsxwU06V`{A9DLcoXILj(;^B+4tiZFK?3L8o3{i*pQOMCN?DmiQxeBR(&BX z(V9U^R$>#}bXuLzIEhX07r(Dt)2t$VsEg_(vl5$N6;?75g5W$_Fp@k)OT0#trx>wA zOS}f{Xd(B)v1@mH6apSge6b+STVQA{0V;iPpifQ+qPL36iKHVA*byXmzNyI2JCt23 zU_hA=1VX{oubKc*;gLJT2_-ghB6*5Uc3>jHZ7(`>bn+ynubSoSX?f2c!orING0TOC z0*tjn82m9HD~rIzcowiD=}408@Lo0R76GdXKr7yK!^^(;YiG5f^Lkl50doZ_d99WHFWm z`2{zujf-{za>PAd978JNY7Z)cbT)5ruP-ra%e~G}wTijXxbw&apdf>%tDnm{r-UW| DknJ7# literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderBottomLeft.png b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderBottomLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..2775eba899d10d3dc6f8c4044ad69cb89a5f8499 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw|3?!p1cPs@`>H$6>u0R?BQd3j6Z{H4KpFe*d zCJdtg|NlSbL?0`V#ZwaG7u>*5G5>gk!F7ua0ST$+oA`j@!JaOTAr*10r#A97C`hm- z3dKH%oOr{aLpj2LsW&>nlF|6W##ZJ(&Vq|N!)H`n4WCnOwE6XE$$JkZ%dBmlKK#!l q^N>YH$6>u0R?BQd3j6Z{H4KpFe*d zCJdtg|NlSbL?0`V#ZwaG7u>*5G5>gk!F7ua0ST$+oA`j@p`I>|Ar*0Rk8R{_P!M3f za60r>rSy%6n-)#V7EE~whgkX^aO5~8RysR6J&4z+ys8}98}g<84F4bXKSykNqt5CV sw|{E#ePx# literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderMiddleLeft.png b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderMiddleLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d63d156e008a01fde9d2d68c531c34926a924a GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{Z$P6U8=aokQDYgKg5LY1m|NsA`H|O64NtXoq z1vjjXi*^HYL_A#_Ln`7}8#ZzRc@9(l|2O5zVPsZ_d99WHFWm z`2{zujf-{za>PAd978JNY7Z)cbT)5ruP@Q*%6-Zwv5L7-WU|;#pdf>%tDnm{r-UW| Dg{~b` literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderTopLeft.png b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderTopLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d458b5bba4a8cb84b9ee39a3844e258c1dcc20 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw|3?!p1cPs@`>H$6>u0R?qNKH*WfByXT?c0H} z|NsBDZcF_MWbu>)`2{yHR2W1EWLV67bmi? zvo+on5)g6V?RfL6QIf literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderTopRight.png b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/ie6/borderTopRight.png new file mode 100644 index 0000000000000000000000000000000000000000..74b8583cfbb2e62a84ef04ba01064ecb4d70e72a GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw|3?!p1cPs@`>H$6>u0R?Sq^70<1<#*9zkU05 zAmji4|I_}5*Z^5PB|(0{4Ga|#78wHb4Xz)Tc+|OiK2SW!)5S5QBChw?MqY;mf#VnJ z^}ggWcLpW1DoZ@PeSjlp!DT5|UGpg|kLp?vt)3@$_tm@JIJ0M=)Av-}@ro0Ud)StJ qkbTcp`HhbYABf8t?|bZq*G4@Nf;!!};89ZJ6T-G@yGywoYi%4?- literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/loading.gif b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..b4695d811d4f84ed693eff7b5e6b4d61a3e8c48d GIT binary patch literal 9427 zcmb{2c~}$o+BfjYkbx{fLNXyN2~I-9fRL~W0YSqMAPQmvXc3WJ1&c@(6VN-G66{!m#Dz&KKu^y_lMYNSx+iL6S@to6V&NF~*-@fnlUXMN3lYjN{kB{H` zJHPuk6Sp8%7M6_w2=Fri{G0eK0q}qQ6Mu9M|N1`u%P;s)H-1oqA2;E5d+=93<3CK` z#|(Jq2l(X{{QIx*J;k^=2|tA4&mQAH|A_D3iubhP14r@F5d6Jx{6jh3yas$&IP=`6My*}-(7^Ct;HXY;7`Z#qk24xg=aGHLJ^+fh;NYKA2s3Mj^Ptu z;6FaYZyd)j?8Ljal__{%2i~$Cx1{2A8TgJoyfz)LUW&gh#MdBr zz6W0HgFm=||Fs`)%Exb=#T!=P>wWQS2k|@?ygmzG&BNPD@b*pkCnxbDFZ^&h{=q!_ zWF?+%5B%{b_%}Tk z)ktHy2%RxlI5%?6ZY$l%)y35jfZdMF$LOJQuo`5!xq7<<0wEFe!~iNDmRQ*CZa)6) z0GWrehsCg!=jkR4(xXzbtX4ETpjXdtu+U&WRP|3YXlu_B)iZZ=0#*{4B6KTmiGmnj zsbV4N=yD-QamiN_E; zVH?&r%TH4=`CvaO@re)|&d6egk9{2n%lVPd7of}(SV4M46aL@?LE0h(9W?Jl_KBI@ z-F~7hZ1jBTPv3t2$>t>FO^_-WY)duQCv|z9ndY=~Svu6Hr3d(F`3bw!v{nFdSgB1Q6VHd-c*2v7ZF{IUDRuWvJx*p|Z5ICc0 zU9HLoXRA#bkw5at2*g0eOp5TG8Vz>Xt$RXaKySuDSWD^f5vK87d0?b!)&Y(Lklp>S zy#DM5<`3iSo(CJ-I@{Z&N{aBfpEr;fm66DjO4mp=mt$?+3QEF$}ybSEVM3Iy1aWU;v3!lv8_ z(94N*wM%9t-?HD>a)R0~i6wDstS54=)@v(hfU8`dA#{$G9B$~1a-x=s!+qXe-}adL zfw5czHyZi?SlZ<6qtVKl=Ag{T4Z}~F(9YXfkNsPQ@_9(Jvt}nU(1P%gG6{=T*D_4H zn9}F@?Z8zHS44KwRKPu$dlVUtDAhh|DGz6p5;U_!Mg36vcSM{Bsf%UAQ2x(jrxz`8 zB%COz^WwIdX}PIID+nhjG)fESrRFcBwPUk0naeSL`XQ$_fWfywA(`&(g#Z$JC>EkQ z6gkN(T#wAR*ZKjDt}g2UWm;r$vPClAgPG$9Kz;?-+Q^l0!Q1GHuV(4vQWdwGVL<_8 zPX&a>l1QX#Fc5r!U4>x^n*#)DfSEC}dpgxAxf2ye!hD+mRtG%>U1&-X0oSYC+0K*m zHxSc!jMY7{(a^UjGfH(qw#?8^hvgyflU+}xDtI$L3>12&>>hT%nACJwk=+BZFp4ID zmQ{AZU?I0$4A`EMh^8=g7a~)#NW;@(_tv^M8aqAe9L={>Db>Ol0_knF>pMtuIYQI& zbKG3B_O$~HMdBK4mzz&+8$g$Aqf+b~r~txrbMXXdEboOp%i<7w2M;k2q*6x%OV%$7 zpKsxF6T>`a15nap%=3$I?l#GzFkgL0@!V{Th>gba_z#GoM|{jJ4)N-#ZU<&1XBmSCl1mtY_wwt8L-wWD7pAUqKed7V8ni;XY6EJobQXbvd z6@TvgPWc-pNHV*SW~rL#loGVfjCeUM@&ucW{0)0@5Dbwrwk<9cW3&<{)!S|K%p!GC zH9KRzvH$=boEDS-w9J*O*C$?@?HrRx1~z6n6$0}&-CDY_8cAN~7_uCIq$j}GRqKmm zVGF!w-OP)+xaYB=W+V#ZwLQOvS=Ci?m3YWNCV@mc@`o{bMGUOUS42fS8LN2yMUOj` z6lE-69TTs?ymO8-#T0~ zQDyd;Lwlc$^#C6Nl>A^?R<8q+FngF>ocpZh%p91MFjVS)v=tPcy+7Sa?-NhJHyJg^ z#>P@z=(#qq-i+9<&9#G?jI_@a%o{^8UvT87{IPi|D{P7@X##&WXU#HrM6hciM%{o1H zt*XLA8$$p^S#Ps})Rj@qOW@5G$E@?en5q8{5g`Gh-n?9Jj-fq<6ksF?Zky2=@x%o&X) za6X4=UkiZLLZW`qU<_2W+ts3*)viiQ)M9}QfE+n<;vgif)Wj{gOq1U~`Ed z5Y*+J>S&RRlLVm{y8$Y3_4dy^RE_Y)>3W6tJSN(BY0qOb&Ca7;y{cgwMoMS73+3Rlc2M$#Yn%LG zav37dp!h04w|xsl=-EmUC2nB1#Upj=i-QwYOHkBN7dK`*2O#@;ETML2ZbyaoI|jyY z7$TeP7!RC%t1))tHl&_JKQ$P;}FL2m^fs`BwgR0OTse zLO?(g=d@_1g)Ox~0cfLga~G1BqDo+%tb{_vVkrzr=ToFW^om6ZZb26LEinTVjYF*a zrJPQ}=e9(jkx=UK+zLsC_59@!UwpL1JTtoo5@MzwF`C7(6c8kCnU3Eo)afkBvuOT!DJsD{rvo!J<}{! zgNR;J$%_sO-DdLTI!0?j=^C09K`?07%oz|6tXP{n!y+PRumY}v3xG3Y(^ohgt>R6| z$TvFk0Nax*;xARpJ|uJ? z&vvr9xuuByQG45}A>DU#>(1RTw9F1ySJV>eSj=r%R{^!Rq}VO34CCAXbEk2`%@=M{g(h! zX{#8*+-1NxuSEL{IrC4pm*{EuDFRCQbZXEtFTJr70@hTbi+x4gOyq(JQ;vydoka3v`ibJezt624W}n(xkYxBFro!xj+t-ADrpv^ zU;03|-2I)9Cl*LDphtXXy&#b2a{12&luT~&9`~`(Z1X`iYcAhCGdB0q%5pgHAau^ZUy-{8F?>{UJ)>(^&{meh#`Qh=j9Iv+D>?~ z?vWE&^|mGtegG0FUgZcF(?WDEJ?#|~5z})HX~2NN8Ys}GzNF${!?FwsY_~|fX?79O z+?B7JyBU0=<|YCK)l|WuWLmw60N|A)bylbiAn%f5G^&EzSREWnDD6+O0ieLRFgvj& zsuKoK8?gjPBA)yXd#Yu-#B>ZfwsFuaV{aw0Q+h?W#;(MXUjs=V>X5~PCrxHhB$GWg zNXTTiS#Fn`*DdeaHjy&R%~b7g>{Ds&VrP@Avz7$KCwxNL$af!JH-tj%#)IxH>7rI$j*GvS_I4pw>Czy}#N+hil4dR;%&s zkq76B$&W&4n=*DAcLL0uM*Ksl(B zZJa?JBHHJHUKaImj{yo6i3W^QCUk|JhnG@rIw1~*-yb=?uPRD}Z-){dXAL&^JFXSi zZf@T#WW`a=>S9kRWKKay>^@%S=5o_p-;CU0` z(hlF{a+dVcagwIo&N4eSF#?Plv!$krBdp#nWATmqGlWJ~i49b91jsM#Y0K-GwSo&9 zG~>m8OD3`Cu^)_1t!&me9Wo+8Ae#|%EHFV@eFPmfpZpBS$x81`>42=Y4& zLuwOjC155CClo&4Oay332E>}0r)e(g(B@vEXzu9YQ@hO|0##1Zd?{T+^&K=G7JqIC z-5AZ~&NBb-q9Vx|ceZs_j}<@K+2&}w>Vol|kCzKb<4xy#RvPs7bM_(}3V2f|kmlY` z8NNrrYyfuyBw#$AEP3akxHN@+-z%Kv_B$;tt#`RAxLM!W;5AaLxz|ec4)o~8wm;FxkO-|aF@BeUCS`U2laXOa zL;2PwvGmj=41hL^8NbS~FCVOicxNx@rf$xr4uM2ypuJNtW=L*hBOfpkGDgN?zk-5$ z-(P-Vhzi65kHUn^m7PMSU*b+H*w-v5wjRHE|JwM1D~2eQlA1jMk{L6+!q=bpW`LI~ zP`S(<+Go3q!F4ZqS9_HX%$oPy1@IRoHal%#MSw3*dm9p5J5rY2m%7b={)cjw%HGa- z?!5a*`&hrS*`>j`v*+LvD^?ZYsaEA&zsaxAF(qTIwYEjAcA{s*DQJi4jW+w&b0wKV z5>3w)IE6GlR}336GKutCeCPyHFVKMzM#Ny9CBid#yEr*me8OmN)znx)@{c|xhHBJ! z%{&v`5Vv_oM#j^J|4#DyEB2yszCpgt699{LfCFq+9+(>7akW zfogy29EJ@K{N1LjS$x1kzeGI8I{@~j3k1%YPs)GA(M{r9|203|{pLdiPG9rcZ!djk zKrg*8P2<}Q%Q9_NuyG*N6qcj1@8`cXN$|VoB~$(!IRN;JHr5S#Cbu!zKS&? zO&-|l8Q;hO48g8fK#dzY#IUvWd8bYfCz4BC*ei`}0Qz=J1d?m5CFpiV>v|1r@SAV1 z>4E2%YH426l;ZP>MVM zdc@t)Zq{Rt@Ez|v^-lZa8zNjk z8fHHFG`1IwyWl2s{|+PVE3_r3YtL~brj=jJ5)QV-EP zXKrX;$L2P11HHTQHaiQ`Dx>Hg&E8ziMU~pawp^DvJt64mU=Z3k0+c_qLwM z+HSQuv&P}RV;iE?0mPl+*A8!fDEwa(Iv>g=dbxXt3C&tKhZSlPT_T%B-jR`WXH2}P z7|cWaasZ9}dymQ2 zl;Vv*VU21pCk}3ND;uj7M#FZH+&_Qpad`{%jz>g}HA-7&fJMOr>|`cnsuB;#T6@0T zWlPcfi^xL8h+i(%RW>GComR)Q>%6!ten-)tsN_GSXE#8LdVSClk>$|urE{)X{E>xz zktm%L0Q=%)B0Z=7ke(W}v+7#qY#0BxcNro1`3EM{W$q8_OrnbfkL$8!#X-+5wwa@w z3=P^NDiV*3!4VxjP?uWoG3XDBGj%$1@o6X0SD1ixCo7T#k{E2CC21=_Krzzpe{kmkwR&F8%4=f1IBGTu3r06fJb|oD{MlkLc0TrNzZu z!l=!Js#mRAx$f1^l{qB~#>@CK2_cu@4vj4#%UTge6_49x81p58@NS~^o zFy`s$2oVJ&S7k09oNgeQ`uJxp`N3)WraKOW@eO-bD{wsMg~T<8^F+cD&^(tH)*whkvv9hJGh7 z=QK`|*)AxnCwBaf)`KUQ)>%>q#o4{qGe;)3b)P?TX#Q=)w0vS$Z|3a=3Kq?uUbKiQ zYqe~M^tPQo_k7eWzHDL5jf`br;AwX6m1^07xhoe>zgU&cFFZ{=-Yrn@cChM8qp$m- zgaw(?S?V?*v8n&^_g9)k*u}nc0&SGm5vEdY6>76X-autGlc6T@PRe~jfx;k5Hl~Y8 zYm1n=)fT0!al?L{fHmSauT7=9RTe=dmkm*XxZ{?pkp`J&?79QsZ#R+FRnY4xv~xk; zp|)%rg#K0Nj3f(9z@&&Q%TI2l=2azCy>;QN9aWR6Egrt%taf&Ru#+oIE7X%FNyGe2XiOJ~^(EEihIMOWvOkrM&PH^?tlG>3DJ#_1HXGXkfHV969wl3h;rJ7JHeh-gNTvtor)e7uAp zvNv3so6GXzwJDWRF*Ys@{=+@J5eley06d`tAUA%3_qWgc#sst>54GW;?xsz&=w##8 zlJV$W-VXrH7zMa~Do(WYZrF>w^g)trpS`$U$iOT7D!w>xrT`cKdxqE`{ze+F!n`&Jt)3a9XdSEd0L4vg9{RkWc?l< zG5=(g#%*9S6MvXAqKK6u%6Y)1rLQbJY*?0v6!pqj5Ifv|HG!&uQ0sd{ESGC38K|uC|6Kk zGB-S~5wx57+M{%Cq*r5bx~sR(UU{crc4h8@qAkJEl10~!7q>s;6wwG+ x;Lym#%7w)E5SqaM?W?}pgPY2~zL+0j{rLCv$(}1!-+=Zpc)I$ztaD0e0s!7!I-dXl literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/overlay.png b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/images/overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..53ea98f7003cf014cda2f764a7d982e405bd1b5f GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^av;pY3?xs=ZJr3E3<7*YT>t<7&(6-y!NDOSA|fs> z4iv@@^0LaF09818x;TbZ%z1NeAuof1z|jlq0?ZV)A8h5lQLnD@Q>uGq<+3e(rH8NF wGFLG_IXT618W25kEc*C=-akH|?*IRp8MKNmPAJ`FsRUW)>FVdQ&MBb@0FX~HaR2}S literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/jquery.colorbox-min.js b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/jquery.colorbox-min.js new file mode 100644 index 0000000..2505178 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/ckfinder/plugins/gallery/colorbox/jquery.colorbox-min.js @@ -0,0 +1,7 @@ +/*! + Colorbox v1.4.27 - 2013-07-16 + jQuery lightbox and modal window plugin + (c) 2013 Jack Moore - http://www.jacklmoore.com/colorbox + license: http://www.opensource.org/licenses/mit-license.php + */ +(function(M,l,aa){var N={transition:"elastic",speed:300,fadeOut:300,width:false,initialWidth:"600",innerWidth:false,maxWidth:false,minWidth:false,height:false,initialHeight:"450",innerHeight:false,maxHeight:false,minHeight:false,scalePhotos:true,scrolling:true,inline:false,html:false,iframe:false,fastIframe:true,photo:false,href:false,title:false,rel:false,opacity:0.9,preloading:true,className:false,retinaImage:false,retinaUrl:false,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",open:false,returnFocus:true,trapFocus:true,reposition:true,loop:true,slideshow:false,slideshowAuto:true,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp)((#|\?).*)?$/i,onOpen:false,onLoad:false,onComplete:false,onCleanup:false,onClosed:false,overlayClose:true,escKey:true,arrowKey:true,top:false,bottom:false,left:false,right:false,fixed:false,data:undefined,closeButton:true},x="colorbox",V="cbox",r=V+"Element",Z=V+"_open",e=V+"_load",X=V+"_complete",v=V+"_cleanup",ag=V+"_closed",i=V+"_purge",T,al,am,d,K,p,b,S,c,ae,Q,k,h,o,u,ab,t,U,z,B,I=M(""),aj,an,m,g,a,w,L,n,D,ac,P,A,O,ai="div",ah,G=0,ad={},af;function J(ao,ar,aq){var ap=l.createElement(ao);if(ar){ap.id=V+ar}if(aq){ap.style.cssText=aq}return M(ap)}function s(){return aa.innerHeight?aa.innerHeight:M(aa).height()}function F(ap){var ao=c.length,aq=(L+ap)%ao;return(aq<0)?ao+aq:aq}function R(ao,ap){return Math.round((/%/.test(ao)?((ap==="x"?ae.width():s())/100):1)*parseInt(ao,10))}function C(ap,ao){return ap.photo||ap.photoRegex.test(ao)}function E(ap,ao){return ap.retinaUrl&&aa.devicePixelRatio>1?ao.replace(ap.photoRegex,ap.retinaSuffix):ao}function ak(ao){if("contains" in al[0]&&!al[0].contains(ao.target)){ao.stopPropagation();al.focus()}}function W(){var ao,ap=M.data(w,x);if(ap==null){aj=M.extend({},N);if(console&&console.log){console.log("Error: cboxElement missing settings object")}}else{aj=M.extend({},ap)}for(ao in aj){if(M.isFunction(aj[ao])&&ao.slice(0,2)!=="on"){aj[ao]=aj[ao].call(w)}}aj.rel=aj.rel||w.rel||M(w).data("rel")||"nofollow";aj.href=aj.href||M(w).attr("href");aj.title=aj.title||w.title;if(typeof aj.href==="string"){aj.href=M.trim(aj.href)}}function H(ao,ap){M(l).trigger(ao);I.trigger(ao);if(M.isFunction(ap)){ap.call(w)}}function y(){var ap,ar=V+"Slideshow_",at="click."+V,ao,av,au,aq;if(aj.slideshow&&c[1]){ao=function(){clearTimeout(ap)};av=function(){if(aj.loop||c[L+1]){ap=setTimeout(O.next,aj.slideshowSpeed)}};au=function(){ab.html(aj.slideshowStop).unbind(at).one(at,aq);I.bind(X,av).bind(e,ao).bind(v,aq);al.removeClass(ar+"off").addClass(ar+"on")};aq=function(){ao();I.unbind(X,av).unbind(e,ao).unbind(v,aq);ab.html(aj.slideshowStart).unbind(at).one(at,function(){O.next();au()});al.removeClass(ar+"on").addClass(ar+"off")};if(aj.slideshowAuto){au()}else{aq()}}else{al.removeClass(ar+"off "+ar+"on")}}function f(ao){if(!P){w=ao;W();c=M(w);L=0;if(aj.rel!=="nofollow"){c=M("."+r).filter(function(){var aq=M.data(this,x),ap;if(aq){ap=M(this).data("rel")||aq.rel||this.rel}return(ap===aj.rel)});L=c.index(w);if(L===-1){c=c.add(w);L=c.length-1}}T.css({opacity:parseFloat(aj.opacity),cursor:aj.overlayClose?"pointer":"auto",visibility:"visible"}).show();if(ah){al.add(T).removeClass(ah)}if(aj.className){al.add(T).addClass(aj.className)}ah=aj.className;if(aj.closeButton){z.html(aj.close).appendTo(d)}else{z.appendTo("
      ")}if(!D){D=ac=true;al.css({visibility:"hidden",display:"block"});Q=J(ai,"LoadedContent","width:0; height:0; overflow:hidden");d.css({width:"",height:""}).append(Q);an=K.height()+S.height()+d.outerHeight(true)-d.height();m=p.width()+b.width()+d.outerWidth(true)-d.width();g=Q.outerHeight(true);a=Q.outerWidth(true);aj.w=R(aj.initialWidth,"x");aj.h=R(aj.initialHeight,"y");O.position();y();H(Z,aj.onOpen);B.add(o).hide();al.focus();if(aj.trapFocus){if(l.addEventListener){l.addEventListener("focus",ak,true);I.one(ag,function(){l.removeEventListener("focus",ak,true)})}}if(aj.returnFocus){I.one(ag,function(){M(w).focus()})}}Y()}}function q(){if(!al&&l.body){af=false;ae=M(aa);al=J(ai).attr({id:x,"class":M.support.opacity===false?V+"IE":"",role:"dialog",tabindex:"-1"}).hide();T=J(ai,"Overlay").hide();h=M([J(ai,"LoadingOverlay")[0],J(ai,"LoadingGraphic")[0]]);am=J(ai,"Wrapper");d=J(ai,"Content").append(o=J(ai,"Title"),u=J(ai,"Current"),U=M('
      ';return{title:a.lang.flash.title,minWidth:420,minHeight:310,onShow:function(){this.fakeImage=this.objectNode=this.embedNode=null;k=new CKEDITOR.dom.element("embed",a.document);var e=this.getSelectedElement();if(e&&e.data("cke-real-element-type")&&"flash"==e.data("cke-real-element-type")){this.fakeImage= +e;var d=a.restoreRealElement(e),h=null,b=null,c={};if("cke:object"==d.getName()){h=d;d=h.getElementsByTag("embed","cke");0",a.document),e.setAttributes({classid:"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",codebase:"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"})),i)d=CKEDITOR.dom.element.createFromHtml("",a.document),d.setAttributes({type:"application/x-shockwave-flash",pluginspage:"http://www.macromedia.com/go/getflashplayer"}),e&&d.appendTo(e);if(e)for(var b={},c=e.getElementsByTag("param", +"cke"),f=0,j=c.count();f')};a.preview=a.getContentElement("info","preview").getElement().getChild(3);this.on("change",function(a){a.data&& +a.data.value&&b(a.data.value)});this.getInputElement().on("change",function(){b(this.getValue())},this)}},{type:"button",id:"browse",filebrowser:"info:src",hidden:!0,style:"display:inline-block;margin-top:14px;",label:a.lang.common.browseServer}]}]},{type:"hbox",widths:["25%","25%","25%","25%","25%"],children:[{type:"text",id:"width",requiredContent:"embed[width]",style:"width:95px",label:a.lang.common.width,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1", +a.lang.common.width)),setup:b,commit:c},{type:"text",id:"height",requiredContent:"embed[height]",style:"width:95px",label:a.lang.common.height,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1",a.lang.common.height)),setup:b,commit:c},{type:"text",id:"hSpace",requiredContent:"embed[hspace]",style:"width:95px",label:a.lang.flash.hSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateHSpace),setup:b,commit:c},{type:"text",id:"vSpace",requiredContent:"embed[vspace]", +style:"width:95px",label:a.lang.flash.vSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateVSpace),setup:b,commit:c}]},{type:"vbox",children:[{type:"html",id:"preview",style:"width:95%;",html:f}]}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:a.lang.common.upload,elements:[{type:"file",id:"upload",label:a.lang.common.upload,size:38},{type:"fileButton",id:"uploadButton",label:a.lang.common.uploadSubmit,filebrowser:"info:src","for":["Upload","upload"]}]},{id:"properties", +label:a.lang.flash.propertiesTab,elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"scale",type:"select",requiredContent:"embed[scale]",label:a.lang.flash.scale,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.scaleAll,"showall"],[a.lang.flash.scaleNoBorder,"noborder"],[a.lang.flash.scaleFit,"exactfit"]],setup:b,commit:c},{id:"allowScriptAccess",type:"select",requiredContent:"embed[allowscriptaccess]",label:a.lang.flash.access,"default":"",style:"width : 100%;", +items:[[a.lang.common.notSet,""],[a.lang.flash.accessAlways,"always"],[a.lang.flash.accessSameDomain,"samedomain"],[a.lang.flash.accessNever,"never"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"wmode",type:"select",requiredContent:"embed[wmode]",label:a.lang.flash.windowMode,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.windowModeWindow,"window"],[a.lang.flash.windowModeOpaque,"opaque"],[a.lang.flash.windowModeTransparent,"transparent"]], +setup:b,commit:c},{id:"quality",type:"select",requiredContent:"embed[quality]",label:a.lang.flash.quality,"default":"high",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.qualityBest,"best"],[a.lang.flash.qualityHigh,"high"],[a.lang.flash.qualityAutoHigh,"autohigh"],[a.lang.flash.qualityMedium,"medium"],[a.lang.flash.qualityAutoLow,"autolow"],[a.lang.flash.qualityLow,"low"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"align",type:"select",requiredContent:"object[align]", +label:a.lang.common.align,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.flash.alignAbsBottom,"absBottom"],[a.lang.flash.alignAbsMiddle,"absMiddle"],[a.lang.flash.alignBaseline,"baseline"],[a.lang.common.alignBottom,"bottom"],[a.lang.common.alignMiddle,"middle"],[a.lang.common.alignRight,"right"],[a.lang.flash.alignTextTop,"textTop"],[a.lang.common.alignTop,"top"]],setup:b,commit:function(a,b,f,g,i){var j=this.getValue();c.apply(this,arguments); +j&&(i.align=j)}},{type:"html",html:"
      "}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(a.lang.flash.flashvars),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"menu",label:a.lang.flash.chkMenu,"default":!0,setup:b,commit:c},{type:"checkbox",id:"play",label:a.lang.flash.chkPlay,"default":!0,setup:b,commit:c},{type:"checkbox",id:"loop",label:a.lang.flash.chkLoop,"default":!0,setup:b,commit:c},{type:"checkbox",id:"allowFullScreen",label:a.lang.flash.chkFull,"default":!0, +setup:b,commit:c}]}]}]},{id:"advanced",label:a.lang.common.advancedTab,elements:[{type:"hbox",children:[{type:"text",id:"id",requiredContent:"object[id]",label:a.lang.common.id,setup:b,commit:c}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",id:"bgcolor",requiredContent:"embed[bgcolor]",label:a.lang.flash.bgcolor,setup:b,commit:c},{type:"text",id:"class",requiredContent:"embed(cke-xyz)",label:a.lang.common.cssClass,setup:b,commit:c}]},{type:"text",id:"style",requiredContent:"embed{cke-xyz}", +validate:CKEDITOR.dialog.validate.inlineStyle(a.lang.common.invalidInlineStyle),label:a.lang.common.cssStyle,setup:b,commit:c}]}]}})})(); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/flash/images/placeholder.png b/php/pic_switch_demo/static/ckeditor/plugins/flash/images/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc6caa7a6abca57d3f1e1376fbd5067d5cd66d0 GIT binary patch literal 256 zcmV+b0ssDqP)4p_Nnh8Sn%0^H2yKmXs_)2F ztJy_}S7x3Wy+9bua($h3aU$x8vL^9#zi)q&hjjO!f8h;)*e}{WeFK#M0000",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked")}}]}]}}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/form.js b/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/form.js new file mode 100644 index 0000000..8626718 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/form.js @@ -0,0 +1,8 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("form",function(a){var d={action:1,id:1,method:1,enctype:1,target:1};return{title:a.lang.forms.form.title,minWidth:350,minHeight:200,onShow:function(){delete this.form;var b=this.getParentEditor().elementPath().contains("form",1);b&&(this.form=b,this.setupContent(b))},onOk:function(){var b,a=this.form,c=!a;c&&(b=this.getParentEditor(),a=b.document.createElement("form"),a.appendBogus());c&&b.insertElement(a);this.commitContent(a)},onLoad:function(){function a(b){this.setValue(b.getAttribute(this.id)|| +"")}function e(a){this.getValue()?a.setAttribute(this.id,this.getValue()):a.removeAttribute(this.id)}this.foreach(function(c){d[c.id]&&(c.setup=a,c.commit=e)})},contents:[{id:"info",label:a.lang.forms.form.title,title:a.lang.forms.form.title,elements:[{id:"txtName",type:"text",label:a.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name", +!1),a.removeAttribute("name"))}},{id:"action",type:"text",label:a.lang.forms.form.action,"default":"",accessKey:"T"},{type:"hbox",widths:["45%","55%"],children:[{id:"id",type:"text",label:a.lang.common.id,"default":"",accessKey:"I"},{id:"enctype",type:"select",label:a.lang.forms.form.encoding,style:"width:100%",accessKey:"E","default":"",items:[[""],["text/plain"],["multipart/form-data"],["application/x-www-form-urlencoded"]]}]},{type:"hbox",widths:["45%","55%"],children:[{id:"target",type:"select", +label:a.lang.common.target,style:"width:100%",accessKey:"M","default":"",items:[[a.lang.common.notSet,""],[a.lang.common.targetNew,"_blank"],[a.lang.common.targetTop,"_top"],[a.lang.common.targetSelf,"_self"],[a.lang.common.targetParent,"_parent"]]},{id:"method",type:"select",label:a.lang.forms.form.method,accessKey:"M","default":"GET",items:[["GET","get"],["POST","post"]]}]}]}]}}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/hiddenfield.js b/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/hiddenfield.js new file mode 100644 index 0000000..f4699b7 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/hiddenfield.js @@ -0,0 +1,8 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("hiddenfield",function(d){return{title:d.lang.forms.hidden.title,hiddenField:null,minWidth:350,minHeight:110,onShow:function(){delete this.hiddenField;var a=this.getParentEditor(),b=a.getSelection(),c=b.getSelectedElement();c&&(c.data("cke-real-element-type")&&"hiddenfield"==c.data("cke-real-element-type"))&&(this.hiddenField=c,c=a.restoreRealElement(this.hiddenField),this.setupContent(c),b.selectElement(this.hiddenField))},onOk:function(){var a=this.getValueOf("info","_cke_saved_name"); +this.getValueOf("info","value");var b=this.getParentEditor(),a=CKEDITOR.env.ie&&!(8<=CKEDITOR.document.$.documentMode)?b.document.createElement(''):b.document.createElement("input");a.setAttribute("type","hidden");this.commitContent(a);a=b.createFakeElement(a,"cke_hidden","hiddenfield");this.hiddenField?(a.replace(this.hiddenField),b.getSelection().selectElement(a)):b.insertElement(a);return!0},contents:[{id:"info",label:d.lang.forms.hidden.title,title:d.lang.forms.hidden.title, +elements:[{id:"_cke_saved_name",type:"text",label:d.lang.forms.hidden.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.setAttribute("name",this.getValue()):a.removeAttribute("name")}},{id:"value",type:"text",label:d.lang.forms.hidden.value,"default":"",accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){this.getValue()?a.setAttribute("value",this.getValue()): +a.removeAttribute("value")}}]}]}}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/radio.js b/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/radio.js new file mode 100644 index 0000000..1af693e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/radio.js @@ -0,0 +1,8 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("radio",function(d){return{title:d.lang.forms.checkboxAndRadio.radioTitle,minWidth:350,minHeight:140,onShow:function(){delete this.radioButton;var a=this.getParentEditor().getSelection().getSelectedElement();a&&("input"==a.getName()&&"radio"==a.getAttribute("type"))&&(this.radioButton=a,this.setupContent(a))},onOk:function(){var a,b=this.radioButton,c=!b;c&&(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","radio"));c&&a.insertElement(b);this.commitContent({element:b})}, +contents:[{id:"info",label:d.lang.forms.checkboxAndRadio.radioTitle,title:d.lang.forms.checkboxAndRadio.radioTitle,elements:[{id:"name",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:d.lang.forms.checkboxAndRadio.value,"default":"", +accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){a=a.element;this.getValue()?a.setAttribute("value",this.getValue()):a.removeAttribute("value")}},{id:"checked",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"",accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(CKEDITOR.env.ie){var c=b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked")}}]}]}}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/select.js b/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/select.js new file mode 100644 index 0000000..a6c50e2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/forms/dialogs/select.js @@ -0,0 +1,20 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("select",function(c){function h(a,b,e,d,c){a=f(a);d=d?d.createElement("OPTION"):document.createElement("OPTION");if(a&&d&&"option"==d.getName())CKEDITOR.env.ie?(isNaN(parseInt(c,10))?a.$.options.add(d.$):a.$.options.add(d.$,c),d.$.innerHTML=0c?0:c).insertBeforeMe(d):a.append(d),d.setText(0b)return!1;a=a.getChild(b);a.setText(e);a.setValue(d);return a}function k(a){for(a=f(a);a.getChild(0)&&a.getChild(0).remove(););}function j(a,b,e){var a=f(a),d=g(a);if(0>d)return!1;b=d+b;b=0>b?0:b;b=b>=a.getChildCount()?a.getChildCount()-1:b;if(d==b)return!1;var d=a.getChild(d),c=d.getText(),o=d.getValue();d.remove();d=h(a,c,o,!e?null:e,b);i(a,b);return d}function g(a){return(a=f(a))?a.$.selectedIndex:-1} +function i(a,b){a=f(a);if(0>b)return null;var e=a.getChildren().count();a.$.selectedIndex=b>=e?e-1:b;return a}function l(a){return(a=f(a))?a.getChildren():!1}function f(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}return{title:c.lang.forms.select.title,minWidth:CKEDITOR.env.ie?460:395,minHeight:CKEDITOR.env.ie?320:300,onShow:function(){delete this.selectBox;this.setupContent("clear");var a=this.getParentEditor().getSelection().getSelectedElement();if(a&&"select"==a.getName()){this.selectBox= +a;this.setupContent(a.getName(),a);for(var a=l(a),b=0;b"+CKEDITOR.tools.htmlEncode(c.lang.forms.select.lines)+""}]},{type:"html",html:""+CKEDITOR.tools.htmlEncode(c.lang.forms.select.opAvail)+""},{type:"hbox",widths:["115px", +"115px","100px"],children:[{type:"vbox",children:[{id:"txtOptName",type:"text",label:c.lang.forms.select.opText,style:"width:115px",setup:function(a){"clear"==a&&this.setValue("")}},{type:"select",id:"cmbName",label:"",title:"",size:5,style:"width:115px;height:75px",items:[],onChange:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbValue"),e=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue"),d=g(this);i(b,d);e.setValue(this.getValue());a.setValue(b.getValue())}, +setup:function(a,b){"clear"==a?k(this):"option"==a&&h(this,b.getText(),b.getText(),this.getDialog().getParentEditor().document)},commit:function(a){var b=this.getDialog(),e=l(this),d=l(b.getContentElement("info","cmbValue")),c=b.getContentElement("info","txtValue").getValue();k(a);for(var f=0;f',b.document),c.copyAttributes(d,{type:1}),d.replace(c),a.element=d)}else c.setAttribute("type",this.getValue())}}]}]}}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/forms/images/hiddenfield.gif b/php/pic_switch_demo/static/ckeditor/plugins/forms/images/hiddenfield.gif new file mode 100644 index 0000000000000000000000000000000000000000..953f643b60032c36ac92590950577c336f133512 GIT binary patch literal 105 zcmZ?wbhEHb6lM@&n8?8JABg_{Z)j*>U|`SzVg`^n1Cx_W&+?fM`5zlEy44+e;LbT+ zkH8h7N-kQ@I;_|Q}>&=&Wsxvt_U!{00zr0#2QD@sN HCI)K&$9F25 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/icons.png b/php/pic_switch_demo/static/ckeditor/plugins/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec992d9220ecaf92dd8b8f462ad43b0eaef2f8a GIT binary patch literal 20833 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/icons_hidpi.png b/php/pic_switch_demo/static/ckeditor/plugins/icons_hidpi.png new file mode 100644 index 0000000000000000000000000000000000000000..6e103c05f11690fe3f9fd56dbd67205b58d7e90d GIT binary patch literal 67753 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 z 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/iframe/dialogs/iframe.js b/php/pic_switch_demo/static/ckeditor/plugins/iframe/dialogs/iframe.js new file mode 100644 index 0000000..dba1e93 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/iframe/dialogs/iframe.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){function c(b){var c=this instanceof CKEDITOR.ui.dialog.checkbox;b.hasAttribute(this.id)&&(b=b.getAttribute(this.id),c?this.setValue(e[this.id]["true"]==b.toLowerCase()):this.setValue(b))}function d(b){var c=""===this.getValue(),a=this instanceof CKEDITOR.ui.dialog.checkbox,d=this.getValue();c?b.removeAttribute(this.att||this.id):a?b.setAttribute(this.id,e[this.id][d]):b.setAttribute(this.att||this.id,d)}var e={scrolling:{"true":"yes","false":"no"},frameborder:{"true":"1","false":"0"}}; +CKEDITOR.dialog.add("iframe",function(b){var f=b.lang.iframe,a=b.lang.common,e=b.plugins.dialogadvtab;return{title:f.title,minWidth:350,minHeight:260,onShow:function(){this.fakeImage=this.iframeNode=null;var a=this.getSelectedElement();a&&(a.data("cke-real-element-type")&&"iframe"==a.data("cke-real-element-type"))&&(this.fakeImage=a,this.iframeNode=a=b.restoreRealElement(a),this.setupContent(a))},onOk:function(){var a;a=this.fakeImage?this.iframeNode:new CKEDITOR.dom.element("iframe");var c={},d= +{};this.commitContent(a,c,d);a=b.createFakeElement(a,"cke_iframe","iframe",!0);a.setAttributes(d);a.setStyles(c);this.fakeImage?(a.replace(this.fakeImage),b.getSelection().selectElement(a)):b.insertElement(a)},contents:[{id:"info",label:a.generalTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{id:"src",type:"text",label:a.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(f.noUrl),setup:c,commit:d}]},{type:"hbox",children:[{id:"width",type:"text",requiredContent:"iframe[width]", +style:"width:100%",labelLayout:"vertical",label:a.width,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.width)),setup:c,commit:d},{id:"height",type:"text",requiredContent:"iframe[height]",style:"width:100%",labelLayout:"vertical",label:a.height,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.height)),setup:c,commit:d},{id:"align",type:"select",requiredContent:"iframe[align]","default":"",items:[[a.notSet,""],[a.alignLeft,"left"],[a.alignRight, +"right"],[a.alignTop,"top"],[a.alignMiddle,"middle"],[a.alignBottom,"bottom"]],style:"width:100%",labelLayout:"vertical",label:a.align,setup:function(a,b){c.apply(this,arguments);if(b){var d=b.getAttribute("align");this.setValue(d&&d.toLowerCase()||"")}},commit:function(a,b,c){d.apply(this,arguments);this.getValue()&&(c.align=this.getValue())}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"scrolling",type:"checkbox",requiredContent:"iframe[scrolling]",label:f.scrolling,setup:c,commit:d},{id:"frameborder", +type:"checkbox",requiredContent:"iframe[frameborder]",label:f.border,setup:c,commit:d}]},{type:"hbox",widths:["50%","50%"],children:[{id:"name",type:"text",requiredContent:"iframe[name]",label:a.name,setup:c,commit:d},{id:"title",type:"text",requiredContent:"iframe[title]",label:a.advisoryTitle,setup:c,commit:d}]},{id:"longdesc",type:"text",requiredContent:"iframe[longdesc]",label:a.longDescr,setup:c,commit:d}]},e&&e.createAdvancedTab(b,{id:1,classes:1,styles:1},"iframe")]}})})(); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/iframe/images/placeholder.png b/php/pic_switch_demo/static/ckeditor/plugins/iframe/images/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..4af09565523acc4a8416b138be66ecca52a4782b GIT binary patch literal 265 zcmV+k0rvihP)XkV883J!H|K$G7!NmbG+#X$bL;o)Z z2G-x)N-|gt|HAb}?!Vz{?gSsK(*G1M`2U|Un|r|=kl~yoK0@(G'+c.lang.image.lockRatio+''+c.lang.image.resetSize+"

      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 O0IFr6S*_vl=YIeILP+QU literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_expand.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_expand.png new file mode 100644 index 0000000000000000000000000000000000000000..8060b3ec604c48f1ca78182c1c68426adcf6a6ea GIT binary patch literal 438 zcmV;n0ZIOeP)#K z00960pO=n%&(B~vHF^5UdH>I!pPvB#|IgOz*JP;Ijmg&lUYh!-R{HCj*2#Hf006RH z06B!Y0034w0021vF=PNSjWqzW>(~10xc~q$WB^vygfZ5rRsc15IW<;fH2?r!R*f|= zWL^L{gqn?nG1lvv@bK{e|Nmjt1#JKT0P{&iK~!ko?UmUMf-n$8I|vkLq3j}x`}+Ss z=oAVnK@$QRA2@BGnFLO5GffGZ_%fCRerCJgY+KWRf?tc;+Oz9yaFnAJ>R$(0C@2n%k{&6M9kOGnGm)~#b1t;tn2QUYvvI@*P)t-s|NsB` z>(>AP0RR7=myUbS&tU)CkpIu0|F&kIp8x=6w*UXn+W-Im|F*XO|2jI5X14zT0A^+Y z0Fc}NI*{A8W&r>H+c^LL+mJf{?Z=Qh0O{)LIW>8loW}qFI_>}e`pJ0!I*@;Vf7a{Q zW&mcrz`)ts+SbW=W&k?J?f=``kU9W50A8AqIy!%{+SAq5oPU4+|Lr-1xyPKGrmL&l zwr0r7%m4q{vR(kPf3jq#*ZQbdoX73(@bCaNc>rc+jWqyfI*>Y$kbi%ivVVVnoX6Iv zR@$5oSd?zeKD$L;^x^Z5Su`Teo6t!4lK1olZpK~!ko?VD+H+cpq}DYzDCnvy6}v?w#a6icy^ z)N0biah1v+wv`L5jZ_QV-MrAMzB@IRagDA@{h_ z{U;exVU`C_(mc>6coLr~izv-Aua9hz`pkw=IO`|kEXkpj@ipf^vPJq2!qM1Ic*0(G zvMP_KXnZ+LGPopO8XeD^YV@(>Y|=}$e^NnTC#k)No-f24bI=?mv)dUDcV1XD=br<(P#^Ypp!;V(~bpMDEeCs%dykUF-# zlIzcn6Z9u-$~A8=E*gRe`*s`%lM}*I7<9O*_V#a zBtbI&2p%>5Sptvxnu&ji=i>7h?DH*1$ng9admRfal?Gcw}Aq3B5y&hG`qx4st(_fP3$a->j@(|Q{a7z~tM=Id?>)!CkdylLKtQ*rW_L!B z9M^#^i+p?^^#BGhMLmA%Yj$S`ciJHdresH!lTx|JX|y#Ui_khSF`g?Pb{LE^szJgP`JDkP{9jIPlo|j zz;y6r>R&Y8TU7kw1uu-n_C1IG`=Mfg{x9_}{qy01`j=ia^)F+_O0j288*EP)klSVe003sTkUBbM0A}!tg0|a`+yC3PW&k<>I{&t2khYN9|F-$WzB)Q) zW;y`Sfo}4Thh_je`Kg%bmXwg&+tY@1*ol1Kj)w4*jqjqK`Lm>EI*_lgoAarp^sb=$ zx~}-Xy!+0_IyySGW;!~MwwRcIY(X13e5wr2O8joY?n^RB1G#kTv}*8i8o%m4rY0d!JMQvg8b*k%9# z1prAzK~#9!?VJgB+C~t7*;*$Ef)E17pvWe{7uev~j_vx0b2UkmCQaJ(zW@J^=m~X08Ow$n$`TK!*&Y#9M$_T2`Fk-h~->`^QwWlcRcWtsD zDE);KyZ!0cW+)Z_Rn`sIK6KU{D{R^j4jLmuyqYie46EFKU^bt$%%%;i!3|s8Z16_f z{Rd4uYbYadG`+hFoked$(-9%?YIKhrs^Sp04UfGVf6#^du)!OZX;x+qRo^SaZcP&y z0_SA)$IzFp!$z4y(c5Z=g_J!NFSACg*Y3tNP{e(%mw8HuKku#W{o<%(zuTEWiGH4j zVvV$Xpz5s#?GHHC>MfrHJVV?zjno<(aS$)q`&{?AqEROwDA>MHZ$a-7y3?@Dn+7K2 zG;vMy8SAG84^xFdfcs}UZK~oAR^;d|q zG{VJqU)a`^!fE>2hBdKyX@s|t=uefx0Tg#V0VRxZ@leozO5xxSTyN5S!U*wp@?Y9AXS`||_zAbx$idSu|0II_PI3O?6|ibMQfxagE;ww>f-ba)!! zm@m$ygrXLcw1^GO{=-QDpimLu8$-#Jc^!|I_3Qx3Ab}r=6jwi&b|!??Y<8f;*O4ul z98My|q>-)5hSIz!xLt$l$#tPbAqXmWE)^U857Q)Rb^wa2ANT|l2s(1VXQ>uU4vk1o ziFG^7i-b|$AX3^?SW^W6B#C1`BP98nd0z)+H{ECFczqOS3@1M0b3GOF6x(} z;_#D2!soiNK=n%j^`}oxR+-y@$AM%~XR0V!%0vB9O+H=Q<8lDf0K;>)?Wq!9KI)eO zs{6z5ZKYSN=%}d@Uq0%Wri$erI|@pQ(QKk;s(xvppp7QG4>G|gUUWm5t6#c$pQzE& zL}c^RRf#Vj^~1{yLLn4FAyn2-x3heXP?%E)^*@E$IzK-v7}VC~yZ8SbUF^)wUUaUi zW#$L9)%*77@UZu8v@<_@F$$G4+!Pcr9lkvnj}MM6h6&Sj7Z0`n{&0M-3CpYAaDJMu zm=QaX+3Y96#z1ZLdI#%ldG&TQn3=t}ye%ZQD`nQpej;of)X{j8zqYdb&0scC9U-ym z%Z*z06JcYZ&U%{@sQzqD$uBjkFE?scdjUCh_Sg826~63``m;x$lvwrUMlbt`uyKjL z(%aqTP>%-l=P5ZOR>^Gk6Jg_^b}oABoN1?DoHP3H{L%jI`o3Z+#${$W99>?H`u&1k zkOzYa5)NGu3ZZg_`n8BZ%k!p)KVVdP{IXa-_4M-Z(!cJ%&%T%z|f002ovPDHLk FV1lDhM2Y|a literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_moved_from_basket.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_moved_from_basket.png new file mode 100644 index 0000000000000000000000000000000000000000..d99cc8a0cefd0cad09bed75d24bb345abb15985b GIT binary patch literal 2869 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 b=>q=)4VW`Y44GTm00000NkvXXu0mjfNv^o? literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_rename.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_rename.png new file mode 100644 index 0000000000000000000000000000000000000000..40b2c50fbb1187f0389608af2b3f50c7ed5c5ea8 GIT binary patch literal 4353 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_select.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_folder_select.png new file mode 100644 index 0000000000000000000000000000000000000000..df365c94f78706c26ae930018beb0ba05202ff03 GIT binary patch literal 1216 zcmV;x1V8(UP)(>AP0RR7=&(C20&!7L>ke{Cb|Nqb1|NlBVkpH%3|NpkO|Nj7Hwg3QT0094H005BN z|7N!TmyUb3W&k>n+d2RM|Nq;NIsiE}>;M2d`pN9ukU9W5kk;$h*2(N<06Jy>X4~74 z0AA%f06LI5I@`8pIRO7Tgx>J*@Bn6JvR?mWsMq?a^4tHm05$A7I%Z}%0A@OnjWz$) zsPg*j-Z=pHWB~GJW&k>nwvdoIwvakzwzk%U_;k1Wjmg)t>(|NR`ugkT^Z5Su`Tep4 zABX?|1F1jff#&VhpZL4j^}vv^jdD>D~1F|9`2gUCEYwr0sMp zsZ%|e5Zf?(Jgwx%n&AHHkHB$#54^m*{#+50nr>+aCNpIZJS+By|2kscc)(f2?H%xQ zZ>}J&U`H+y`36h*e;H#RXZ)Fi1>YANLzKfFOGHGLyW~bph@kaoB@VAg-Pa*Pp zI7uoHBRs&JiqXRq;pi`aMfpK;Gl=x=oM=75Hz!(zi#ZPW3Lav7YEI=q18-tRlNnfk z@VGZeL|Kqni&S-DRK=$eV~^Eqq85uuoK+ElPDO-$0B4aKFa+S*qV=|^KmGWre zqI`v+T9nm~W7c|hA(&#IiMzv<+sn(#%Yb^$%OiG&IOJk3BMzSgo16U&<}TuJgM?lV zao6%ZNs^1@?!oT98;F~wgqKT!wsZ!uUno=&(Z%Z|IqBWqf~hVbhH&dMIndAcIU*nG z%d6{?-nTbjTyQb0yZ9=>syqiP?YkJ_t%fMj0P@Pdi(!+C2d_Wh-ClhH(8~+Uh~!}y z_8X^5?~>Q1O~kMu4DB!A4=vp!L`)iG@dU^;`K03!%^)_4@}kS%XJlS?VWTLi)#g@5zD-&Bi_u|(;1&A)3<4PQKR$zc5Oy$ zd9me1+mGiK*F`-qwp>K-exZ3tdS3JmPA{8T$LGaP^5O!|##$t^8PHnuqDzPkc~Ky) z%7i$81R2{#RPy42pNC~yq=X0|qWhfqOBchMi0i&x?deX^|451BiNF z6o{A>DIr=%tmZ{R6lpP|%Cw32J9*KGrTc-rXk9)pdilKgALK>7DWYVt$xG9*tR*kv z$+;2Hd~$5bi`*+UE<$*Wv1J0=rhgFFk{9_;Xw|qlK0{9EklA!mOFDd@)wsA2KU=MS zr?HtAp`ob7#SeKv9Y%XDR`MbZu@V<=4(HTiw1im6i?rxW^tc$UM-lym+Wd6!dC})Z eFE1~zztK-n;$tIG3%w-(0000TiVlFZah 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%0A?l;GmCES9=i^JFh`~sI0lZ)&OYW*LgWxr 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_menu_arrows.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_menu_arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..a60c75238b9a59a325d29df8ab1ec45deb3bd7ed GIT binary patch literal 14125 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_resize_lock.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_resize_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..70cfc0b55499a0d3c164d7ace77c1411afc0e7bb GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PI@8&4O8BYdj#6QGjXZ| P&0+9#^>bP0l+XkKz?UK& literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_resize_reset.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_resize_reset.png new file mode 100644 index 0000000000000000000000000000000000000000..20562523ce010bbd7fc1e1bae620732f416167ea GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-t3?!qQvP6NDXn;?ME0A8WUL71}0T0VT)_E)L!3HEN&baUbDQiy`$B>F!$q5eZyuAMpO6W6a zB_t{E|M}k^-o(24DX#$Qj54z;hiCd^=%u72WE@fIT*Ay25uh3n%fZ01R+MGiTTxG- OF$|urelF{r5}E*42Or`9 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_settings.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..b716f75336fc2f62c2681e702fe5b3acac8ad033 GIT binary patch literal 9614 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_status_empty.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_status_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..fcbc63e54a6e0a6d3c84ebd89d16640de89cbf9d GIT binary patch literal 531 zcmeAS@N?(olHy`uVBq!ia0vp^yMb7pgBeIBygHcxr0N2ELR=p_cyRgh6T85kG?JY5_^ zGVZ;-@v^8{L4YBlsYzpzr;7XJEiWg2srWDcW}TAnvajjwIlFs|g$~Z_KikwbvNjHj3 zZ*iyonA`BS{)pet-JPGlYdx)Px@nzg{igfk*3WTTw{M>N7OyqmQC7S$P*d0s7-bBe Lu6{1-oD!M!?b4^WzNrKNjX;ZTy2<^&1ooV z(pze@mY>WhXStrOtQjPkz(d8?(#palO~|k4a_{|}bIJ-epUtb?ZV35Em3PCW6!U=f62#kOLdO z6i^T-jzJLu;0po(3IO5AMNxnt05Whpa&QzDAoO}YfINc22m+_@;o)IN45cWBU^uKr zQ25~B;Ly+zaL625SPO$<=rOnuhjA!T0v;T;L%_aBk~A8PhUr%}02Zfk!w>S)P2-j1 zv4Ox<1(H!wV`Db2`oUJI@@enYoMC%wWpvk4{pW%e%zEJ(kHfPIV>sO@lKFRlFK{zo z8`@#jPw=EU(Y^MqZg-zG&8Oy1u;z-o&D&a*S<|}DwdqD*{2t*H=hwzw&QC4EliO6f>(s5(n&;dbhPwEM+Dj%*PQ?Yg zqAp;}{mMt_bBRo8%>I~J_UcIw>!q}b=5EL)4zP z8dI&#w`BjWmW52KZniUMZ_1a7Q)3a$xouNkWHXSHjchM>QEa-Asq>HDqE7KzQYMte ztU4DwTjBq0r&rDEF!s@`i=l>u3&AZuN(~vb>v)qV{pnu%$N@r zmGtMdK;zMtQ)ruxzQIf$M;E?l_P2&np5h2}=lznOS$`(G@|1RYX_XkTt3=(dMf~yR z{%dd8VYgMjX=jhjF+$XyS__@s7E?kN)So`eKlM+m=?rn1y*Ht-*rP;Nk^cwr{*Wy1 q`RPg~mNY5bH@}f?pk0Aq#LXC>jb_DZ1J|4-OhJFaUY;qksYr9?XxrfB*i$`B6aDojZ5#-o4Af z5M{(*6a}P!(5SA?$S5kxD5|b*{=qt+aX=k6Z{ECh>(bpc+!Z93ED R9szoZ!PC{xWt~$(695{Qw#oni literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_toolbar.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..1d56325de19ab59670b0fa5d94886d93ad61b0b8 GIT binary patch literal 2248 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 A!2kdN literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_upload_10.png b/php/pic_switch_demo/static/ckeditor/ckfinder/help/files/images/CKFinder_upload_10.png new file mode 100644 index 0000000000000000000000000000000000000000..bdc8610eb8819a3196d5bb4ec130f660b167bdd8 GIT binary patch literal 7123 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 + + + CKFinder vartotojo instrukcija + + + + + +

      + Lähetä ehdotuksesi dokumentaation kehittämiseksi. + Parannamme mielellämme sovelluksiamme ja niiden käyttöohjeita.

      + Siéntase libre de para enviarnos sus sugerencias acerca de esta documentación. Estamos siempre dispuestos a mejorarla, para ofrecerle un mejor software cada dia.

      + Sientase libre de para enviarnos sus sugerencias acerca de esta documentación. Estamos siempre dispuestos a mejorarla, para ofrecerle siempre un mejor software cada dia.

      "}]},{type:"vbox",padding:1,children:[{type:"text",id:"txtBorder",requiredContent:"img{border-width}", +width:"60px",label:c.lang.image.border,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateBorder),setup:function(a,b){if(a==f){var d;d=(d=(d=b.getStyle("border-width"))&&d.match(/^(\d+px)(?: \1 \1 \1)?$/))&&parseInt(d[1],10);isNaN(parseInt(d,10))&&(d=b.getAttribute("border"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&& +this.isChanged()&&b.removeStyle("border"):(b.setStyle("border-width",CKEDITOR.tools.cssLength(c)),b.setStyle("border-style","solid")),!d&&a==f&&b.removeAttribute("border")):8==a&&(b.removeAttribute("border"),b.removeStyle("border-width"),b.removeStyle("border-style"),b.removeStyle("border-color"))}},{type:"text",id:"txtHSpace",requiredContent:"img{margin-left,margin-right}",width:"60px",label:c.lang.image.hSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this, +"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateHSpace),setup:function(a,b){if(a==f){var d,c;d=b.getStyle("margin-left");c=b.getStyle("margin-right");d=d&&d.match(o);c=c&&c.match(o);d=parseInt(d,10);c=parseInt(c,10);d=d==c&&d;isNaN(parseInt(d,10))&&(d=b.getAttribute("hspace"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&&this.isChanged()&&(b.removeStyle("margin-left"),b.removeStyle("margin-right")): +(b.setStyle("margin-left",CKEDITOR.tools.cssLength(c)),b.setStyle("margin-right",CKEDITOR.tools.cssLength(c))),!d&&a==f&&b.removeAttribute("hspace")):8==a&&(b.removeAttribute("hspace"),b.removeStyle("margin-left"),b.removeStyle("margin-right"))}},{type:"text",id:"txtVSpace",requiredContent:"img{margin-top,margin-bottom}",width:"60px",label:c.lang.image.vSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateVSpace), +setup:function(a,b){if(a==f){var c,e;c=b.getStyle("margin-top");e=b.getStyle("margin-bottom");c=c&&c.match(o);e=e&&e.match(o);c=parseInt(c,10);e=parseInt(e,10);c=c==e&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute("vspace"));this.setValue(c)}},commit:function(a,b,c){var e=parseInt(this.getValue(),10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-top"),b.removeStyle("margin-bottom")):(b.setStyle("margin-top",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-bottom",CKEDITOR.tools.cssLength(e))), +!c&&a==f&&b.removeAttribute("vspace")):8==a&&(b.removeAttribute("vspace"),b.removeStyle("margin-top"),b.removeStyle("margin-bottom"))}},{id:"cmbAlign",requiredContent:"img{float}",type:"select",widths:["35%","65%"],style:"width:90px",label:c.lang.common.align,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.alignLeft,"left"],[c.lang.common.alignRight,"right"]],onChange:function(){g(this.getDialog());i.call(this,"advanced:txtdlgGenStyle")},setup:function(a,b){if(a==f){var c=b.getStyle("float"); +switch(c){case "inherit":case "none":c=""}!c&&(c=(b.getAttribute("align")||"").toLowerCase());this.setValue(c)}},commit:function(a,b,c){var e=this.getValue();if(a==f||4==a){if(e?b.setStyle("float",e):b.removeStyle("float"),!c&&a==f)switch(e=(b.getAttribute("align")||"").toLowerCase(),e){case "left":case "right":b.removeAttribute("align")}}else 8==a&&b.removeStyle("float")}}]}]},{type:"vbox",height:"250px",children:[{type:"html",id:"htmlPreview",style:"width:95%;",html:"
      "+CKEDITOR.tools.htmlEncode(c.lang.common.preview)+ +'
      '+(c.config.image_previewText||"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.")+ +"
      "}]}]}]},{id:"Link",requiredContent:"a[href]",label:c.lang.image.linkTab,padding:0,elements:[{id:"txtUrl",type:"text",label:c.lang.common.url,style:"width: 100%","default":"",setup:function(a,b){if(2==a){var c=b.data("cke-saved-href");c||(c=b.getAttribute("href"));this.setValue(c)}},commit:function(a,b){if(2==a&&(this.getValue()||this.isChanged())){var d=this.getValue();b.data("cke-saved-href",d);b.setAttribute("href",d);if(this.getValue()||!c.config.image_removeLinkByEmptyURL)this.getDialog().addLink= +!0}}},{type:"button",id:"browse",filebrowser:{action:"Browse",target:"Link:txtUrl",url:c.config.filebrowserImageBrowseLinkUrl},style:"float:right",hidden:!0,label:c.lang.common.browseServer},{id:"cmbTarget",type:"select",requiredContent:"a[target]",label:c.lang.common.target,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.targetNew,"_blank"],[c.lang.common.targetTop,"_top"],[c.lang.common.targetSelf,"_self"],[c.lang.common.targetParent,"_parent"]],setup:function(a,b){2==a&&this.setValue(b.getAttribute("target")|| +"")},commit:function(a,b){2==a&&(this.getValue()||this.isChanged())&&b.setAttribute("target",this.getValue())}}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:c.lang.image.upload,elements:[{type:"file",id:"upload",label:c.lang.image.btnUpload,style:"height:40px",size:38},{type:"fileButton",id:"uploadButton",filebrowser:"info:txtUrl",label:c.lang.image.btnUpload,"for":["Upload","upload"]}]},{id:"advanced",label:c.lang.common.advancedTab,elements:[{type:"hbox",widths:["50%","25%","25%"], +children:[{type:"text",id:"linkId",requiredContent:"img[id]",label:c.lang.common.id,setup:function(a,b){a==f&&this.setValue(b.getAttribute("id"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("id",this.getValue())}},{id:"cmbLangDir",type:"select",requiredContent:"img[dir]",style:"width : 100px;",label:c.lang.common.langDir,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.langDirLtr,"ltr"],[c.lang.common.langDirRtl,"rtl"]],setup:function(a,b){a==f&&this.setValue(b.getAttribute("dir"))}, +commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("dir",this.getValue())}},{type:"text",id:"txtLangCode",requiredContent:"img[lang]",label:c.lang.common.langCode,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("lang"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("lang",this.getValue())}}]},{type:"text",id:"txtGenLongDescr",requiredContent:"img[longdesc]",label:c.lang.common.longDescr,setup:function(a,b){a==f&&this.setValue(b.getAttribute("longDesc"))}, +commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("longDesc",this.getValue())}},{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"txtGenClass",requiredContent:"img(cke-xyz)",label:c.lang.common.cssClass,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("class"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("class",this.getValue())}},{type:"text",id:"txtGenTitle",requiredContent:"img[title]",label:c.lang.common.advisoryTitle, +"default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("title"))},commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("title",this.getValue()):4==a?b.setAttribute("title",this.getValue()):8==a&&b.removeAttribute("title")}}]},{type:"text",id:"txtdlgGenStyle",requiredContent:"img{cke-xyz}",label:c.lang.common.cssStyle,validate:CKEDITOR.dialog.validate.inlineStyle(c.lang.common.invalidInlineStyle),"default":"",setup:function(a, +b){if(a==f){var c=b.getAttribute("style");!c&&b.$.style.cssText&&(c=b.$.style.cssText);this.setValue(c);var e=b.$.style.height,c=b.$.style.width,e=(e?e:"").match(k),c=(c?c:"").match(k);this.attributesInStyle={height:!!e,width:!!c}}},onChange:function(){i.call(this,"info:cmbFloat info:cmbAlign info:txtVSpace info:txtHSpace info:txtBorder info:txtWidth info:txtHeight".split(" "));g(this)},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("style",this.getValue())}}]}]}}; +CKEDITOR.dialog.add("image",function(c){return r(c,"image")});CKEDITOR.dialog.add("imagebutton",function(c){return r(c,"imagebutton")})})(); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/image/images/noimage.png b/php/pic_switch_demo/static/ckeditor/plugins/image/images/noimage.png new file mode 100644 index 0000000000000000000000000000000000000000..159811305af7fc78662a53949f9c62bd702785af GIT binary patch literal 2115 zcmV-J2)y@+P)Ho>++t$jfPmRaN!?~<++bkXLqpg`M%qnH+*(@WuCC*= zv+nTj+f!5FhKAvZiQ<}?-*EHQt|a&q5ubK|eC;+&k} zgoNRWitg>}4K<ekfk+}q{E#Me7J>(bHOVPWE?rr?K%;Dm(Xm6h64Q}6Nb*FHY!#>MR6-{6IX-+X-I z%F5>4+~J3Z;f00e!NKCVxZ<&~;;O3SqN3ugtl@%!iP1e z;;ydZ#KhvOtLC({;-aGCtgP(Y+2*ma)hMx z+uH5p;oyjf;E9RksHoz~%Hqq*FIou1*CnBt3z=eoJ#jg8})n&6C#;Ej#qx3}JMbKrV7tBO*{xtyZfK3kwUxgN0tN*J@X6OH7P%ba6R|MjaCq zA3fCS^trNaG^w6x&h;0X}?rKOdWz!A`Z9|xkD8K>f`UV#Y?778OHBSXx=QYf4d zoK}L{Q!~*TtJJk6Fh&?D5QJPX2q1&OfL$*X3k0A6uYHxe2KBE^0~AtRv$6lS_4Mtw zjmdb8w%ey$-|jzKQydZk_OE`ld4h0VagD&R{(3`^$bu@IvWz|F(np;w+L$1T|t*mx13G3-F40Aw`c@9 zL2Z;#D6&TC32e8>&v@;sZF2I)mdogy^|n{%#!lK$`8FOL+{->kqn*o!Q&9ZdT8hya zJJ)vob|e5rp^%1ahwoV6vbpfmrNU;DyYo|7C5b{g9~)~xp8^}MtSyt#I%b%psG&iG zJBt||G?}cda+pLp|0#Mv83t8ePNQkM%(Af1?7Hn1&|J&A%4#b~576<-vaWL11-=d% zjn3E4Bu&oGSEtcv9DHfzU9xYFqYbj3X$xMyvzk620x(KK`!SZ(ByE*QR@b!~_Z6C8;XY$~ zUEONQDrvnAqx;eCz@ACxt*$HG6s>%H00x>89eAybjwzilk+fp83w8hb?EbuE^JAhJ z4EY}FF(BrSQGb)G7>tXRo_^U^P?TAn+Y1rHE_ zni#6(xk`Dp*RS@tv%k3M@Zn7t&6_X1D#9_UszMSrI*i%%e-j6MXo5XJ>^opYKB$zvO6U3O$0= z3qz|IC~Lr`ua^};XHRw(6BB$8(H!zg5bq|pvFFeuV5s|YG-%VelSQAyCZv#&k664V zAt7N4cG)c!6Me{hf)g7X>XnP+d$Dm&DP%HHygT2`jc3lyEx$laRFL^?xRj&toe^}W zHa;0GEXa4`dHDM?hdMhuhnW8UJfP3tD98k-IT0*xQ~{2_R}dFsjM>TMT3T{AmK;ki zcZli18~1!6BBy|?LIZR*fvg}FjN^S6;&M40&uLiiJvkf>m&x=PS74Iv$cEj9I}aw8 z3u^H!bBh8Q6YMezoAmY&mQ&3gCl6I1WNV$>{I@G?DfCd0dk^LaeL t9L{?@PmZPK&CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a",attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement(),d=b&&b.data("cke-realelement"),e=d?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b):CKEDITOR.plugins.link.getSelectedLink(c); +e&&(this._.selectedElement=e,this.setValueOf("info","txtName",e.data("cke-saved-name")||""),!d&&a.selectElement(e),b&&(this._.selectedElement=b));this.getContentElement("info","txtName").focus()},contents:[{id:"info",label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return!this.getValue()?(alert(c.lang.link.anchor.errorName),!1):!0}}]}]}}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/link/dialogs/link.js b/php/pic_switch_demo/static/ckeditor/plugins/link/dialogs/link.js new file mode 100644 index 0000000..312fb7b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/link/dialogs/link.js @@ -0,0 +1,26 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){CKEDITOR.dialog.add("link",function(g){var l=CKEDITOR.plugins.link,m=function(){var a=this.getDialog(),b=a.getContentElement("target","popupFeatures"),a=a.getContentElement("target","linkTargetName"),k=this.getValue();if(b&&a)switch(b=b.getElement(),b.hide(),a.setValue(""),k){case "frame":a.setLabel(g.lang.link.targetFrameName);a.getElement().show();break;case "popup":b.show();a.setLabel(g.lang.link.targetPopupName);a.getElement().show();break;default:a.setValue(k),a.getElement().hide()}}, +f=function(a){a.target&&this.setValue(a.target[this.id]||"")},h=function(a){a.advanced&&this.setValue(a.advanced[this.id]||"")},i=function(a){a.target||(a.target={});a.target[this.id]=this.getValue()||""},j=function(a){a.advanced||(a.advanced={});a.advanced[this.id]=this.getValue()||""},c=g.lang.common,b=g.lang.link,d;return{title:b.title,minWidth:350,minHeight:230,contents:[{id:"info",label:b.info,title:b.info,elements:[{id:"linkType",type:"select",label:b.type,"default":"url",items:[[b.toUrl,"url"], +[b.toAnchor,"anchor"],[b.toEmail,"email"]],onChange:function(){var a=this.getDialog(),b=["urlOptions","anchorOptions","emailOptions"],k=this.getValue(),e=a.definition.getContents("upload"),e=e&&e.hidden;"url"==k?(g.config.linkShowTargetTab&&a.showPage("target"),e||a.showPage("upload")):(a.hidePage("target"),e||a.hidePage("upload"));for(e=0;e'+CKEDITOR.tools.htmlEncode(b.noAnchors)+"",focus:!0,setup:function(){this.getElement()[d&&d.length?"hide":"show"]()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}},{type:"vbox",id:"emailOptions",padding:1,children:[{type:"text",id:"emailAddress", +label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return!a.getContentElement("info","linkType")||"email"!=a.getValueOf("info","linkType")?!0:CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.select()},commit:function(a){a.email||(a.email={});a.email.address=this.getValue()}},{type:"text",id:"emailSubject",label:b.emailSubject, +setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){a.email||(a.email={});a.email.subject=this.getValue()}},{type:"textarea",id:"emailBody",label:b.emailBody,rows:3,"default":"",setup:function(a){a.email&&this.setValue(a.email.body)},commit:function(a){a.email||(a.email={});a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}}]},{id:"target",requiredContent:"a[target]",label:b.target,title:b.target, +elements:[{type:"hbox",widths:["50%","50%"],children:[{type:"select",id:"linkTargetType",label:c.target,"default":"notSet",style:"width : 100%;",items:[[c.notSet,"notSet"],[b.targetFrame,"frame"],[b.targetPopup,"popup"],[c.targetNew,"_blank"],[c.targetTop,"_top"],[c.targetSelf,"_self"],[c.targetParent,"_parent"]],onChange:m,setup:function(a){a.target&&this.setValue(a.target.type||"notSet");m.call(this)},commit:function(a){a.target||(a.target={});a.target.type=this.getValue()}},{type:"text",id:"linkTargetName", +label:b.targetFrameName,"default":"",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){a.target||(a.target={});a.target.name=this.getValue().replace(/\W/gi,"")}}]},{type:"vbox",width:"100%",align:"center",padding:2,id:"popupFeatures",children:[{type:"fieldset",label:b.popupFeatures,children:[{type:"hbox",children:[{type:"checkbox",id:"resizable",label:b.popupResizable,setup:f,commit:i},{type:"checkbox",id:"status",label:b.popupStatusBar,setup:f,commit:i}]},{type:"hbox", +children:[{type:"checkbox",id:"location",label:b.popupLocationBar,setup:f,commit:i},{type:"checkbox",id:"toolbar",label:b.popupToolbar,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"menubar",label:b.popupMenuBar,setup:f,commit:i},{type:"checkbox",id:"fullscreen",label:b.popupFullScreen,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"scrollbars",label:b.popupScrollBars,setup:f,commit:i},{type:"checkbox",id:"dependent",label:b.popupDependent,setup:f,commit:i}]},{type:"hbox", +children:[{type:"text",widths:["50%","50%"],labelLayout:"horizontal",label:c.width,id:"width",setup:f,commit:i},{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:b.popupLeft,id:"left",setup:f,commit:i}]},{type:"hbox",children:[{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:c.height,id:"height",setup:f,commit:i},{type:"text",labelLayout:"horizontal",label:b.popupTop,widths:["50%","50%"],id:"top",setup:f,commit:i}]}]}]}]},{id:"upload",label:b.upload,title:b.upload,hidden:!0, +filebrowser:"uploadButton",elements:[{type:"file",id:"upload",label:c.upload,style:"height:40px",size:29},{type:"fileButton",id:"uploadButton",label:c.uploadSubmit,filebrowser:"info:url","for":["upload","upload"]}]},{id:"advanced",label:b.advanced,title:b.advanced,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",id:"advId",requiredContent:"a[id]",label:b.id,setup:h,commit:j},{type:"select",id:"advLangDir",requiredContent:"a[dir]",label:b.langDir, +"default":"",style:"width:110px",items:[[c.notSet,""],[b.langDirLTR,"ltr"],[b.langDirRTL,"rtl"]],setup:h,commit:j},{type:"text",id:"advAccessKey",requiredContent:"a[accesskey]",width:"80px",label:b.acccessKey,maxLength:1,setup:h,commit:j}]},{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",label:b.name,id:"advName",requiredContent:"a[name]",setup:h,commit:j},{type:"text",label:b.langCode,id:"advLangCode",requiredContent:"a[lang]",width:"110px","default":"",setup:h,commit:j},{type:"text", +label:b.tabIndex,id:"advTabIndex",requiredContent:"a[tabindex]",width:"80px",maxLength:5,setup:h,commit:j}]}]},{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.advisoryTitle,requiredContent:"a[title]","default":"",id:"advTitle",setup:h,commit:j},{type:"text",label:b.advisoryContentType,requiredContent:"a[type]","default":"",id:"advContentType",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.cssClasses,requiredContent:"a(cke-xyz)", +"default":"",id:"advCSSClasses",setup:h,commit:j},{type:"text",label:b.charset,requiredContent:"a[charset]","default":"",id:"advCharset",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.rel,requiredContent:"a[rel]","default":"",id:"advRel",setup:h,commit:j},{type:"text",label:b.styles,requiredContent:"a{cke-xyz}","default":"",id:"advStyles",validate:CKEDITOR.dialog.validate.inlineStyle(g.lang.common.invalidInlineStyle),setup:h,commit:j}]}]}]}],onShow:function(){var a= +this.getParentEditor(),b=a.getSelection(),c=null;(c=l.getSelectedLink(a))&&c.hasAttribute("href")?b.getSelectedElement()||b.selectElement(c):c=null;a=l.parseLinkAttributes(a,c);this._.selectedElement=c;this.setupContent(a)},onOk:function(){var a={};this.commitContent(a);var b=g.getSelection(),c=l.getLinkAttributes(g,a);if(this._.selectedElement){var e=this._.selectedElement,d=e.data("cke-saved-href"),f=e.getHtml();e.setAttributes(c.set);e.removeAttributes(c.removed);if(d==f||"email"==a.type&&-1!= +f.indexOf("@"))e.setHtml("email"==a.type?a.email.address:c.set["data-cke-saved-href"]),b.selectElement(e);delete this._.selectedElement}else b=b.getRanges()[0],b.collapsed&&(a=new CKEDITOR.dom.text("email"==a.type?a.email.address:c.set["data-cke-saved-href"],g.document),b.insertNode(a),b.selectNodeContents(a)),c=new CKEDITOR.style({element:"a",attributes:c.set}),c.type=CKEDITOR.STYLE_INLINE,c.applyToRange(b,g),b.select()},onLoad:function(){g.config.linkShowAdvancedTab||this.hidePage("advanced");g.config.linkShowTargetTab|| +this.hidePage("target")},onFocus:function(){var a=this.getContentElement("info","linkType");a&&"url"==a.getValue()&&(a=this.getContentElement("info","url"),a.select())}}})})(); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/link/images/anchor.png b/php/pic_switch_demo/static/ckeditor/plugins/link/images/anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..6d861a0e7a5cbd98d5cd3264c5fdb6009d43362b GIT binary patch literal 589 zcmV-T0lYbi8H zxR;v-p;YW5F+`iD!^a8X7`mnql`D%A}cEXd`ThDV!W(L6Y>?{CNCnwyhR56s z{71LTH{e&V$AtHc17l_+&XK?f?EDXi4&Js}yaHx`L*Pog&7*dkht(>CK)2hyxGhn_ zM$KiwGpPma0S~s9mMWk2_SkAPuttM3;7-x{Ufx5V=OaOqv@Pjot=U9UNz!9UFD3O4 zR#zqIOww~n)AcmP@;s+nt;)=hM4IOoyvG2UfpY}sxH~_86{rGVKIeHS34z3nlBAI* zIKVl_Frfl87*J2spMshJW6t56D}oe47y&4R5r6@5?$Wr1AuP^a4A4e&vf;hwPgiF4 bR}J+WGDARE%D;pG00000NkvXXu0mjftM3S` literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/link/images/hidpi/anchor.png b/php/pic_switch_demo/static/ckeditor/plugins/link/images/hidpi/anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..f5048430d57dcf0170a2df9e48ba25a58ba18ef9 GIT binary patch literal 1379 zcmV-p1)TbcP) zF-A!GKzLMwM$i;$$HMNqI?{bUQeCbh z5laT-vz#1n0*%+WcrBBjJa>-L_wUoT{rg|RTp!RW^2Mh&LLuXq zmKI}(NZ@jNyAd58cCHTsdw{wteSO40-w%B0SU1W#S+~MJi?JBJeCUvoKOUuU{#Kjn z>Z0+%LGnu5^NO6@dK%cUZXLZoJ8QQ}68H=F2iO95c<=+rJ}u>ffaY7XM#v+(%XD;f zlsM53Fl89NQIEbK4wu7R0?!(oR}zTK&Cz!l_p^gsyhx2ZcQV)KEg7@NkJCVRHyLHl zPY|&CwqY101g4>^1^+G0%@kW$peU?mV$AFHk_Y5mnnsCuoc@NRC9v+&u3bWrM{bNs zt^n!)UnK(emSs=15!epA)Ye83L`fFpavZW&h_X51@qx8#=~;O8Je>J12(sM`Nq`ju zY=o*3D2Z1l(9l5l5JIfnEO$>J%y=#fOE8fQ>(`Tx4J2U^p5yp6(I1(fE*nCsb0BB! z%yuM(b&*tPJjZL;dMS>1Jo{I#CcocLCdgzkZaR*-!~%-r*0LXgDNSBWvn*nf$;k~o zNJjZ1c+|!US&kLb4_LZ{fHMj#fwd|wQCP!!Rh_U>V^cqlrj|WNCjnKZf=4>=%)w0diPp6=jA zgeg8)|Oy5Q#A^~Yq7#9gQK*k5OqPS>pY9cR) zsvxCHQtZs)zk-EoBJdLwpO?wx8DJx4KolKeT+jca9|J}}V(j*9YDI$D(%4ANOa^@s zO|aZ=NLDGCAO80}a0Yk-cz0rgJX^Oe5peV1LHhB;3A%&+7?fR`nIQ$($UcJIM zRKB_RTF|OH%7&q7i*YUj_hC#bzXWsxUBGEB1vVqscVqsmP>5c@K!dCiLKyoU%ERb$ zaq#xuz4US3x@?TkR2&y?v}zcBn1ALCbfM-u!xb=_mJ7|!!-u(Md`lENn>M}qzG;dL zEnK)jS9b3f^}#k&QqLVYV2PUn-ubn^f5cl~pATs+$&$$7+hs`>2n58+Xf$fQbOShg zwZH#+4>FvFyf26%*@$u-#YvVc=bj#}fc61SDi!8~-tHKUj%?U5} z_O>xwA7It~;_T%203R2Z^VbFk|4hf@pMuEen0}FqC>b=o>#ML{*1d9NQI4k7b`f#C z&*ifw>;2+4i3}~i10alr>hS#WlP3*WXA&EkwAL}%6)08;A1^jJRV~0wRmV%tuOr3! z(&5WU`becU)pLO(%PCSoEzQakkCY2isT4iQwxlf2%I~+rkt{O-`=JC27g6yHuhSDD lkXLxrp)e>uPR-@D!G9=+u`hgA@I?Rs002ovPDHLkV1h$SfwKSr literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/liststyle/dialogs/liststyle.js b/php/pic_switch_demo/static/ckeditor/plugins/liststyle/dialogs/liststyle.js new file mode 100644 index 0000000..2b130e7 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/liststyle/dialogs/liststyle.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){function d(c,d){var b;try{b=c.getSelection().getRanges()[0]}catch(f){return null}b.shrink(CKEDITOR.SHRINK_TEXT);return c.elementPath(b.getCommonAncestor()).contains(d,1)}function e(c,e){var b=c.lang.liststyle;if("bulletedListStyle"==e)return{title:b.bulletedTitle,minWidth:300,minHeight:50,contents:[{id:"info",accessKey:"I",elements:[{type:"select",label:b.type,id:"type",align:"center",style:"width:150px",items:[[b.notset,""],[b.circle,"circle"],[b.disc,"disc"],[b.square,"square"]],setup:function(a){this.setValue(a.getStyle("list-style-type")|| +h[a.getAttribute("type")]||a.getAttribute("type")||"")},commit:function(a){var b=this.getValue();b?a.setStyle("list-style-type",b):a.removeStyle("list-style-type")}}]}],onShow:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.setupContent(a)},onOk:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.commitContent(a)}};if("numberedListStyle"==e){var g=[[b.notset,""],[b.lowerRoman,"lower-roman"],[b.upperRoman,"upper-roman"],[b.lowerAlpha,"lower-alpha"],[b.upperAlpha,"upper-alpha"], +[b.decimal,"decimal"]];(!CKEDITOR.env.ie||7&XFui49F#OeC~TM2>NBAD(jbywmmB4AXs^Hw!g3 zrKK6vW(G_+FkzM$n~Q^*56=n#HEv_kCE{7?J&c=}8RCPb`s%g^=>g4S@O1TaS?83{ F1OV9DKgIw6 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/magicline/images/hidpi/icon.png b/php/pic_switch_demo/static/ckeditor/plugins/magicline/images/hidpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b981bb5c6c40ef143fbd1dbd92e17c3471a6e635 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S!VDyfb{13uDTx4|5LY1m9~)4vn;Q?5V=oEv z3ua*W{OkAMe;?PrIs+66_jGX#;kaJgvr+JX0T0vtsZoZl?5FrnGTCjcQM%Pf)^OZeA b(rxbAsq!4pRQ+B7tzhtU^>bP0l+XkKZctCS literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/magicline/images/icon-rtl.png b/php/pic_switch_demo/static/ckeditor/plugins/magicline/images/icon-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..55b5b5f949a60c8fabc63867fd7827fe33d0ab71 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRQ!3HGLSWET+sX$K`#}En0)_zAW1_cfl(^voJ zzZIFXGf`1QjpGte_M{Gzw|n- mC^o0`vu%>-E46n=xrM(kReto&ct)&&(s=a-t);t=a;c["cke:indent"]=s&&Math.ceil(a/s)+1||1}],[/^mso-list$/,null,function(a){var a=a.split(" "),b=Number(a[0].match(/\d+/)),a=Number(a[1].match(/\d+/));1==a&&(b!==w&&(c["cke:reset"]=1),w=b);c["cke:indent"]=a}]])(c.style,a)||""),c["cke:indent"]||(t=0,c["cke:indent"]= +1),CKEDITOR.tools.extend(c,b.attributes),!0;w=t=s=null;return!1},getStyleComponents:function(){var a=CKEDITOR.dom.element.createFromHtml('
      ',CKEDITOR.document);CKEDITOR.document.getBody().append(a);return function(c,b,f){a.setStyle(c,b);for(var c={},b=f.length,d=0;de)a.push(j=new CKEDITOR.htmlParser.element(l)),j.add(b),h.add(j);else{if(db.size?"small":"medium")),delete b.size),a.name="span",a.addStyle(d.join(";")))}},span:function(a){if(p(a.parent))return!1;a.filterChildren(c);if(n(a))return delete a.name,null;if(p(a)){var b=a.firstChild(function(a){return a.value||"img"==a.name}),e=(b=b&&(b.value||"l."))&&b.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(e)return b=i(e,b),(a=a.getAncestor("span"))&&/ mso-hide:\s*all|display:\s*none /.test(a.attributes.style)&&(b.attributes["cke:ignored"]=1),b}if(e=(b=a.attributes)&&b.style)b.style= +j([["line-height"],[/^font-family$/,null,!o?m(d.font_style,"family"):null],[/^font-size$/,null,!o?m(d.fontSize_style,"size"):null],[/^color$/,null,!o?m(d.colorButton_foreStyle,"color"):null],[/^background-color$/,null,!o?m(d.colorButton_backStyle,"color"):null]])(e,a)||"";b.style||delete b.style;CKEDITOR.tools.isEmpty(b)&&delete a.name;return null},b:g(d.coreStyles_bold),i:g(d.coreStyles_italic),u:g(d.coreStyles_underline),s:g(d.coreStyles_strike),sup:g(d.coreStyles_superscript),sub:g(d.coreStyles_subscript), +a:function(a){a=a.attributes;a.href&&a.href.match(/^file:\/\/\/[\S]+#/i)&&(a.href=a.href.replace(/^file:\/\/\/[^#]+/i,""))},"cke:listbullet":function(a){a.getAncestor(/h\d/)&&!d.pasteFromWordNumberedHeadingToList&&delete a.name}},attributeNames:[[/^onmouse(:?out|over)/,""],[/^onload$/,""],[/(?:v|o):\w+/,""],[/^lang/,""]],attributes:{style:j(s?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,null,function(a,b,c){if(b.name in{p:1,div:1}){b="ltr"==d.contentsLangDirection?"margin-left": +"margin-right";if("margin"==c)a=r(c,a,[b])[b];else if(c!=b)return null;if(a&&!D.test(a))return[b,a]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(a,b){if("img"==b.name)return a}],[/^width|height$/,null,function(a,b){if(b.name in{table:1,td:1,th:1,img:1})return a}]]:[[/^mso-/],[/-color$/,null,function(a){if("transparent"==a)return!1;if(CKEDITOR.env.gecko)return a.replace(/-moz-use-text-color/g,"transparent")}],[/^margin$/,D],["text-indent","0cm"],["page-break-before"], +["tab-stops"],["display","none"],o?[/font-?/]:null],s),width:function(a,c){if(c.name in b.$tableContent)return!1},border:function(a,c){if(c.name in b.$tableContent)return!1},"class":h,bgcolor:h,valign:s?h:function(a,b){b.addStyle("vertical-align",a);return!1}},comment:!CKEDITOR.env.ie?function(a,b){var c=a.match(//),d=a.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);return d?(d=(c=d[1]||c&&"l.")&&c.match(/>(?:[(]?)([^\s]+?)([.)]?)]*o:href=['"](.*?)['"]/))&&d[1])&&(c.attributes.src=d),c):!1}:h}}},G=function(){this.dataFilter=new CKEDITOR.htmlParser.filter};G.prototype={toHtml:function(a){var a=CKEDITOR.htmlParser.fragment.fromHtml(a),c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,this.dataFilter);return c.getHtml(!0)}};CKEDITOR.cleanWord=function(a,c){CKEDITOR.env.gecko&&(a=a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi,"$1$2$3"));CKEDITOR.env.webkit&& +(a=a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+)(<\!--\[endif\]--\>)/gi,"$1$2$3"));var b=new G,f=b.dataFilter;f.addRules(CKEDITOR.plugins.pastefromword.getRules(c,f));c.fire("beforeCleanWord",{filter:f});try{a=b.toHtml(a)}catch(d){alert(c.lang.pastefromword.error)}a=a.replace(/cke:.*?".*?"/g,"");a=a.replace(/style=""/g,"");return a=a.replace(//g,"")}})(); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/preview/preview.html b/php/pic_switch_demo/static/ckeditor/plugins/preview/preview.html new file mode 100644 index 0000000..7eb8082 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/preview/preview.html @@ -0,0 +1,13 @@ + diff --git a/php/pic_switch_demo/static/ckeditor/plugins/scayt/LICENSE.md b/php/pic_switch_demo/static/ckeditor/plugins/scayt/LICENSE.md new file mode 100644 index 0000000..610c807 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/scayt/LICENSE.md @@ -0,0 +1,28 @@ +Software License Agreement +========================== + +**CKEditor SCAYT Plugin** +Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: + +* GNU General Public License Version 2 or later (the "GPL"): + http://www.gnu.org/licenses/gpl.html + +* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): + http://www.gnu.org/licenses/lgpl.html + +* Mozilla Public License Version 1.1 or later (the "MPL"): + http://www.mozilla.org/MPL/MPL-1.1.html + +You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. + +Sources of Intellectual Property Included in this plugin +-------------------------------------------------------- + +Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/php/pic_switch_demo/static/ckeditor/plugins/scayt/README.md b/php/pic_switch_demo/static/ckeditor/plugins/scayt/README.md new file mode 100644 index 0000000..1b3de25 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/scayt/README.md @@ -0,0 +1,25 @@ +CKEditor SCAYT Plugin +===================== + +This plugin brings Spell Check As You Type (SCAYT) into up to CKEditor 4+. + +SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. + +Installation +------------ + +1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. +2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): + + config.extraPlugins = 'scayt'; + +That's all. SCAYT will appear on the editor toolbar and will be ready to use. + +License +------- + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. + +Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). diff --git a/php/pic_switch_demo/static/ckeditor/plugins/scayt/dialogs/options.js b/php/pic_switch_demo/static/ckeditor/plugins/scayt/dialogs/options.js new file mode 100644 index 0000000..8178e1a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/scayt/dialogs/options.js @@ -0,0 +1,17 @@ +CKEDITOR.dialog.add("scaytDialog",function(f){var g=f.scayt,k='

      '+g.getLocal("version")+g.getVersion()+"

      "+g.getLocal("text_copyrights")+"

      ",l=CKEDITOR.document,i={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:g.getLang(),newLang:null,reset:function(){this.currentLang=g.getLang();this.newLang=null},id:"lang"},k=[{id:"options",label:g.getLocal("tab_options"),onShow:function(){},elements:[{type:"vbox", +id:"scaytOptions",children:function(){var a=g.getApplicationConfig(),e=[],c={"ignore-all-caps-words":"label_allCaps","ignore-domain-names":"label_ignoreDomainNames","ignore-words-with-mixed-cases":"label_mixedCase","ignore-words-with-numbers":"label_mixedWithDigits"},d;for(d in a){var b={type:"checkbox"};b.id=d;b.label=g.getLocal(c[d]);e.push(b)}return e}(),onShow:function(){this.getChild();for(var a=f.scayt,e=0;e
      ',onShow:function(){var a=f.scayt.getLang();l.getById("scaytLang_"+a).$.checked=!0}}]}]},{id:"dictionaries",label:g.getLocal("tab_dictionaries"), +elements:[{type:"vbox",id:"rightCol_col__left",children:[{type:"html",id:"dictionaryNote",html:""},{type:"text",id:"dictionaryName",label:g.getLocal("label_fieldNameDic")||"Dictionary name",onShow:function(a){var e=a.sender,c=f.scayt;setTimeout(function(){e.getContentElement("dictionaries","dictionaryNote").getElement().setText("");null!=c.getUserDictionaryName()&&""!=c.getUserDictionaryName()&&e.getContentElement("dictionaries","dictionaryName").setValue(c.getUserDictionaryName())},0)}},{type:"hbox", +id:"notExistDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"createDic",label:g.getLocal("btn_createDic"),title:g.getLocal("btn_createDic"),onClick:function(){var a=this.getDialog(),e=j,c=f.scayt,d=a.getContentElement("dictionaries","dictionaryName").getValue();c.createUserDictionary(d,function(b){b.error||e.toggleDictionaryButtons.call(a,!0);b.dialog=a;b.command="create";b.name=d;f.fire("scaytUserDictionaryAction",b)},function(b){b.dialog=a;b.command="create"; +b.name=d;f.fire("scaytUserDictionaryActionError",b)})}},{type:"button",id:"restoreDic",label:g.getLocal("btn_restoreDic"),title:g.getLocal("btn_restoreDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,c=j,d=a.getContentElement("dictionaries","dictionaryName").getValue();e.restoreUserDictionary(d,function(b){b.dialog=a;b.error||c.toggleDictionaryButtons.call(a,!0);b.command="restore";b.name=d;f.fire("scaytUserDictionaryAction",b)},function(b){b.dialog=a;b.command="restore";b.name=d;f.fire("scaytUserDictionaryActionError", +b)})}}]},{type:"hbox",id:"existDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"removeDic",label:g.getLocal("btn_deleteDic"),title:g.getLocal("btn_deleteDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,c=j,d=a.getContentElement("dictionaries","dictionaryName"),b=d.getValue();e.removeUserDictionary(b,function(e){d.setValue("");e.error||c.toggleDictionaryButtons.call(a,!1);e.dialog=a;e.command="remove";e.name=b;f.fire("scaytUserDictionaryAction",e)},function(c){c.dialog= +a;c.command="remove";c.name=b;f.fire("scaytUserDictionaryActionError",c)})}},{type:"button",id:"renameDic",label:g.getLocal("btn_renameDic"),title:g.getLocal("btn_renameDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,c=a.getContentElement("dictionaries","dictionaryName").getValue();e.renameUserDictionary(c,function(d){d.dialog=a;d.command="rename";d.name=c;f.fire("scaytUserDictionaryAction",d)},function(d){d.dialog=a;d.command="rename";d.name=c;f.fire("scaytUserDictionaryActionError",d)})}}]}, +{type:"html",id:"dicInfo",html:'
      '+g.getLocal("text_descriptionDic")+"
      "}]}]},{id:"about",label:g.getLocal("tab_about"),elements:[{type:"html",id:"about",style:"margin: 5px 5px;",html:'
      '+k+"
      "}]}];f.on("scaytUserDictionaryAction",function(a){var e=SCAYT.prototype.UILib,c=a.data.dialog,d=c.getContentElement("dictionaries","dictionaryNote").getElement(),b=a.editor.scayt,f;void 0=== +a.data.error?(f=b.getLocal("message_success_"+a.data.command+"Dic"),f=f.replace("%s",a.data.name),d.setText(f),e.css(d.$,{color:"blue"})):(""===a.data.name?d.setText(b.getLocal("message_info_emptyDic")):(f=b.getLocal("message_error_"+a.data.command+"Dic"),f=f.replace("%s",a.data.name),d.setText(f)),e.css(d.$,{color:"red"}),null!=b.getUserDictionaryName()&&""!=b.getUserDictionaryName()?c.getContentElement("dictionaries","dictionaryName").setValue(b.getUserDictionaryName()):c.getContentElement("dictionaries", +"dictionaryName").setValue(""))});f.on("scaytUserDictionaryActionError",function(a){var e=SCAYT.prototype.UILib,c=a.data.dialog,d=c.getContentElement("dictionaries","dictionaryNote").getElement(),b=a.editor.scayt,f;""===a.data.name?d.setText(b.getLocal("message_info_emptyDic")):(f=b.getLocal("message_error_"+a.data.command+"Dic"),f=f.replace("%s",a.data.name),d.setText(f));e.css(d.$,{color:"red"});null!=b.getUserDictionaryName()&&""!=b.getUserDictionaryName()?c.getContentElement("dictionaries","dictionaryName").setValue(b.getUserDictionaryName()): +c.getContentElement("dictionaries","dictionaryName").setValue("")});var j={title:g.getLocal("text_title"),resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:340,minHeight:260,onLoad:function(){if(0!=f.config.scayt_uiTabs[1]){var a=j,e=a.getLangBoxes.call(this);e.getParent().setStyle("white-space","normal");a.renderLangList(e);this.definition.minWidth=this.getSize().width;this.resize(this.definition.minWidth,this.definition.minHeight)}},onCancel:function(){i.reset()},onHide:function(){f.unlockSelection()}, +onShow:function(){f.fire("scaytDialogShown",this);if(0!=f.config.scayt_uiTabs[2]){var a=f.scayt,e=this.getContentElement("dictionaries","dictionaryName"),c=this.getContentElement("dictionaries","existDic").getElement().getParent(),d=this.getContentElement("dictionaries","notExistDic").getElement().getParent();c.hide();d.hide();null!=a.getUserDictionaryName()&&""!=a.getUserDictionaryName()?(this.getContentElement("dictionaries","dictionaryName").setValue(a.getUserDictionaryName()),c.show()):(e.setValue(""), +d.show())}},onOk:function(){var a=j,e=f.scayt;this.getContentElement("options","scaytOptions");a=a.getChangedOption.call(this);e.commitOption({changedOptions:a})},toggleDictionaryButtons:function(a){var e=this.getContentElement("dictionaries","existDic").getElement().getParent(),c=this.getContentElement("dictionaries","notExistDic").getElement().getParent();a?(e.show(),c.hide()):(e.hide(),c.show())},getChangedOption:function(){var a={};if(1==f.config.scayt_uiTabs[0])for(var e=this.getContentElement("options", +"scaytOptions").getChild(),c=0;c'),g=new CKEDITOR.dom.element("label"),h=f.scayt;c.setStyles({"white-space":"normal",position:"relative", +"padding-bottom":"2px"});b.on("click",function(a){i.newLang=a.sender.getValue()});g.appendText(a);g.setAttribute("for",d);c.append(b);c.append(g);e===h.getLang()&&(b.setAttribute("checked",!0),b.setAttribute("defaultChecked","defaultChecked"));return c},renderLangList:function(a){var e=a.find("#left-col-"+f.name).getItem(0),a=a.find("#right-col-"+f.name).getItem(0),c=g.getLangList(),d={},b=[],i=0,h;for(h in c.ltr)d[h]=c.ltr[h];for(h in c.rtl)d[h]=c.rtl[h];for(h in d)b.push([h,d[h]]);b.sort(function(a, +c){var b=0;a[1]>c[1]?b=1:a[1]q4ZMIndrud~5RU7~KlqvCB?4CNuN7<8ZM?GWcHwn9gFm;vTD`OGs4A4v z_>p{l_3!U?1~ulpOZhdv&pm(ZrckW485hHzLf=y^Oa(`QMlpE0`njxgN@xNAlu9>b literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_blockquote.png b/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_blockquote.png new file mode 100644 index 0000000000000000000000000000000000000000..a8f497353cc5abb02cb78b7eba55772e1f5db540 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?p$P6U=5BZe>DYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11})Y(bL5-gyVYh4}L~=2?I&_?;_8ie6x^G__3`z_sgwKzZH&EWg9$J zo>3^H!!)^R)z2HjbAs=bOXQrh-_iK(#@Yr$22;7jhW_~%%z%b5c)I$ztaD0e0sySo BH~atq literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_div.png b/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_div.png new file mode 100644 index 0000000000000000000000000000000000000000..87b3c17146e79e8dcced15939f24a0f16ad50c61 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{g$P6S6r-*3)DYgKg5Z8u=hX4QnKfl(y1}MT* z666>BpW*3t11}&?&C|s(gyVYhkN^MKnR)8>#2x&=+p)i$x$p|V!M`$YjXLp#Y@Eyt Y)8}f)Oi$*s1L|P#boFyt=akR{0Dd1P761SM literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h1.png b/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h1.png new file mode 100644 index 0000000000000000000000000000000000000000..3933325c08f3f4eacec46c97600f7cba01ead54f GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^fbHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&NynsA;PZ!4!j_b)k{_k&OY}>z={n2NEUx%wTFVdQ&MBb@0O>s@^8f$< literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h2.png b/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h2.png new file mode 100644 index 0000000000000000000000000000000000000000..c99894c2650ae1745e0e4156d775fe84d00efff0 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^fbHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&NynsA4PZ!4!j_b)k{_k&OY}-GV{n1;8KYJS=G7HpK^B?)%xI=a!8z(b^ XbHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&Nyns9BpW*3t11}&?$FVdQ&MBb@02`Vnr2qf` literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h5.png b/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_h5.png new file mode 100644 index 0000000000000000000000000000000000000000..ce5bec16cfa84d461672f8b0721911d90a06e445 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^fbHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&NynsAaPZ!4!j_b)k{_k&OY}>z;`D2~JyZnS78)QA|*^>lnbHRe*aCb)TpJo1{{R2~{95lCpa@e* zkYDhBhNs&Nyns9#|GfK-CPMu6{1-oD!M|04nb literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_pre.png b/php/pic_switch_demo/static/ckeditor/plugins/showblocks/images/block_pre.png new file mode 100644 index 0000000000000000000000000000000000000000..955a8689a13a394a9e715673d23750a6847eb617 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^VnEE#$P6TJEnce)q}T#{LR=df8vg(P|NL6-8lVVM zNswRge}<>q4ZMInbx#+^5RU7~KmPycXXdGYvoZ00=t{@C}8pCx}|qC*(_ aQHD7O)qh-UDHQ^0VeoYIb6Mw<&;$Unq%6+> literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/dialogs/smiley.js b/php/pic_switch_demo/static/ckeditor/plugins/smiley/dialogs/smiley.js new file mode 100644 index 0000000..b202d3e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/smiley/dialogs/smiley.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("smiley",function(f){for(var e=f.config,a=f.lang.smiley,h=e.smiley_images,g=e.smiley_columns||8,i,k=function(j){var c=j.data.getTarget(),b=c.getName();if("a"==b)c=c.getChild(0);else if("img"!=b)return;var b=c.getAttribute("cke_src"),a=c.getAttribute("title"),c=f.document.createElement("img",{attributes:{src:b,"data-cke-saved-src":b,title:a,alt:a,width:c.$.width,height:c.$.height}});f.insertElement(c);i.hide();j.data.preventDefault()},n=CKEDITOR.tools.addFunction(function(a,c){var a= +new CKEDITOR.dom.event(a),c=new CKEDITOR.dom.element(c),b;b=a.getKeystroke();var d="rtl"==f.lang.dir;switch(b){case 38:if(b=c.getParent().getParent().getPrevious())b=b.getChild([c.getParent().getIndex(),0]),b.focus();a.preventDefault();break;case 40:if(b=c.getParent().getParent().getNext())(b=b.getChild([c.getParent().getIndex(),0]))&&b.focus();a.preventDefault();break;case 32:k({data:a});a.preventDefault();break;case d?37:39:if(b=c.getParent().getNext())b=b.getChild(0),b.focus(),a.preventDefault(!0); +else if(b=c.getParent().getParent().getNext())(b=b.getChild([0,0]))&&b.focus(),a.preventDefault(!0);break;case d?39:37:if(b=c.getParent().getPrevious())b=b.getChild(0),b.focus(),a.preventDefault(!0);else if(b=c.getParent().getParent().getPrevious())b=b.getLast().getChild(0),b.focus(),a.preventDefault(!0)}}),d=CKEDITOR.tools.getNextId()+"_smiley_emtions_label",d=['
      '+a.options+"",'"],l=h.length,a=0;a');var m="cke_smile_label_"+a+"_"+CKEDITOR.tools.getNextNumber();d.push('");a%g==g-1&&d.push("")}if(a");d.push("")}d.push("
      "); +e={type:"html",id:"smileySelector",html:d.join(""),onLoad:function(a){i=a.sender},focus:function(){var a=this;setTimeout(function(){a.getElement().getElementsByTag("a").getItem(0).focus()},0)},onClick:k,style:"width: 100%; border-collapse: separate;"};return{title:f.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[e]}],buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/angel_smile.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/angel_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..21f81a2fab5b772bf1dcef0fe0a5f1965a08927d GIT binary patch literal 1245 zcmeH`{ZrBh9Du(lA_^p;f{GZh*>#>vg-WcpVe_qxHdcBkoV$~DTj}X$YrA=EDa>g& z&*{`%<>ta9P8XRelEYV&Qp))T8!O927}m5CoeM?2-_Nc;VZZPB{rTm&dom8C3zB6F zgn_sb2b2H6P=zl~MZ2{D;a2Jzo;_r2&>&;$%H}zL_%76gqX0@u--14#&){LIjEU~ z{`wM3?SSc*!4~Ve7Z3Mdf&1~x6Z=q8qI-&m&LnNkC4f}`c0OuIfq}PSP>kJr(`yuC z4|2V?3tiScn0tS9uFz{cwed$W*h;{12D6ody#O4iVet%1%fWIM?pA=c3g#|ge>QvP zFJkjQtvf0)XEiL;V#~Ger$2(@61Jq;c&70#x5Hl@n5z{W-LTN(eXIwk0hW3_t}f4N zH~P;Y_WYLDZARU9yc=e8;|{D?QO_*qv0xq>tlov^53sF=nAZ-QiLTo&>ABenv;5hD-eD`W%;^8#U8LFm)N%ET{bOMdwzM#Rc2N$sz)D(i+t+^<6; zMzWL^_O4tV(X1G)7I2TzCUkA-_`t9PaUGR&uqI7P;vKVQ(lo+Cy^?yp;xJp3%1n$U z5~|K8e@={%UP+o!?LTE=XwEvaqHG;_3p{Uif_K#{+dwiL(8l~ zQi51oVP#aZx~DQw6vvSTQk(O95Jb)nBOO1_nJea!Ig;SC)ZmJvV&TcAf_S9Ss z!Fu%FBF$Gt%=@kix^y$en7>OUl;g;`#W-JovP<#Nd&=P%VRcTYq98WTj;H4cPMQd^ qnmi+y@WBWnC*p*PN$AgJ8}WtsBW_ zEeI{UvbD07r3Ffnvgoy?Q1G%SU|8D=m;24nGxOaGTuK^WeE28d%$)O^Gv}OdCcrtf z6!3q^ZvelAur~NC?*7*-x8pPAnW)2>y@6Ub8xGnw+E#qTx6NAZ!{h22^MkwRD=oA8+NhhM zuc0Vjc^vQHnJvO{zK0rqSx&tl21P@!!uUzJJq*q~C{9w^N3D&oYKD8E#^VQ{y>j64 z%0Gp^<6*hFv2Hb?=JQdr0-DN(u{Yr6F#*bElb@qzen8!pgRb_k`)P(|`KM*c@zVU@ zQD!Sw%8iBf}F)U&F;Mw$j zD3y8G_*Cv&Tn&)eZqP> z73<)t7)fgyo{>{`z$Goui=pJaHFZNe%9brq6K$eInPA%+aI_GjQ1$!pTt1FrZAwcv zS3iKCA_bD{RT95`5y@y?tUuHjtrY*y+z19vhKXMkluM^I9>l792E*D^&_g(@;7o`O z@oK7OH-&HQpgt#*k=!U2%VJq9jbZfL2%2+3`0>pk#!Hh7n6d~wEk{r#a$?Qe)Qa*G ztxZw=gdM$(PD{FBZRk;YPbE=%BAnC50y+J9AT{rYapjvt+}E@0KuW?Q@t+gs!XVSI(L?MoyJ zaVTqyfltIloQp%fK%LWVpl5=`E>I+6?W28#ahGQfX$1nL>lU miK<1DUR8VN4sT7vR{aZh|2Vqsev4870000v5$^6lp{j(L@cWd@v)@&bbIe*!4{2R~Nk+whll|Kio{Rvd~AE5XvNcDG+ z>i=Ms|G{d%Lbd*fY5$AR{t>13KT_{~gu&-n_*H+!FG`#I74bCTuP zB&%;}cK;Kt{-#*|O11x=Vmmd`V`{YLg$%EY*?w0_qyDEmeam$Enc?_9!})Kn^WSWj z|Jm;Uvpv2P`g|?&{aWJxx5)p0ap1r5;6IhYe`>@3RY(7+kNR5^d#x(rMnn3E&cb_> z>%R77|L@5B*_;1$V*bCrqL;I4e@!g^Ke6=3^t#`(>wnE`_%W;D$Lz+xGaG-*YyGjH z{r94-zl(c+EbD)|YUZzHlm4%t{bI|~7u#0+*|PA@wncxpFa5i7`I`en7bZLUvj}rN5l-fsqRGU-@L~cBCwnJj z-5Z7}?);8k5-BGv91b-1YUkeLNorZz$j389s7h!`bAY^2{EmXc87!w3`TDacioDP~ z!=vQU$`aYte1w^Wm8Yjb(6w*ILQZSbOTui&x(%wON`o{$PZCzIQYd_6!Z~4@+Vl-# zDVtJ#r|HCO@_E?Fk~zVpYX;9(mS&Ghhl}rA33OKBm}Qms;Kc$(6``Jmy&8XBG#+M< zcAm;7btEL=sH8-1%DeCmfJ?>^>=`)j04$ zp-6|{OrvtH)Tk*=E1bO4-YjAKth(G;!?RCdLFZ=8R@J6{p9wp)pB@v^2$-Uv8N}?t zuQYR>jgnSd`=lSt9wDqk?g5Gy8LTfPuqlPtI!Oq)yL7aOdzy$H;dgSGxPaSErD&!@ z^&9~ge(|mY4vc&eAK8>=NhBTMip|(~++nW7!9#q~5sI@i+BGg57I1swCZZs^BjE|B sstbc7GndMS1FXUfMKXa?Bmx^*C2Kw~P7#uDJUJ!hEypqkMn(o}0F!L1cmMzZ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/angry_smile.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/angry_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..c05d2be3a7972ec4f2d9f5354a9c1dae719d1805 GIT binary patch literal 1220 zcmV;#1UvhQP)3$g6vq)-cAK&zV!#CqTMKRJ22-XBFbvCp1xi~f6p+QnASfX&h4R5DCScGI0!>sv zs_~1dwxE7MBPC)83Q80bAgxls*4UJ1JJXr>-p_O1Oq*6(gNZNs=e^u}&hMUk&w1ze z`mNFE)t!JCkw;W2sua~nR2do5xtN~(RXu@ySk~>(xi1O4`x-4T`nc;I<4C`COy|@_ zZSM;%hC@Wht-7li>(Xdhmrn3-8CK0n__G0;8nMowCUopgTDN35HfpOr>f0mS0o!(6 zpyDm=<_xz3hjw9}sm40K4}1T1cww1nDIC}VpOnL`TC6WV#F#(IRv-2K=K`JK#{(z! zW8_XGSn;-P9o_@a`=De#Y|ep=nXthH#p$pn1=h>^)CbUTlh#ccsIM~af$OC z8EXd*?6mDy3I*y3gSX6uO_R54o9nRjab3!1zemaQ76OGiBK>dR!xHylc4%2)~ORHLs{)rq;OBD zrWzwN7HhjN0&^1-;Dvk_O~tNo#O>hKi8QU6&IMmQ!4;EX`IEB9R3`_m8#7RrGTY&$ zf$}~0y<@{?svwDSjXRaNq-5enhrAL|Q8?m5o3=)^Cn?_ z`?;+wWp;(YTL5Cz#t0V_oD?<~va!NRPQmXcq(hRVJOQqp>_7v)$7!55hU=~&{E#$&Gt>I;-SlXhvWH3fMq;l|rET9< zl-2oIO8rN6nhqBZgHpT1n1(T zVBRpS=d$rXn@QkES(k)*LT5h1nBCvmGPx6IT|Az%64lQyujNj41+Bkcqr1mnUrWuj z-jFjC^QBx2X>7{sT#7N6q1%SkZ`-^P&NxQ^|`Nbig78EN4ijpZ37xfn*XJC+7l3^&sTaa~}) zBt>&^Mjx&wMiFxLvy9ZcAxkc& z%)#Iu2pRopOOK*if>9s!?Xl%X77!8@=Cz;X{1Pxyqwvc@!3;Sr_aNJzGr$hc>We?E z4@U9>j*Z%?kNV#4HMd+6)2Nx(($d=1pF^eJTDneEh>hC*r#rOMl_zZy?L<|gTM<=7 i#(dpfZTAKLKlC@^jn9nmDT4q20000*pUa&T;8X5PrcvW10Z2NTmi28K-> z99w~ihiA2bz$!t(wPIpxB_-F($*q@{-zzA%K}l(guI>(V^PM&}yX@_c@bO(>WxdSF zd7Y2%pn$+p0fFN}LWe{}kBEt#78gG&BXdzu@QR4YO+mriLPB@M#O{lWUz3);C@+6g zTKb-(R`4+WMcZ?SDJFJx)%0-Q4zhcpMB0Ivf^uI3nUmWaP29xRaTgr}OeI zR8?K9tGm?DaJjYhYFF3wzP{`I{kNu1zcXjf-TCwHFIn+|z>vkD12PE| zCl2iY8?u_3TUy(iGWo3SdV1~Tg89w+daU^}TQj}cW#`V5j?&nb-`Qx0y&dJ-O1)8hR;%({Z!f zSw-G0Ide8BcU)X-%~fNm^jIT^^PRzw7mi!m`&TpS^*ng^Sc`v^p;3a7@I%+$&FS$B z42|1zyE#NG1rs?ZEJ|<`mU<%=V)&rzSg#-790$iAEs2M@XZ=xaIo83*H$hQaqv_cq VDI+l!4S|Hlo~KE&(^;7qtO2)m5uX46 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/broken_heart.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/broken_heart.png new file mode 100644 index 0000000000000000000000000000000000000000..a711c0d8d8505409f0285fd92257eda1ba3a42cd GIT binary patch literal 1139 zcmV-(1dRKMP)@G9Ar!Qd8U24;$Cpiyu=eyrI zbMEBYM#544uW&4UD9%?4f!)A6KoO7xt^!|Zy3w_OYXIxFS5&aMyZavCSAh3N zIy)<3eSOrdT$%A;lJPh|`IDg`3Ot^SVt}=!rI^>Q@#xH%Rlo-hplSHzNqj{`NGgRa zfM0St*<4*sZ+km{yR5B^YtbmCX<}EDj0LKSigi$t(YGh>D(CP-Qqv$t-s((7H6vrLmeA`zCgv;g$mL}ZmYHTCN^m6dM4 z-A=CCoz~4nEXMWGQOfi3D9_8wJdQc;w#~+yLqjo#s`?a7H|{xeaz3d$c8r1XaiXzU z`XM=;c-?MNsnnte8I8pVhQrhyKaN9HKh|_(c>aI-w5YYUr}pSk`p3qYiN{Hr<}+EM zsz@r8ww^Ri;)w+PV`J0=0=&FsOAqiFfC8ZD#w_qwSzB9Q#i2t4b)ER^>@%G$vD@+3 z?P(n+Op}3dnAHakP`+o+O<i&rnp1&?$q`0+}lASvZ zo88`~=|;yt?R}wquD}}LJ-`nP0LL}mxc{Pk|4RN}<8SCtmNuhtj6nbZ002ovPDHLk FV1m;NClUYv literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/confused_smile.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/confused_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..0e420cba4af510c616dbfcad2b48acddc94da29f GIT binary patch literal 1202 zcmeH`{ZrEg0EfSuV{dG-$zU%q+QtG-5g|_*LB}>d*gWYlIj^$rT$8esy7S7e@XDDiyjSv78BwnbPCKBc7Y5TDa4v^_I9rBav}SEKb`+XKlS_r&)swPR2nNZ zB_=T;CgKFqeu!u{5#6uT`i{}Re2?#ai*d!0bk)iXG_xj8@#a6_{?y5z>JUwJrmu8z z=bWOY9_cSG9^4ynaRb~ebTRQc6K*yxa?rIAJ#6%F(94CFhk=w8PwHx)IQE4Ao=xbM zp(lgvm9O^8R=<|VeVgDDkOM*tr(z@(qiMJ-#$ZN#RDvrKjLE5fC3Q)OAqCl=58rlb zvq^44xDtV>+2#_WsK z;tPrI>TuhIi-t!u?s?58=-+9xNgr#lw4`)&Yw6pZ}_W za*aVFh!!IMk?_$IS~iFjPNru1L)|V$D!0bnaN?tuT!JVx=~ZlT!GUu{=4OS0C$CWt z|D`szZj@_|c)iZu&E*{auv5vZ66HSKk!O77u(4BDvZN3l$!k5SFj(^@gD*{T(}bCC z`h_`D(`V{KhowcTR@qZcq5$twcIBsKHujon)?Df6Njh$b+*H5P$Sjo>YGsXfxqKJ@ z6kC7c{fKIxi_M|07z159{`o-C-PMqsF5Q=}Ewm5}^#PY4vRrFBf97aG-Lk)9oSB@y z+2HUp`@*+}%nzP(H!(O{k3J0B*D4s&vRC~z9@WcsM`^ZgGw-x%ulQWa@f@XI9c zq6(?Up=WLL7cJ=JjITttEjEXRMpwsZtg=JSfVSzL-@2bAidlp;&qi#5Ebq=nezCvS qkdbCPP2badOmMdDHD1f|W5tGQU6Qv-VPzC2Oc(Slx$U5qDE$}COQpd8 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/confused_smile.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/confused_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b8e5c6f11467dbe09785ebf3aafcdc9c581e1f GIT binary patch literal 1101 zcmV-T1hV^yP)4^ zUWYx{4*}Ue^73GgnR!>qSdt0#UH_41XsWqa81?H2(hEkxf@2Fg}a`DzSmDB z?ELd}@K_|YkKEPMoEa8p+tW12b)`%aL_9TSWe3JU`!47`4qpulyMIu$Zrs1r10^D@ zhW?rQ7$R-K9gS!w4aV_Ob`6<~<26wrlXb~t-RgN>Jh%ur3rPGVta}X77XEG!00yzg zp(zNiQ#Yq~b~h4T-{O6DHG)XZIS7l3UgSm~VkyBA%U0`4i)p;O2C-*0oku zU~#%Ga}8L82Vh}QFV*^X)HsHjRGG_va>=Xo*(!@d3O z^z^pV5^X^TG~@~}mxsA|C{@4+(iBBli`Hvk&u9`A*qE^Mx$637Cr)!_2-+GAT5G4X zoj^|n3JX540ELoYrln>IA{q&VjV{e<_WT0v{nhoaySOIaJIKYiA=GRLG-wQ9+-lux zr)J5z#^8!(+i~bWT6b~jn#nm#-;p?5jzO-XDHOq}tUfWuK*a&mpxOE^^c{%n4%KSdo|VdqI`-~2i7YQoOXt_rVlasY8o@b@EKzN|4Jx|!Ez$*zm|HZ!`tHFH-9l#^NHekTF0KWm_zCCyA({@|%|3m%(uJ36& TLW+k600000NkvXXu0mjf7P}Gl literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/cry_smile.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/cry_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..b51334278289b1429515bdc44d559c768e7de4bd GIT binary patch literal 795 zcmV+$1LXWiNk%w1VHW@w0QLX?mtX*!WCEXR1fy*Pr*j9bdI`6B1-N|&v3?7-h!MSu z5XXrK$&3ohnikWb71gU8|D*)}sRsY03;wJM|FRDMsulmM8|Sqf{%2Grvors@HvhIc|GYl;#2){`8vn^3@4z7M&MW`SBLC7R{?#e} z+AjXYGXKgm|I0o7(Kr9qIQ`-^|GiEBzEJqdP5stH{@6kP&`tcoQ2*0i{@q;r&2IkM zWdG4<`Ok9w)^zdPbpPIT|JHo{;%xondKah59H+}0tIr#((I2+lA*swUvCl29&^Wc# zJ-XK=zU4!@)k3}5Cd2D7#_V0g+Tb|Kg(l>#Y9dwEyP1|LeGx(7~6|%B$4Jj@|H{b1|med z2tRLz~DRs6Vy)7@y5v>KTnio`Ed1U0RaXDAeb;ALI)3XmLT!NB#IUfSFg61 z!Ffgt3K1q)kRXT3WI1s7fPp{(L)z9D8b^o#0RpZ#SG0A35J9i(*|odm(pD!#ZQjQr Zgs3w-m6|RzCea|Grg@`9ix33@06R_ikOlw% literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/cry_smile.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/cry_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..a1891a3428126f340fec3df988921ff98e60b36b GIT binary patch literal 1214 zcmV;v1VQ_WP)svZ)kglo^9&wutlMWAZX#D_n7@0qo}S+myKGf~0N z<*5Hl|2PRGN=u|n$tU$j#cfpec2r+bwmoCBvH zf#!#yaXOrO2u`HI@hOtNd$+>1ZtZX(*4HwIz}+18pMji2GZ4ry=FBsK&Xj||EdncVY;^Avcw#O_mY=li{oT9 z9V8{Ej!F3qY-*~dqg<&u^{5Iv(<@%p1h=5qTW8ZzkD)3=KAV!LPw3u z67x=Y)p+OIhAO7}dsug-M`>B;70p6z;cR{nC3`#E@1=tBB!X?SMEtv#1 z6X+-xe7@IO7Ix5+vws}NzlOR%8yp)iHxAUmJ(BN6@|ZxnK$t2v;p9zvURS_cYLb zWuU-yH1ODk>tdT|nkYe(|^8?m>*+gHWm%Z%qnzJ&8amO{!&`*36p;4JRi1SQl@6w?K*DH+k93eL8lh%ou~8WNmq1B zfmvSEc_T2n@i>L44m%U54qal#kr2u1I17)j?EAfNW9Oxw%VE<%%LdpPt3^gR6eoH) z^=bP)J@;uLJ614K(T>o`sh?=qFl+CS6@%-ma&GIn+MU_h7aV%z8s{9%pXqFqbDo^{ zBt&u=KNOl1C%b4#-`2iLhn-nBo6m3_BkcFx+!_P<=vqup~J>`7E2osXy_GPdmQ ctL=9E0q?RJ6Dta$D*ylh07*qoM6N<$g2RVY9smFU literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/devil_smile.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/devil_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b2a10055beadd67b13405cafb86829f57fffb2a GIT binary patch literal 1239 zcma*m`%hB`7{>7fltL|qLuo0r6uDI^K~PYv!&{ZmO~v3Ak*P$`Y372{4cTyWA|Qhq z7lb*@s7@{7L<=%*BDKiHsR-5rm(L%TN~c_1XWiT^QfZf$u-nV?A0MAFxqM0{qh+#}At7VI!4`$$ zY#ebmp1Ab6^`(8*m-pLTIl#J+!qcVL-AQ3r9I>xF%9-2}h`n+g4wzP{#13|2(fLPtcSnY-W1SwduU;;|rnzHP?Kei!(yxilMPazBM#9$hScO zQ#%x}aK#pXFxa?ii>quDGVE~84*B*d;Glpzp>@JFdt7I5=)yVBa!|ySiy|(H=b)I2 z8w>}OFnIWrhf+tBF`Q8DG@v1ewW85t(L@o6YhwDk7}q6Kk#w|FJX$V!TH!HzQ;G@_ zmCm@y;G@a~w_H%o5I`ryZ6Wlos1f0g2$hm)og41BK`*6Cy;0>wl?I?Jgf0t3`4U>U z7`jkYet_zglzugCub!@#PT%!JtsCkX?x<&o(ICcM3Dw{M#$O(|FU5UNJn%&0-0272 z)B`W7(HjrF(8TaYvp4m~7ms{k@I|8xkNohMF%L#Rw8+rPn1?pTe3<5=U5*aM0(AJJ z)Bjyh5PBA(I|#i&=nJA+md!p{1d{^o3Jio`FoddBLLUkJCe%dH_tsM#;dGbMQWu4` zSh{bA`KPe*qK zOg~xrFVOwJV>lZ_c^FZnBOgN=%d0}XD8^73hAS*1l^CtY%PQ2?!el~wJG#0s-iC1# zUUy@v4{!TnHdEtfOqntB6z`sao&{|IO#vYO-+9lltO#O~2zWn#{}Y5gO^h_ERV5ee z(rs-Gzno1NP^QkA8@l6a+>ZJKhOZC5PHXC3mN`+s(oLRCu#zSWZwJ>UY!CZ(Kx6eH zaZ|s7?f79JX^dl?jPE%`<;ph1EIrh{D@#ER*ff%a^}%D`Xxj@vxws@Yt^Bz-j3n5n z4pwQ2w7A>FY1?!{zHfL>`|Ku&spv74v1%bcuUm|C!JzaNLs z;+!CrhI65Zj8-qAOFngv+!pk6ssr0$Bp|V?WO20CU3s{wCnj(I^VSUR8Na@0Q$(bD ztm$CRo3yMPS;UvIxA@H`wu}ewd6hgFd?d;z;-p{!e?=8f^0#rQVq<;{xz&9vD{yBt zZ`JzKD{GItB)IM|#JR-uB-=p~E|8~meY{cG`|9FO$?lkAb)4 zYfM~46vqjaS1GU*S&)}YUt*)8t*MQPX*9+*O|&&pn;1=eB#j!4ADSkmo-{nDf# zGy$;|gqF8FTcInDR!d7;3cDH_ukI1l7oz!7zONVbEH*s`*Yx@y+B!tlKe}bjEN0x%{gD9r3E*(Y!Obk z1;0L?mInX!?SR)S0|WT8A82?CXxaw!z7PDy$SshwcpaE#1p5g;vqRa4EiekV8*>{s zVtVUVX}4SOUvFe)VsPzR=p4jHF9KgBz~6fS{@+WWjeQ7x=w`rH6!G-C$_GJp*6A7G!AtTsr34(w5szgtkylF6>ML{u%}vABVvr(}HKC>r-Yv zj^3GDH#K>Ruvdc&P1dDgvL<=CU75(Tq|PJ&KgL7vJ;dFz{DnoP1+RwlS>=JmGeFwq z^{C2;Hl$t1fY$Cg~1}zf={3{S(2mSe7Z`ONdC`ryF;v) zYgsCJt&H)&14;p4)Z2K0IN+aX&*&AS9LDkXFn;wS$BF~1f0>YAwtDgWr ztWjmvtYBA;uE9uw?N+GeEtBufkAmw+1m{KbUS*{@cR*|8`4Cn>LU&=T7B~^6Af~43 zQ&IfhDm3MUV>mw=vlTYXmd9cwFAB{$Vfg;t5R8{68emjJ!QZ+UdKq^ttbkICf$p0^ z-6P6-@lM2Q@C`nM&SQyaI24KFZw2G{o5866I0Bb=h!zL3lp|%4&}&#pH9SDV5SDd_ zmaf=y;W$dVmlPg#AB-4R1#=0aNI2k7P8VdMM$Xqf4ADlpV954S- zxW1qXCzpnsK#A#XpeI6U7fi7&b7U?Vw}qPvuoO^?85c{8AtHSA(DUTlQFTO?VTR%|9Z*ej6?%+6V*|Z irs~YTJuAboQvU$jo*OjDtdS-F0000k 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 LNkvXXu0mjfxmX{o literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/envelope.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/envelope.gif new file mode 100644 index 0000000000000000000000000000000000000000..5294ec488dbe44117f3ae6836b932fd3b6a27b52 GIT binary patch literal 506 zcmZ?wbhEHb6lV};_{zYre8tk$>z1uszh>j64O_Qu*|u}z_8nVy?%cj>@3vjLcI@7> zbI<-A2M+8zcKqn^lZTI=ICkRHkyB@mpFMZx-1)QTFPy!0{qogoSMJ`ubMOA0hmY<* ze)90ilgCe9ZG4U%q<&^7YHtZ(hB9`}*DcH}BuSegFR5`w#CvetiGw)2Gj0 zK79e9&)>d%{r>&i&!69a{QU9z_wPS{fauTv|Nj|?0E$0Z7#SE$7<52tL4I;z`|mKT zz(Yr>ee>xC(`>8x`qR2icbv&EcF5r_niBEApqoW7H@QK(@L0teuLXS1jk9%9j=l*C zakTxfDVmlMF3v5fs;aE2(%aXsBFQc8Zlcf5FmooC{!}MpAx^^pEj0xdLr&qW2qp!e z`i*{?3QWFH=^CsYI{Ny-9IP7YEme9_N*d~?G|ryUP?XVY@z`{2&D2fvT=iGgi*Op; zF6Hsn*HBTAQz+%VF<*>Df0MqZinczBSeCIgQ{DABKb#a34zCqgu{y*3V-Yi_WagI~ zL&k&7EesNdZZ8-P9+}y(V_QN*Lz8RwWZeKCCAOk&E=R4TO&XHHt{q%j+gxlIm|8o; eg&mr?cz+2WY1B5-lelnX%Stt7@ejaYvIYP(9Oujc literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/envelope.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/envelope.png new file mode 100644 index 0000000000000000000000000000000000000000..44398ad137f1d9591692ef073059d709bac99762 GIT binary patch literal 760 zcmbu+>rYZ)90%}|sHtfs)0IYVDqC(=uKA*+wKS|OBd=S%NS)@IT29m1T$$Q(D)Z7T zEnbwh%*#~NMDPHnP=GPO6olp!Cs(;03qM%wc`lE`TjcV7|6Jt% zTI6&10-jJL5G@Ip{s<+~l~t)^Rkk9Pi8nUZr=K7XmQ>ofgsgx?ULZw!!H7bo( zt=U#udnclx4YJ<}iC9hqo?{7gljfL_J5iE1FkCjux|?)+F#xxO5Oa=8EYgscZUTb5h&- z1;LV4O!#1Uj-a?wJ8N z1O-n?Nu80Fz9}epTS(}(sOWuh@$1skcO)e4NlM<9m3=HNeMM36mV&}vRn`0I>dzDu zUa6`+)YN>Uqw`Kv^Odgd2YvlddV22+489r}eKs@uYHt41-28{7S1y*DOJx;b^~ z?U^(0E?jtj$&v>vS3X+1_R;$FFZS(wd*;lCYuCQNeEH+`>!0u6|Nivp&$n-XfByXc z?;itQfZ|UUMh1pB1|5)Xpg3`0|KAYT)ZEhA))dQPWZKi)*WY6(5ZfB-#4a^cdbSk1 z>y)W>a@I?hm~q>4n=iGomUUbZ7sRNhvu*p1?JCS6?JY6B;{F@=#l`wL2#UFdO^FS4 z5oWdZ-5BejZDnnB=kDDl_qCm4V?AUHUc7wu`URiYHBTm`&tH_(KPxhMA8Cscxab`2807v|h#c9;71X`w=M^maDEh84CgtxOFp3|c9U86FD{IxtuR08VrG Am;e9( literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/heart.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/heart.png new file mode 100644 index 0000000000000000000000000000000000000000..df409e62f55f9915efc6b88d3543786ada9c2897 GIT binary patch literal 999 zcmVy=EE0+jENy_ca@j?ofHzuh@e-|#F+P|WlD;$zCVk-#;IW1m6Vq6W z5q+R(qBeCC64H7>h>&Olkt!=1O9|{r5IHP#_qgDm<^1{rhRcdX(r@y6n3?Z8-MF*NcLMkd*b8I=eZW27CrvkkZ-9ZRFoCHs zBC<;?>-qE6R=IohsQi|lEuCd$@}RL%W}iF}5&2O>wu{Km)BXL@*U%uoyga$;a>?zw zI(c^fyohCui^#qu<`TGOZgSG>I&?^WPfeAvf&vLwR*GI)DnmIra^2~akt=FANKKVH2M);m%a<_``64hCMiG%j;IFQO2lHKiKV`YO zD2lS;>_U+U-F`nQH8s5I>7mBs!I_k_!XqN|kBkthsG!>Cdjgc$fbYhxUCW>A>x&Bp zNKHqDcO%o%*tZy>Q#Vh2T(lw=n<~;bYijC1}@n8N=Zs$=HWvCuLDRmLm_P2wh=SU zO~Vxt%uoox=>UdY9#7Tm#02SEw{99fV;H1)JOGbvz+h%o730AmG1J_1jR%8dR#yWI zDkAc6bar;AW5+Ei8!>+2$nr>*e#n6`Q?@{?FYR&X2^h`g%{E z%nJE@}i00BlK5i%MY*nRnO0NAJLMqs&T4SX@6(27Ry-92(7J=WcgJ0W3>XDk{e z`S4+?Z`=qfc6*hk8^fzTap8*ryJF#R*X{cHWc$DXnRfe|v5AERY literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/kiss.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/kiss.gif new file mode 100644 index 0000000000000000000000000000000000000000..ffb23db05a76e7e530ce7a26d658152a37028ef1 GIT binary patch literal 683 zcmZ?wbhEHb6lV};_{PAnjFE92GxKUTwsq|6E4jGVaB!^R=ikiEzMYkIFFX4N4vtMc zJllbYmv;vT$39NZwc_IIq@_0~DeW*f-(_cah?DauKmSQCt~1=+S9y642n!z)6+I&$ za6(M%l$h87Ny(#fa;K%G&&kMK6coHIB643|{(+?ABRRPz^75yZm2c_kJylS6tgik{ zP3@(!@=G9y? zCQZ6Ib?WWev;WSV`FHm0e{<*FU%K?+nl=9xF8sHA`QwcnpKRLnY{!m&yLZ1iefr(` z^B=BW{dn`{*T;{)J$?G)&6_{pzWx3A^Z)<<47h>fPZmZ7hH?fSkP=XwII#b3C~sDsNi*seQi3)VEpJ;D4#m?5=hS?>)tgWmlAxM~&MIify)8%EMTozuQmWs?umd@UeQX(ZS+044;#%6}n+)NBi z+|v5S@Aa9}ww0Hz zPfS!-6obZaqZ~!60w9*;zw}97x7lvs~?8Fe6H4k|81Hjj*c>Hr~ zYRV~875Cx8e*>MskHAO3r!U6GOKi)+<@b{v2n+$uhH3r0D?H%U4*`9~-Ma?|o0`xp zi&Q!d#l^hd*vNs?rVoEeqM( z%RpZr+L<#{x3z_UZ-I6prTiw;+WN)p{rfCDc)-bEknHMeWGsf9oP=~5q}(js=5EUw zfSpRw`|KIHb#)Y@41M=QwutYCljX!t+Z6ym~h9@V6^hs>9c=QR(-i2(jKz0!7mhstT%# zOeT@GO*)ZS3u_wbl@+F=QDWugob2oSN2uyC!?ga|+KN7;9C*~&SZZ~35%hRaoKA$x z1**DMS1CbJQ1bF{`2EOuoYj#LOv_?AD~pexK25obias<<>nGSU{)TDI1-yFwySHxj zKZd+tJ31(HyKxJFT3U+3=R?WQN6~ds^Yhr#)2xh*5st-(78deBcQ>x0qOUf<+lFXE z0k8fx@ZBG`Z&wVRKhM79WpY%NY(*hkQILR@N@1l^M3YI}b#>Hsbl6$@_kU@aR_j*Q zOYn6A4QPqa%ru9)yOqfBFpDE2L`O#f@Kjadt*N1~wwB`hdP6uIpBbh#kjdE*zQrU6 zybl}&jv{5blu{9jG6+0cUk?q_THY!DmGB+R1Rye>-`%w9d%lwl(~@Ki?W^?v{pR)* Z{vUNCpEyW^ic0_h002ovPDHLkV1jyk-jo0U literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/lightbulb.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/lightbulb.gif new file mode 100644 index 0000000000000000000000000000000000000000..ceb6e2d9ea3a6496e3df43e6f815567f0d840bb8 GIT binary patch literal 660 zcmZ?wbhEHb6lV};_{P96J%M3XD#yGmftA%dYn#lkbuixUW4_bNc%z^1_C)@h69jKh z6}dZI`uQ~G7c*GDEMWb=lKsOXj*m;Z|F7lxznTC47XCM@1io(-`LkKz|8~JY+lBw{ z6#lHM-|*f7r zmHB@{{@X#N|ECoGpI82WR_*^O-T#-={$JMme?|ZQ3A6v#?RQKL+%+|H-|YBj8=N1n z3p~6y=g89h6RXNkuBm#qHSyVwwC6iB{@-x?f79*%Eua5)!hc=L_;V}c%caWykBa|4 zsXxE9^YWg_HxAE#eXQlpiO#pD`@dXmd3SEw_d7HGKArUc<>Y@)XZ(IL_x6cpA1*KW zbaU;a%R3)m-TmeMu0OB0JimSP<=vCto*euB;@rEZSAV{}`S0tse_wBZdh_7x`)9vC zJ^uIO@&BJszkPc3|Nnmm(t+Yn7Dfh!d%H`LbF z(b3b>*VB^E>*{Q8&q$dyyCsz;&CO`V3NsJR)J3hOotEe~}YXBE>LOcKf literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/lightbulb.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/lightbulb.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4a92400d0bb454a1f32a54b0ae0bf6a782a960 GIT binary patch literal 919 zcmV;I18Dq-P)WvN&!5cw07D#C~!Zp0GtE9mSpvpW?G>UJQfM~fDiQb`4{q6KSIy`ikVO14h`ZF zA0#yVBA&jHkAYVtS=HNy$0C6+RDP0wem7CP_8HM5Z_q71g3#&1DbAy3XUP8e3A;vK zC35i1-$59YWL2r%8Ojna!2&G<*xOk_00BU_J+9bv2Rbm6C4ixJ;F(Up7`Jm*>2kWk(RVcBZ2#~1-)oaVFum2EQdJf87FfA}`u&Q6v0?WRYSJzd1{f7W%+ks!`9X-KDGKo>h zgI%sd?JD&4SkITpWy^!5Do{ zonh1U0E;P;#gxHf%4CE4h&(ohxBnnO!)LeIlj{ajKy+umQYoV3Cy6g^-9cSy2o z)MM1UL;y&#YQ`b~CB5)%^!nm=6xLU`v6ke<#-BKr&gkU(grWzoGy*q;SK}W;%iUYt zTqPtX7#Ne+RmP3CWNT%b66*oEFTT z71E&>)uk8bp$zAw5C5VA|Dyx{r33$_1^=lB|Dy>1r3?S34*#kM|Emc9tPB6I3;(kY z|FaMOv=8R37yqde|Ee1Qs~i2T9pDoE)W;EJ9cX%GthW2Hooqdi*mz?dS%i4q&4+UQb6 zD9k!#s)Ptpr3@Xb3Ww^!aU;x}K7H<-p@KsX*r7O>WI-ZjNs^pI@*Yt_;qZP^f5n!a;xl4We#HxkUsWm}n?W(4ZlO5+x-j zNO&N@%-gWIa~HH@#!3hgR?OJBT~N&jFmlLnfda*gn>}$rsJX4j!j~utgg8m!kjRrE z45sjr0ilOroeWKk95G@LEImB&;Wr15?sLK0}s%E2XP7=bP#R<0RTHW+Mxab literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/omg_smile.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/omg_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..abc4e2d0fd657fdb681356a836a798f6b97255c8 GIT binary patch literal 1122 zcmV-o1fBbdP)&{j}T+buSenpo44P)$uX$!0s7P4<#xcW2J=VP-a)CRM=$-wgk`{LVMu zoQs&bo92G4A?T|Hx`9rh!x4b)Xc&k@jZA8*_r?9-4ME>=l>C&~_aTg7Foq#9Y~KuY zLeNp@XbhqCM~%$Tzrq`WzFOcTQj;gSavHoQG&}`?F4*xn2m#BZus8xU-$A|rJ)c4K zBZI(eQ6rPw5^jUlD7QY`!;SOGI&fOBvkS30hR9DN)^39WDq5hb75vXZ;tE`SQ_=di zVBhQ0AP%`5+zbDln;)E1Qy*jPKcg1s#>B$p&&2*p(b5)RcViV;5;JG=!^IdiwUvbS zpCH_Mma<>Y!0zYa(KiO8M&{H8ctg;4oYcfueAA`Owii+P3Gv&tTZA8~!5{YFHP;Yp z1&|V?!m6zyZLBc&#}a;jE1@F;@O6jcnI8q!d;6kBW=PE3P1~bFSrdGFIHY#uQGP#~ zH3QW?Fipr6AfE?I7U5_bRF*?!1te2Y{|;CcFn$4!U5+8j_G(Td-OODIv3diw-HVo+ z2FrrvGNiKT5d&RM6~X#g7X5k}l4+QYLwW@!&%@3q!0Uy%OCg}!)Pbwga$hrx&DJ zuY(@Qt%0RLN<``=R#QloC3H~=x0~z2ZAzh87Ja9hZMU;=P>Q~n9<-ylGjBU~or?nG z7K*RCvFHTaVI`-PMp9HX4$+16`p!H|&6h-COL^c!9{TS$o_bs3hbsvpZ1Ajzod-)S@k3gMDWK zhF#|o!o4xJAArp27EUc9W2?jyCh>$x3uX zfUE@tQ*MgJTk`MAy&%``DJf6|Q)=lc=otXv>5m$jlz}r{7f|K}W-kUwj8GKVL(NsV*Fbn)i5i(N?`7Ndy$hvS~s0{{R307*qoM6N<$f*}_dBLDyZ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/regular_smile.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/regular_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdcf5c33e3973c6fd0bf87b615ba4bbdc3b7e38b GIT binary patch literal 1209 zcmeH`{ZrF*0LMT3GPk)0SsSu7wzZuPkcY8=Y@XxXkYJc`vj^-hEJ-UX(mJTq4h7@} zjUQyoJ9$VW2By-gAwv-k-DKK8PKQ$-N{I24m7O=PYbE=B-<|(NKlSN zvYC?tv{5(}hc+%wb8u!EI=DC`!08o>u6T6t;1a+sM5hQ{@$ke?JH>M@8O}=3Aw!1( z-z3rBsuny+3l~(l@ECfe=uJR>BF-m8`{cMRN56_Wr)4}^`dliyGT_N%`kqGL26XGu zn??6;j$Tnk{c3pS7*N2UL=Px&Rf&KagHJ>QS~{S?kOntaVQ>v@u0?P)LTeF9#%K!0 z);;_&4R_Npna23j>5*q~M~`p@-D^UB0WMjXYg_5j9A?}U^H~tu$xIf-hDz|$?xl&h zVq>KkJAlw3X6!IMQ$o*vieM#1st~HhgcY}KxN{Vv^|7fIX6nnOa5d)YG24v!FEHJT zS!eA2S^V}LX1g%g9h*OogZQd7@HIva4&>uUZTg?QT8tZfND3d6gQisHn52 zRCf2+0^cUtaqIrYo$ePt(|s~r)|5W~ywdn_uID2C3ngE_tuZBk#%;D=Dxz%1|K6gj z=R9e)uYO#j@vcz)@!Fnp7VihOv#^jIdEIZWqMj2+evWq(M`~WNir@^!_%t qkE1T}vTO=}p^q(bnUvZ?!^Fpy?lJmG#KS@EM|@S8cpr;JHvJ1$jidMg literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/regular_smile.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/regular_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2649b78af3e4e11df8026e70531a9e0c81b117 GIT binary patch literal 1084 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/shades_smile.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/shades_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d93474c32aa7d066bde566fdd746483f5dd0aea GIT binary patch literal 1231 zcmd^;{ZrBh9Du*Rqo#-COCgz}9k}mLE)5)f;Ya`Ll)G~LSHB&!Zf5)C5p5LDzp2OUDlq&K;e2`ZN zauAKC(kU^FC~6EE!$9ebkLXO4!J;zbqFL-{_MxbxqvWJxlsGoZj;FEMA0{6o%TK*u zm=T&Oj?5C$awXx4%*YG!=<_+~`CNJmpLvoWo01ZDQos^^&K3&eMW;DwX&iC-QIR-7 zB2AEHCKY6H#8STW+;K&ryhDa)FF95gMwBTcM~j^Xl)=+C+*cZKOW)!_Wd|*G(E6X9 zpv?i)j?jXER@aSAH|W4Xw=4YM3cYUgE!fp|EVSdG0}r=-x4ZViPdK=<8?;_9;=Q0f zuyV(LM-#BqAF!75=;lfTp0Wjx;+-NHbYsPiCUkbtj|*5&j>K1 zU^xg@3OtFfE=pBaoKRNqm0t=PYSS8T3LEQ1b@h^_`qOQV8O`5hshZEIROzag4DIc7 zZP!_?CR24QZ+j>fMiOC^XX=rd`ZJ6JXN`k0(~!(Kn!TmxJ)Qbw=TWN3kZ-z|Z@OP# zG!||>5W~Z?t(iQSQEbo4wyhUnsu-p#VXhp^Rq$Ii{C@4t<5F0-28;DzRc)=d!*VxR z`(R-Jo(#dtAgq~TeHJzz!K-=LT!Ni9u(O5yKM458-UdPXkdU{zZ=Yad07-WyaC(~b z#qGozwb_Z+iral^Sj{Z?wJ}D?<1s1WUn}=>stHduaphdE(Ban>y`joe;2YW?J5+{IC3Z}B%e=xIb zn$z5+PB6(`ygN^Pw<}q?==*{CfQsBq?YpsSZ>WSb(%E5arg+*0ZmfEUnB2cewoEl6 z+2YJk#MpYMSd~0~#Ac6Bx4-m7FekuXPMqZVT%5#^z9Qpn9aB literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/shades_smile.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/shades_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..fdaa28b786cef4fdbd48a3f1fbf7c7aafc456d97 GIT binary patch literal 1204 zcmV;l1WWsgP)O_$|bO}9oX#bzD? z1cc;fz$uc@1Tu?2Nt-RX2#Mxgo0W3jPrv7V&(VX*W^MiP-QM?kzrWA(Jip)b{9c!? z{y$v)FAezt@DN3dvPI>h9=pozW9pm7zlKXtESjyC^L6m!TTs6QO1urJXEmn2DUW#X z3NFU6qCBpghC}nf8UP)caG?zT7S6Rk=&ym(0{dr44kf zXW(KHwyw=+XIH{WGqj6-PJ(XnTs;e27AT&m=`kwymI<8Ud7RvVRyBp|=ibz8ooTYd zS#W9wv`vTB$Kk{@I6eiM9~H@aPcHn~DLb5xidBr;;Cha){6zmAFKtssG?7vBh=??i zneIzp8|eFZlBO8WH84(vHqhHwXeKzs zOk(mPcI{4KS8fW)s}~X!96-1A2?PA?Wcq5SiZ6h~Rng*0*1gGV;s^?PmhOB>o3I?G z$VER=-PLS(VJ0bS7SYs{MZw-wT}@4ytVxe0J=vG)4`xuEGo5uQvkl*|%$vS%#P{+t zG7_Y~!ct5JJe$_7goc~2SXN`LNN2~EmAb4IX;|`7nQJx?800T2_9H0NjAh?TSWDO5 z^p&i}^67f!hX$fpis^ut^W|c~Bh7r0yNagzSJ?A@k}mbUH#d>MU^9O;Ji@iZ-h_#7 z??(wV)ui3@Rj*~=?hHaA1THMabijKkp2X%2CK3{&Xtt))d~B1Ux-^oKqIvCA$z|gt zXn4@@y%A)bbzhb) z_9r&RpKY1GT<-9PqYue;C&;ZFuTOGC#O#z)fOZ9wbphuU%QxtB3f$4uz7`%XTEtuYu|T^Kscsi4txRYIYg z0ddGWp0*D?xLD+AKx+hgNIFEdCsz-Qp)=3ZSWuZel)5v}umr6{QleN+M^P@(^6{BK@YPt3aq-qp!xeY3PB~VsW;A#}R$W3Fvt498CW85;#@F=f}k=VQa z%`KC{^y`&ZM@yYubvcyOvl>(1lt;Y()e5EkM=kneMl8{Y(*&Xdix=zRUZP!^Sxr3T8vcT~$o+Co#{RP(N>%i&Mj0vv6D zzg?k22N}A^(2c@X3Utz-I{>cI-Mw`9F$nsC;ASwWLhM}(M;~kLItD$V(943}NVv}N z{S@s`aU4HK|31KWXRpGkJ@jXu;0vH9{3P$ zXE`*V5_hG1OXz8?n^7V=IT{dRS?3o34Si9qb)mR}Vbx1N#6h4|-SB z8`j(4(7@`@=HoGsa~jr+TdQ-h_5jxBVci0oOW?7?_LH5>r(Vw=zU{w&*a0Ar|MwpX z;M=Glf;1xh=Z@!}NTC5D2#6B)E61cLGw_Sfyi8>k4?$u@;yh}E;Ka2|d!@A_kW{T^KUlDD1Pa@!w+o={LShVfi25`t;l60a!f>7T)VDC{ZanZ zXW7mpEJmDWBpw~+T@E=#^t1CPr0h59yrs?_#RW=IPOG8t8J3xg=f#xeq-9~135Of^ z)FsC;^dU8g8+VJAQw`I6fkK~gi<^RQ(_A6BGh0EeJ&i~>%0TH1IabnLBqCF3hEo5R z7Z?_CD^&QdYk}EQ1!0BQM nSLqg&lireGWl>tn5RD#+GA6>_JupT>h1}y^V*X?}hP?g{8;sL8 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/teeth_smile.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/teeth_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..5e63785e42152e16329c5156f444b06f411f1c00 GIT binary patch literal 1183 zcmV;Q1YrA#P)=u{*lMB(f;3ChP1fr1n8RxV@-_5S4w{Ll{JnkVH?VP|!=1 zfr1Y$WJJ(|m81p{)~-S`n-iPLs*)SxXPued|9t%a_xA9g{g@c7hYlRhy&09{xD8fGE`J)643(KE^ zo;Q!D_2Tn&@JP_Jll<5TzTc$G*wZwrYeL8jC}pdZjU7k{OSeJy`|w@AV*6QvZ}qOZ z8VIG74`q#UYHL`vRZxCEnwbItC`iPoK|%ip4@gPk!VIA3?{P0U?LG*W8!jG!Cx$YJ zrqyY^nAd>KOq>a0jH0|wv~p@bveImo#LyiQ!*?hdCMClnaek7-d7YABfvjb7N~vg4E?M}4E;O#b2LUM+y_FCIXOT`N>pb|i zdz(R3P>y!Asb68uey}Gd8gP!TfehaDP&B}jw0DP?x^VQqV5KakMh?>+^`V>{h`ZMi zEz6;6AOoBO(9(J_k8tc`%OK2HP&K7L;HEHkj9l{AJ;66mzKFw_qP1E!`k7pQq2@0do6@+C$yMqN#FyQ7S z+?j&5Uf4PaOV@n~yq4CBQ;Vps6ng#d`7^&Hx|M|83C;0y%e*?UTJd8_R+}i*E002ovPDHLkV1fcuF z@pzT*({({l*N42=81Z6L?8_}NH&!Lw-&Oy5d%~OTiEno%z1@}i=}`Wc!^K~Y08z=8 zqa|ODReU{ByL`pcRVx;(TCs4=+EtGZbUr@Z_w7`}x6{p^PqltK)AIdX`}gx*KQ8n< zIXd~-$yv`&&;4;};?K*Ie_oyb>-y|p*XRDaG5^Jx1+Oo!{e5%c@7v4%++F$S{@S-U zwqL(>`R1K#_wV2PaPQ#V2e&^yIQHq$sn1W(J$iEg>&t78A3uEd{K@kdPhY=z_3qu9 zUteDR{{H^Qk01a4|7V~*Q2fcl$iNWKpaZfB6ekYs{~O|)np;}in&R}M!Xu*ewI*om znp!((urkhM4eE%SH{X?0V}i6~TzhAfk5Au(by|A5I$CmE(akHPcJ*uN=vml1dpNJt zl#y88-ekui#9?EY@jo8!z9vd!5dd zgO=-sOyc8=Vr@!06Bjslc?h#qFe@BjXw^E!;_3N->%fi<3FW$9Px2QZcly8P#U>_Y z$5uX7x07BUA07~PS~<(aF?~H72g6Jz7msOOT%xmdYM$Qsc#4Hl@1IEKNv18XeezCG zd#VytR<5g>5Ow2*;FA-*bMEO?1a*~8;!|*$q!Cys(8?+}Ph(l=ZZTFyP7h6mFCQu{ hP7vo6<(n69!F;hen_@^yLcom=B67h}^_(mW)&Q&yJ3RmZ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/thumbs_down.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/thumbs_down.png new file mode 100644 index 0000000000000000000000000000000000000000..1823481f2f05404a08fcc9357ec930911ff28ca8 GIT binary patch literal 985 zcmV;~119{5P)&g8FSwa4`@0CXJpO@c*)LSW(_eh~ zxvyh;2fD5UkV>Vv-1j}3MvhXu{tooodc3{>9=!%BRfN=VoIDgA?CIYb=|4~Fp|1%v zJ@}?+*(Vm@67c16IdokoVNH^-Ced}B0vfHm4iRqIL10}IRsJASs^u&dAyg1x)NP<~ z>!S>QdXQY|<{Oca@z4TXUD}3}$}LPuK}eOEKgYR#x!ZMg<-^@d+mYDmNXUqqmYs0H zRaFCAGg;1-DoB-@a0}6WuPpkVVu7K)GfZ51tG;2^v6H}lxinEzRW!A78C+LAh=h!F?#dMnA;cP0YbDK9AH_nBUoW1dkk2f}NJV4L8o?iF zZ*;*unrC%U%2h91qImt>z57L1$nXzm$t1_|N7@@)vPdaWq|3GRw7emuO%Xyts`|1h zk1xP{avY#RU3R*H38|FiC=XOfm3+}*;9M6t?tY8D2$9ZLZyk=*TwtVzwR zziwP(ChG-Qzmf(OV5MAnS#P11HpW}yt~j4%K9xlA=m3riq%}>euC6xldQ0zCCX+!S z&o39=r*Z3J1a5Dln4N{}ECs+E>?JW8TPBC%F)+gS(7gAU19S_=aZbhKV~3YLTy5J3 zia)q|Y9GxVPvY~}Ekfc07YN>ag!=8zSN1ps3_o1@&>`7DZ3`oOG-tE35X*E6TjnwI_4N@|MLeio6C;Rj+vpB-*i?CXSEc9djG z&v5O>^W69P#FS~-p_TGi9jIy9v%qs3?th8t$>Bx6x4MSx>?A9@DbZ{|Ub2k|@v#^qQ94zgGM|?gu;u literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/thumbs_up.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/thumbs_up.gif new file mode 100644 index 0000000000000000000000000000000000000000..9cc37029a9dc201ab9e0bd3a7cba4083cf56b874 GIT binary patch literal 714 zcmZ?wbhEHb6lV};_{P9+u!8w;CG){bmP6GXN9%Zw)bSr};6L6dc%nu0c&p6mcFB{S z$|pNjPWNhG=u^HjMfdDP!)wzGZ_GBoFvI@VT+7?@ZLciwySgOw+VZIDE8`w4_jtU@ z_vzZ87aJp9Y>IukCFaJeg!{YdUvE!%vpwKd`*OJW%aP(Q$I8AQuljnT z=G)2oJi*oo@birsezD*6(NAzn|;;e!lDbh3+30 zdY>Gf{Oshc=cniXxHR$Sm8n0kPXBd%_OBcBUz}O+`tsV}Hy8fCz3k83m4EK9eS2g3 z^;?&3-nn-F{=E*IrCpB|n1{Pf(TC-=X;y!QCkrMWMO1rh-c6NSp|v{2loFB@lDMwt!>RA!mJEE3`|1m z8k1yL^kd`VVh!Tr;|#gfG}YBjO|>RY($J0a_m9$@(-z0Dk|VIa*+_7uhMBX2g^uRR z)ltVbw8VMwF!eI?iYW&A8tCd8_-<^oV;5w%+wm|?LTZv4hs%stGvb7a@XARFl0qu&8#;doRc(B5UYKO)& i+9x_2`2^c%N*rutViFJS3B4&2{A`z>(S8;t25SHSpFQOO literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/thumbs_up.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/thumbs_up.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e8b22a3cc95d0d6e7e2de697e9e7fe910ce9ff GIT binary patch literal 959 zcmV;w13>(VP){U?kWlzfV zL6}8_flmtBt?C|RR2^u$tg zC4YQ!u($L2xo+lu@8$ZrZYBqNp90?4jB>4#Ev6Cr6L+K^CQgt)z8$>=PkfzrV;8jjgV~`Aysczw;3Uur z)Za;uB)Z7`b{1pT9ss;vABpzEjP|`vjq$+IoZ89I)j?d>1;FR?)poQWI3ABTdNiff zA!qu}zR|BwYSzRx3QKD$Ow))aIxt(yEuNhkBQ^X3<82@F{E=h${eA%Q`8<6WzTw5A zFF88UlfHaL3;HFAXI{gjZ(9Kb?tdJlK)Mb}I7rts@DBH^y~?A>7teuS5Pg4i&Bb!KTrlw)fi1k%}ZNX z5B}i2Ws{UxfRfirio3#Hu~d3ng?lntYg!LP`Wm|5;nvmub)HJGh+3`^?%thD|=u6{?gEg?cUvO z2MOta*LZ)HP9K zG!u;NqyE9e%!qo1l0$bkE;`x|5RW&W-w3V&?*p#_=9-@jut)pI&@VyM6!w002ovPDHLkV1lw`)rbH9 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/tongue_smile.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/tongue_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..81e05b0f6adccdc330a951fbc4f7f109da3d2ebc GIT binary patch literal 1210 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..f9714d1b3ba5e9324a1a1663549ba28b45af9638 GIT binary patch literal 1039 zcmV+q1n~QbP)4=F;lf`~OS)ZA#arZuHf*sO8W+|6z`n`}0F?;IcQ-DJ0{X&*drm^%#jcjlb` zoEbH{utX(miPY8s2Y_Cn$9DkB_X*&qxSh>Z1OTcMyd_e56fvKY_%4b)0rmtWC%na` zUWoV}J(NJ{m*RHz%uV4fk=h2}BQlqdGj;-k4zxT9O?^h2u^2I6)$RT1uiWr|B5-pPeQard53H20x$zoFJ*sMRYVK&TyRI-v0hNRGky8$!oh ziaoE!K;2&&pcMW&7e6>IS3kzR??usSUg_MA;O4;JU*I0RkgsxYD?h@P%_N1bz8@#)x1fDOH{OsNwygnCj4WjE%>1j&g z0bqirZn(4tweEUK-=9lkFBaI$BH=0?>DmGU5@ z{=8==Y^~W8&eAgc{udI8BHV`7Tj0oe0u^YD+u6)U`=_Ue8R>=kYJ=8#UC`ncAZ&;# zMKJ{tjRcyEUR~52IS=9X_4d~QaXWj4aQhJZ-hu1Onu24>>+0)Z+;TmPK{;ziFVAWA zy$#{^q0+lumn1nr+sPPv2O(3?YY_+KrDzBk&37Kb~gv z1xQapmG&M9jUWQ9Q5e5m4V`fCG=w|80A7jP*~R~amjpS6IH&mgn+VBC)*ZZ~R`i{Z z*{HzFaXb5ECA}-c{QwQXLqHeM?T-Mz0F(ZB?#8F>mf-(~{R;@jTLnf*B0a2 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/wink_smile.gif b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/wink_smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..6d3d64bd126a56382452a47faa20e3e0e8185a01 GIT binary patch literal 1202 zcmeH`drwmb07q|2ffgD%3r#Ptv=s!@suUKf%GMUUQ4Mni_oAx}+P+B#W9t zc`384uRy9(c??$YRj7s02u08!1_wiIJA=Vix``y#Y!e&W`&;}H`)lV5oa7{@c-Onq zZ5lqoCsqierJVS&lGb*B-mYa_Js8{b9n*0r)_#aN(#-L+ut&{nMo;tZT9W)0=1i{u z9dxuup(6_2F|fvjPqd%W= zO5ogz>ryzjW9Y4wo9P%!!L2mh5d>~;h)f7^SA;1M?ySSFS(wfY&The64%}jR#Q1#^ zyj!U8yvR(!>ciYu^ZAkaT+B)FI4?4!z>Pf^R#UfkM;<6Ck0Ly(#_VU*{HNhbEgn{^ zdMm^3D!8jLdzf+`iTJb;|M!^IW2Oeb)x%ql`$sWn!~;|K(FN+!`PIh;JTbvZ2Jw6r&+p@f2QTNb;zQ^UP^$n%{Lg<|Konxo2%?@4 zzt+BfLe2yc&q|Y;&59yMVw|$7wrMO{VU|{x(g}TnMdb>`1%8$FIrV-+gD(uoXDH;IDdB|9~>2iP04OUyz2P0L_K z)idKS*;BkVYp-;A4LiO#%h4>iKFzC~Y?11h>b~3?Hbv)ttP6b0tg~@8*T`L_wAR?M z#EfE95~(LtoaW7zd&GDKr*z|n1~#qlRMQDTkx=d8OpIwfjrot4!hSyC|6!7HG{yai$rao}e-0@~E!k<%WdMdG-dz-lMHG mG1sQDXpDj5@2CU?g~HL3TxHM|Rq%J|xf8L;ou9~w9sdH=NT%Qb literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/wink_smile.png b/php/pic_switch_demo/static/ckeditor/plugins/smiley/images/wink_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..7c99c3fc54c753dcfe19ff73e225733a2ad7261e GIT binary patch literal 1114 zcmV-g1f~0lP)kxuNha}UkKykNhbfsO}d(O{?d$--fh(36dZ+^M==6-(X zoZt6%jv5`CWUi4)G)IB8Krhha3n1-l0Qf2E6bo|#05umpm1y3I*bm4ZPvQ)KGXVJk z?_<0d626ifb13~n)+v7eukci&xgB_y!ucJX+zDY9QV&CXHMFh)rQq6WxH<@<-$1nn z>pp_$y@!BZS*JKYC)@+eX?}a>9?tF+vtp-W{%TbD462$zOg@Vw<4vDY)}- z=zQf+)+s(y2TvuMw^A5B%#qdNu6lw7xuBHIfruw-=T2ZPv~7f?`{2tSVbcjkblJA) z8YmHoB4(Jc*C(a5io{}QHv=Z(Y_q2VOiEG z7BsMyOUIIw&mt{hbR`4UGWzFrK0TD-;D;l8|LqvIW|%4)(*0wk`yHmrW;W^hy)gel z2#4X)v7~QdG|)>v4f7h&ZXT=)#xn9(mG#>ev*r0NVvE|CELp}UjK3NfpY&HG0&WS( z9Ds!nK|YP&8-#!!oI!|$!MHOv+OVz_Y#FA?tXL9;N|ly*jU+o-0Jvj*7%CNiy9CD5 zNOC)Bsbr|tEUnQ{z%hOty%H#JAgUTvuGDp?2GYd4p;XZr&thZOgs+a~sg@1X?{1Q< zmxLF9GpLAngLn1>;Fa3Uj~!hJQj1$Seqx-;TnTLOS-@CCM^O_)+z1~a-VNm{7~|>k z7;7KvU|w5pC7-Y2x&lBf)=1A1MJler3KB^o+>X|_!RG!PDzq%?6brNMKQVNe zBfZetXwh0D9*9^J+N03aNX1ozG3a6$MlM3tMMNW^xYbivHJg8iwyxRsuRFMg-rB*L z*P*$|qLrR$|7j_}we{{X)?!4nY9Dm%sXMrIz&X3<+?`>?UMSQw<%(Z}K=Ep(zNj@9 zY=dUyo6xyC1MCV~@y5#{2E5P2uTRqVEKHn+2JKxE8u4eUu>OkLSHk)O(6;#j!}ROrR5Q~c~E$gSXhf_7j7unOq*Bfu$O(2qad gc(wf}`2R8f0lW)%aFGbSlmGw#07*qoM6N<$f??$muK)l5 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt new file mode 100644 index 0000000..8a4ef1f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt @@ -0,0 +1,20 @@ +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license + +cs.js Found: 118 Missing: 0 +cy.js Found: 118 Missing: 0 +de.js Found: 118 Missing: 0 +el.js Found: 16 Missing: 102 +eo.js Found: 118 Missing: 0 +et.js Found: 31 Missing: 87 +fa.js Found: 24 Missing: 94 +fi.js Found: 23 Missing: 95 +fr.js Found: 118 Missing: 0 +hr.js Found: 23 Missing: 95 +it.js Found: 118 Missing: 0 +nb.js Found: 118 Missing: 0 +nl.js Found: 118 Missing: 0 +no.js Found: 118 Missing: 0 +tr.js Found: 118 Missing: 0 +ug.js Found: 39 Missing: 79 +zh-cn.js Found: 118 Missing: 0 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/af.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/af.js new file mode 100644 index 0000000..56c39b6 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/af.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","af",{euro:"Euroteken",lsquo:"Linker enkelkwotasie",rsquo:"Regter enkelkwotasie",ldquo:"Linker dubbelkwotasie",rdquo:"Regter dubbelkwotasie",ndash:"Kortkoppelteken",mdash:"Langkoppelteken",iexcl:"Omgekeerdeuitroepteken",cent:"Centteken",pound:"Pondteken",curren:"Geldeenheidteken",yen:"Yenteken",brvbar:"Gebreekte balk",sect:"Afdeelingsteken",uml:"Deelteken",copy:"Kopieregteken",ordf:"Vroulikekenteken",laquo:"Linkgeoorienteerde aanhaalingsteken",not:"Verbodeteken", +reg:"Regestrasieteken",macr:"Lengteteken",deg:"Gradeteken",sup2:"Kwadraatteken",sup3:"Kubiekteken",acute:"Akuutaksentteken",micro:"Mikroteken",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ar.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ar.js new file mode 100644 index 0000000..acb6c92 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ar.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ar",{euro:"رمز اليورو",lsquo:"علامة تنصيص فردية علي اليسار",rsquo:"علامة تنصيص فردية علي اليمين",ldquo:"علامة تنصيص مزدوجة علي اليسار",rdquo:"علامة تنصيص مزدوجة علي اليمين",ndash:"En dash",mdash:"Em dash",iexcl:"علامة تعجب مقلوبة",cent:"رمز السنت",pound:"رمز الاسترليني",curren:"رمز العملة",yen:"رمز الين",brvbar:"شريط مقطوع",sect:"رمز القسم",uml:"Diaeresis",copy:"علامة حقوق الطبع",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"ليست علامة",reg:"علامة مسجّلة",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"علامة الإستفهام غير صحيحة",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/bg.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/bg.js new file mode 100644 index 0000000..0bf8749 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/bg.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","bg",{euro:"Евро знак",lsquo:"Лява маркировка за цитат",rsquo:"Дясна маркировка за цитат",ldquo:"Лява двойна кавичка за цитат",rdquo:"Дясна двойна кавичка за цитат",ndash:"\\\\",mdash:"/",iexcl:"Обърната питанка",cent:"Знак за цент",pound:"Знак за паунд",curren:"Валутен знак",yen:"Знак за йена",brvbar:"Прекъсната линия",sect:"Знак за секция",uml:"Diaeresis",copy:"Знак за Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ca.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ca.js new file mode 100644 index 0000000..e650437 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ca.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Barra trencada",sect:"Símbol de secció",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Indicador ordinal femení", +laquo:"Signe de cometes angulars esquerra",not:"Símbol de negació",reg:"Símbol registrat",macr:"Macron",deg:"Símbol de grau",sup2:"Superíndex dos",sup3:"Superíndex tres",acute:"Accent agut",micro:"Símbol de micro",para:"Símbol de calderó",middot:"Punt volat",cedil:"Ce trencada",sup1:"Superíndex u",ordm:"Indicador ordinal masculí",raquo:"Signe de cometes angulars dreta",frac14:"Fracció vulgar un quart",frac12:"Fracció vulgar una meitat",frac34:"Fracció vulgar tres quarts",iquest:"Símbol d'interrogació invertit", +Agrave:"Lletra majúscula llatina A amb accent greu",Aacute:"Lletra majúscula llatina A amb accent agut",Acirc:"Lletra majúscula llatina A amb circumflex",Atilde:"Lletra majúscula llatina A amb titlla",Auml:"Lletra majúscula llatina A amb dièresi",Aring:"Lletra majúscula llatina A amb anell superior",AElig:"Lletra majúscula llatina Æ",Ccedil:"Lletra majúscula llatina C amb ce trencada",Egrave:"Lletra majúscula llatina E amb accent greu",Eacute:"Lletra majúscula llatina E amb accent agut",Ecirc:"Lletra majúscula llatina E amb circumflex", +Euml:"Lletra majúscula llatina E amb dièresi",Igrave:"Lletra majúscula llatina I amb accent greu",Iacute:"Lletra majúscula llatina I amb accent agut",Icirc:"Lletra majúscula llatina I amb circumflex",Iuml:"Lletra majúscula llatina I amb dièresi",ETH:"Lletra majúscula llatina Eth",Ntilde:"Lletra majúscula llatina N amb titlla",Ograve:"Lletra majúscula llatina O amb accent greu",Oacute:"Lletra majúscula llatina O amb accent agut",Ocirc:"Lletra majúscula llatina O amb circumflex",Otilde:"Lletra majúscula llatina O amb titlla", +Ouml:"Lletra majúscula llatina O amb dièresi",times:"Símbol de multiplicació",Oslash:"Lletra majúscula llatina O amb barra",Ugrave:"Lletra majúscula llatina U amb accent greu",Uacute:"Lletra majúscula llatina U amb accent agut",Ucirc:"Lletra majúscula llatina U amb circumflex",Uuml:"Lletra majúscula llatina U amb dièresi",Yacute:"Lletra majúscula llatina Y amb accent agut",THORN:"Lletra majúscula llatina Thorn",szlig:"Lletra minúscula llatina sharp s",agrave:"Lletra minúscula llatina a amb accent greu", +aacute:"Lletra minúscula llatina a amb accent agut",acirc:"Lletra minúscula llatina a amb circumflex",atilde:"Lletra minúscula llatina a amb titlla",auml:"Lletra minúscula llatina a amb dièresi",aring:"Lletra minúscula llatina a amb anell superior",aelig:"Lletra minúscula llatina æ",ccedil:"Lletra minúscula llatina c amb ce trencada",egrave:"Lletra minúscula llatina e amb accent greu",eacute:"Lletra minúscula llatina e amb accent agut",ecirc:"Lletra minúscula llatina e amb circumflex",euml:"Lletra minúscula llatina e amb dièresi", +igrave:"Lletra minúscula llatina i amb accent greu",iacute:"Lletra minúscula llatina i amb accent agut",icirc:"Lletra minúscula llatina i amb circumflex",iuml:"Lletra minúscula llatina i amb dièresi",eth:"Lletra minúscula llatina eth",ntilde:"Lletra minúscula llatina n amb titlla",ograve:"Lletra minúscula llatina o amb accent greu",oacute:"Lletra minúscula llatina o amb accent agut",ocirc:"Lletra minúscula llatina o amb circumflex",otilde:"Lletra minúscula llatina o amb titlla",ouml:"Lletra minúscula llatina o amb dièresi", +divide:"Símbol de divisió",oslash:"Lletra minúscula llatina o amb barra",ugrave:"Lletra minúscula llatina u amb accent greu",uacute:"Lletra minúscula llatina u amb accent agut",ucirc:"Lletra minúscula llatina u amb circumflex",uuml:"Lletra minúscula llatina u amb dièresi",yacute:"Lletra minúscula llatina y amb accent agut",thorn:"Lletra minúscula llatina thorn",yuml:"Lletra minúscula llatina y amb dièresi",OElig:"Lligadura majúscula llatina OE",oelig:"Lligadura minúscula llatina oe",372:"Lletra majúscula llatina W amb circumflex", +374:"Lletra majúscula llatina Y amb circumflex",373:"Lletra minúscula llatina w amb circumflex",375:"Lletra minúscula llatina y amb circumflex",sbquo:"Signe de cita simple baixa-9",8219:"Signe de cita simple alta-invertida-9",bdquo:"Signe de cita doble baixa-9",hellip:"Punts suspensius",trade:"Símbol de marca registrada",9658:"Punter negre apuntant cap a la dreta",bull:"Vinyeta",rarr:"Fletxa cap a la dreta",rArr:"Doble fletxa cap a la dreta",hArr:"Doble fletxa esquerra dreta",diams:"Vestit negre diamant", +asymp:"Gairebé igual a"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/cs.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/cs.js new file mode 100644 index 0000000..c2b38f0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/cs.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"Počáteční uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"Počáteční uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrácený vykřičník",cent:"Znak centu",pound:"Znak libry",curren:"Znak měny",yen:"Znak jenu",brvbar:"Přerušená svislá čára",sect:"Znak oddílu",uml:"Přehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo", +not:"Logistický zápor",reg:"Znak registrace",macr:"Pomlčka nad",deg:"Znak stupně",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"Tečka uprostřed",cedil:"Ocásek vlevo",sup1:"Jednička jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"Obyčejný zlomek jedna čtvrtina",frac12:"Obyčejný zlomek jedna polovina",frac34:"Obyčejný zlomek tři čtvrtiny",iquest:"Znak obráceného otazníku", +Agrave:"Velké písmeno latinky A s čárkou nad vlevo",Aacute:"Velké písmeno latinky A s čárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokáněm",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvěma tečkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s čárkou nad vlevo",Eacute:"Velké písmeno latinky E s čárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokáněm", +Euml:"Velké písmeno latinky E s dvěma tečkami",Igrave:"Velké písmeno latinky I s čárkou nad vlevo",Iacute:"Velké písmeno latinky I s čárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokáněm",Iuml:"Velké písmeno latinky I s dvěma tečkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s čárkou nad vlevo",Oacute:"Velké písmeno latinky O s čárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokáněm",Otilde:"Velké písmeno latinky O s tildou", +Ouml:"Velké písmeno latinky O s dvěma tečkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O přeškrtnuté",Ugrave:"Velké písmeno latinky U s čárkou nad vlevo",Uacute:"Velké písmeno latinky U s čárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokáněm",Uuml:"Velké písmeno latinky U s dvěma tečkami",Yacute:"Velké písmeno latinky Y s čárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s čárkou nad vlevo",aacute:"Malé písmeno latinky a s čárkou nad vpravo", +acirc:"Malé písmeno latinky a s vokáněm",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvěma tečkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s čárkou nad vlevo",eacute:"Malé písmeno latinky e s čárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokáněm",euml:"Malé písmeno latinky e s dvěma tečkami",igrave:"Malé písmeno latinky i s čárkou nad vlevo",iacute:"Malé písmeno latinky i s čárkou nad vpravo", +icirc:"Malé písmeno latinky i s vokáněm",iuml:"Malé písmeno latinky i s dvěma tečkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s čárkou nad vlevo",oacute:"Malé písmeno latinky o s čárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokáněm",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvěma tečkami",divide:"Znak dělení",oslash:"Malé písmeno latinky o přeškrtnuté",ugrave:"Malé písmeno latinky u s čárkou nad vlevo", +uacute:"Malé písmeno latinky u s čárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokáněm",uuml:"Malé písmeno latinky u s dvěma tečkami",yacute:"Malé písmeno latinky y s čárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvěma tečkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokáněm",374:"Velké písmeno latinky Y s vokáněm",373:"Malé písmeno latinky w s vokáněm",375:"Malé písmeno latinky y s vokáněm",sbquo:"Dolní 9 uvozovka jednoduchá", +8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"Trojtečkový úvod",trade:"Obchodní značka",9658:"Černý ukazatel směřující vpravo",bull:"Kolečko",rarr:"Šipka vpravo",rArr:"Dvojitá šipka vpravo",hArr:"Dvojitá šipka vlevo a vpravo",diams:"Černé piky",asymp:"Téměř se rovná"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/cy.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/cy.js new file mode 100644 index 0000000..77f59f6 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/cy.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid", +reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig", +Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom", +Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild", +Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig", +aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom", +euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom", +otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llythyren o fach Lladinaidd gyda strôc",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod", +OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith", +diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/da.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/da.js new file mode 100644 index 0000000..e23a285 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/da.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","da",{euro:"Euro-tegn",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"Bindestreg",mdash:"Tankestreg",iexcl:"Inverted exclamation mark",cent:"Cent-tegn",pound:"Pund-tegn",curren:"Kurs-tegn",yen:"Yen-tegn",brvbar:"Brudt streg",sect:"Paragraftegn",uml:"Diaeresis",copy:"Copyright-tegn",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registreret varemærke tegn",macr:"Macron",deg:"Grad-tegn",sup2:"Superscript to",sup3:"Superscript tre",acute:"Acute accent",micro:"Mikro-tegn",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript et",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Varemærke-tegn",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/de.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/de.js new file mode 100644 index 0000000..6b3ce87 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/de.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"kleiner Strich",mdash:"mittlerer Strich",iexcl:"invertiertes Ausrufezeichen",cent:"Cent",pound:"Pfund",curren:"Währung",yen:"Yen",brvbar:"gestrichelte Linie",sect:"§ Zeichen",uml:"Diäresis",copy:"Copyright",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",not:"Not-Zeichen", +reg:"Registriert",macr:"Längezeichen",deg:"Grad",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Micro",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",Acirc:"Lateinischer Buchstabe A mit Zirkumflex", +Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",Icirc:"Lateinischer Buchstabe I mit Zirkumflex", +Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",Uacute:"Lateinischer Buchstabe U mit Akutakzent", +Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",aring:"Kleiner lateinischer Buchstabe a mit Ring oben", +aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",iuml:"Kleiner lateinischer Buchstabe i mit Trema", +eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",uacute:"Kleiner lateinischer Buchstabe u mit Akut", +ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",375:"Kleiner lateinischer Buchstabe y mit Zirkumflex", +sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/el.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/el.js new file mode 100644 index 0000000..7964489 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/el.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","el",{euro:"Σύμβολο Ευρώ",lsquo:"Αριστερός χαρακτήρας μονού εισαγωγικού",rsquo:"Δεξιός χαρακτήρας μονού εισαγωγικού",ldquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",rdquo:"Δεξιός χαρακτήρας διπλού εισαγωγικού",ndash:"Παύλα en",mdash:"Παύλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"Σύμβολο σεντ",pound:"Σύμβολο λίρας",curren:"Σύμβολο συναλλαγματικής μονάδας",yen:"Σύμβολο Γιεν",brvbar:"Σπασμένη μπάρα",sect:"Σύμβολο τμήματος",uml:"Διαίρεση",copy:"Σύμβολο πνευματικών δικαιωμάτων", +ordf:"Feminine ordinal indicator",laquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",not:"Σύμβολο άρνησης",reg:"Σύμβολο σημάτων κατατεθέν",macr:"Μακρόν",deg:"Σύμβολο βαθμού",sup2:"Εκτεθειμένο δύο",sup3:"Εκτεθειμένο τρία",acute:"Οξεία",micro:"Σύμβολο μικρού",para:"Σύμβολο παραγράφου",middot:"Μέση τελεία",cedil:"Υπογεγραμμένη",sup1:"Εκτεθειμένο ένα",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Γνήσιο κλάσμα ενός τετάρτου",frac12:"Γνήσιο κλάσμα ενός δεύτερου", +frac34:"Γνήσιο κλάσμα τριών τετάρτων",iquest:"Ανάποδο θαυμαστικό",Agrave:"Λατινικό κεφαλαίο γράμμα A με βαρεία",Aacute:"Λατινικό κεφαλαίο γράμμα A με οξεία",Acirc:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Atilde:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Auml:"Λατινικό κεφαλαίο γράμμα A με διαλυτικά",Aring:"Λατινικό κεφαλαίο γράμμα A με δακτύλιο επάνω",AElig:"Λατινικό κεφαλαίο γράμμα Æ",Ccedil:"Λατινικό κεφαλαίο γράμμα C με υπογεγραμμένη",Egrave:"Λατινικό κεφαλαίο γράμμα E με βαρεία",Eacute:"Λατινικό κεφαλαίο γράμμα E με οξεία", +Ecirc:"Λατινικό κεφαλαίο γράμμα Ε με περισπωμένη ",Euml:"Λατινικό κεφαλαίο γράμμα Ε με διαλυτικά",Igrave:"Λατινικό κεφαλαίο γράμμα I με βαρεία",Iacute:"Λατινικό κεφαλαίο γράμμα I με οξεία",Icirc:"Λατινικό κεφαλαίο γράμμα I με περισπωμένη",Iuml:"Λατινικό κεφαλαίο γράμμα I με διαλυτικά ",ETH:"Λατινικό κεφαλαίο γράμμα Eth",Ntilde:"Λατινικό κεφαλαίο γράμμα N με περισπωμένη",Ograve:"Λατινικό κεφαλαίο γράμμα O με βαρεία",Oacute:"Λατινικό κεφαλαίο γράμμα O με οξεία",Ocirc:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη ", +Otilde:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη",Ouml:"Λατινικό κεφαλαίο γράμμα O με διαλυτικά",times:"Σύμβολο πολλαπλασιασμού",Oslash:"Λατινικό κεφαλαίο γράμμα O με μολυβιά",Ugrave:"Λατινικό κεφαλαίο γράμμα U με βαρεία",Uacute:"Λατινικό κεφαλαίο γράμμα U με οξεία",Ucirc:"Λατινικό κεφαλαίο γράμμα U με περισπωμένη",Uuml:"Λατινικό κεφαλαίο γράμμα U με διαλυτικά",Yacute:"Λατινικό κεφαλαίο γράμμα Y με οξεία",THORN:"Λατινικό κεφαλαίο γράμμα Thorn",szlig:"Λατινικό μικρό γράμμα απότομο s",agrave:"Λατινικό μικρό γράμμα a με βαρεία", +aacute:"Λατινικό μικρό γράμμα a με οξεία",acirc:"Λατινικό μικρό γράμμα a με περισπωμένη",atilde:"Λατινικό μικρό γράμμα a με περισπωμένη",auml:"Λατινικό μικρό γράμμα a με διαλυτικά",aring:"Λατινικό μικρό γράμμα a με δακτύλιο πάνω",aelig:"Λατινικό μικρό γράμμα æ",ccedil:"Λατινικό μικρό γράμμα c με υπογεγραμμένη",egrave:"Λατινικό μικρό γράμμα ε με βαρεία",eacute:"Λατινικό μικρό γράμμα e με οξεία",ecirc:"Λατινικό μικρό γράμμα e με περισπωμένη",euml:"Λατινικό μικρό γράμμα e με διαλυτικά",igrave:"Λατινικό μικρό γράμμα i με βαρεία", +iacute:"Λατινικό μικρό γράμμα i με οξεία",icirc:"Λατινικό μικρό γράμμα i με περισπωμένη",iuml:"Λατινικό μικρό γράμμα i με διαλυτικά",eth:"Λατινικό μικρό γράμμα eth",ntilde:"Λατινικό μικρό γράμμα n με περισπωμένη",ograve:"Λατινικό μικρό γράμμα o με βαρεία",oacute:"Λατινικό μικρό γράμμα o με οξεία ",ocirc:"Λατινικό πεζό γράμμα o με περισπωμένη",otilde:"Λατινικό μικρό γράμμα o με περισπωμένη ",ouml:"Λατινικό μικρό γράμμα o με διαλυτικά",divide:"Σύμβολο διαίρεσης",oslash:"Λατινικό μικρό γράμμα o με περισπωμένη", +ugrave:"Λατινικό μικρό γράμμα u με βαρεία",uacute:"Λατινικό μικρό γράμμα u με οξεία",ucirc:"Λατινικό μικρό γράμμα u με περισπωμένη",uuml:"Λατινικό μικρό γράμμα u με διαλυτικά",yacute:"Λατινικό μικρό γράμμα y με οξεία",thorn:"Λατινικό μικρό γράμμα thorn",yuml:"Λατινικό μικρό γράμμα y με διαλυτικά",OElig:"Λατινικό κεφαλαίο σύμπλεγμα ΟΕ",oelig:"Λατινικό μικρό σύμπλεγμα oe",372:"Λατινικό κεφαλαίο γράμμα W με περισπωμένη",374:"Λατινικό κεφαλαίο γράμμα Y με περισπωμένη",373:"Λατινικό μικρό γράμμα w με περισπωμένη", +375:"Λατινικό μικρό γράμμα y με περισπωμένη",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Οριζόντια αποσιωπητικά",trade:"Σύμβολο εμπορικού κατατεθέν",9658:"Μαύρος δείκτης που δείχνει προς τα δεξιά",bull:"Κουκκίδα",rarr:"Δεξί βελάκι",rArr:"Διπλό δεξί βελάκι",hArr:"Διπλό βελάκι αριστερά-δεξιά",diams:"Μαύρο διαμάντι",asymp:"Σχεδόν ίσο με"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js new file mode 100644 index 0000000..5a14786 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","en-gb",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/en.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/en.js new file mode 100644 index 0000000..26f61c2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/en.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/eo.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/eo.js new file mode 100644 index 0000000..d44b0d2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/eo.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno", +sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao", +Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo", +Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno", +szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao", +igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno", +uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Œ",oelig:"Latina etlitera ligaturo œ",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo", +bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"Preskaŭ egala"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/es.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/es.js new file mode 100644 index 0000000..79d437f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/es.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","es",{euro:"Símbolo de euro",lsquo:"Comilla simple izquierda",rsquo:"Comilla simple derecha",ldquo:"Comilla doble izquierda",rdquo:"Comilla doble derecha",ndash:"Guión corto",mdash:"Guión medio largo",iexcl:"Signo de admiración invertido",cent:"Símbolo centavo",pound:"Símbolo libra",curren:"Símbolo moneda",yen:"Símbolo yen",brvbar:"Barra vertical rota",sect:"Símbolo sección",uml:"Diéresis",copy:"Signo de derechos de autor",ordf:"Indicador ordinal femenino",laquo:"Abre comillas angulares", +not:"Signo negación",reg:"Signo de marca registrada",macr:"Guión alto",deg:"Signo de grado",sup2:"Superíndice dos",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice uno",ordm:"Indicador orginal masculino",raquo:"Cierra comillas angulares",frac14:"Fracción ordinaria de un quarto",frac12:"Fracción ordinaria de una mitad",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina mayúscula con acento grave", +Aacute:"Letra A latina mayúscula con acento agudo",Acirc:"Letra A latina mayúscula con acento circunflejo",Atilde:"Letra A latina mayúscula con tilde",Auml:"Letra A latina mayúscula con diéresis",Aring:"Letra A latina mayúscula con aro arriba",AElig:"Letra Æ latina mayúscula",Ccedil:"Letra C latina mayúscula con cedilla",Egrave:"Letra E latina mayúscula con acento grave",Eacute:"Letra E latina mayúscula con acento agudo",Ecirc:"Letra E latina mayúscula con acento circunflejo",Euml:"Letra E latina mayúscula con diéresis", +Igrave:"Letra I latina mayúscula con acento grave",Iacute:"Letra I latina mayúscula con acento agudo",Icirc:"Letra I latina mayúscula con acento circunflejo",Iuml:"Letra I latina mayúscula con diéresis",ETH:"Letra Eth latina mayúscula",Ntilde:"Letra N latina mayúscula con tilde",Ograve:"Letra O latina mayúscula con acento grave",Oacute:"Letra O latina mayúscula con acento agudo",Ocirc:"Letra O latina mayúscula con acento circunflejo",Otilde:"Letra O latina mayúscula con tilde",Ouml:"Letra O latina mayúscula con diéresis", +times:"Signo de multiplicación",Oslash:"Letra O latina mayúscula con barra inclinada",Ugrave:"Letra U latina mayúscula con acento grave",Uacute:"Letra U latina mayúscula con acento agudo",Ucirc:"Letra U latina mayúscula con acento circunflejo",Uuml:"Letra U latina mayúscula con diéresis",Yacute:"Letra Y latina mayúscula con acento agudo",THORN:"Letra Thorn latina mayúscula",szlig:"Letra s latina fuerte pequeña",agrave:"Letra a latina pequeña con acento grave",aacute:"Letra a latina pequeña con acento agudo", +acirc:"Letra a latina pequeña con acento circunflejo",atilde:"Letra a latina pequeña con tilde",auml:"Letra a latina pequeña con diéresis",aring:"Letra a latina pequeña con aro arriba",aelig:"Letra æ latina pequeña",ccedil:"Letra c latina pequeña con cedilla",egrave:"Letra e latina pequeña con acento grave",eacute:"Letra e latina pequeña con acento agudo",ecirc:"Letra e latina pequeña con acento circunflejo",euml:"Letra e latina pequeña con diéresis",igrave:"Letra i latina pequeña con acento grave", +iacute:"Letra i latina pequeña con acento agudo",icirc:"Letra i latina pequeña con acento circunflejo",iuml:"Letra i latina pequeña con diéresis",eth:"Letra eth latina pequeña",ntilde:"Letra n latina pequeña con tilde",ograve:"Letra o latina pequeña con acento grave",oacute:"Letra o latina pequeña con acento agudo",ocirc:"Letra o latina pequeña con acento circunflejo",otilde:"Letra o latina pequeña con tilde",ouml:"Letra o latina pequeña con diéresis",divide:"Signo de división",oslash:"Letra o latina minúscula con barra inclinada", +ugrave:"Letra u latina pequeña con acento grave",uacute:"Letra u latina pequeña con acento agudo",ucirc:"Letra u latina pequeña con acento circunflejo",uuml:"Letra u latina pequeña con diéresis",yacute:"Letra u latina pequeña con acento agudo",thorn:"Letra thorn latina minúscula",yuml:"Letra y latina pequeña con diéresis",OElig:"Diptongo OE latino en mayúscula",oelig:"Diptongo oe latino en minúscula",372:"Letra W latina mayúscula con acento circunflejo",374:"Letra Y latina mayúscula con acento circunflejo", +373:"Letra w latina pequeña con acento circunflejo",375:"Letra y latina pequeña con acento circunflejo",sbquo:"Comilla simple baja-9",8219:"Comilla simple alta invertida-9",bdquo:"Comillas dobles bajas-9",hellip:"Puntos suspensivos horizontales",trade:"Signo de marca registrada",9658:"Apuntador negro apuntando a la derecha",bull:"Viñeta",rarr:"Flecha a la derecha",rArr:"Flecha doble a la derecha",hArr:"Flecha izquierda derecha doble",diams:"Diamante negro",asymp:"Casi igual a"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/et.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/et.js new file mode 100644 index 0000000..22c9056 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/et.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jagamismärk",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Kaubamärgi märk",9658:"Black right-pointing pointer", +bull:"Kuul",rarr:"Nool paremale",rArr:"Topeltnool paremale",hArr:"Topeltnool vasakule",diams:"Black diamond suit",asymp:"Ligikaudu võrdne"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fa.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fa.js new file mode 100644 index 0000000..e0b27c5 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fa.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت نقل قول دوتایی چپ",rdquo:"علامت نقل قول دوتایی راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"نشان سواگیری",copy:"نشان کپی رایت",ordf:"شاخص ترتیبی مونث",laquo:"اشاره چپ مکرر برای زاویه علامت نقل قول",not:"نشان ثبت نشده",reg:"نشان ثبت شده", +macr:"نشان خط بالای حرف",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"نشان محل بند",middot:"نقطه میانی",cedil:"سدیل",sup1:"بالانویس 1",ordm:"شاخص ترتیبی مذکر",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"واحد عامیانه 1/4",frac12:"واحد عامینه نصف",frac34:"واحد عامیانه 3/4",iquest:"علامت سوال معکوس",Agrave:"حرف A بزرگ لاتین با تلفظ غلیظ",Aacute:"حرف A بزرگ لاتین با تلفظ شدید",Acirc:"حرف A بزرگ لاتین با دور",Atilde:"حرف A بزرگ لاتین با صدای کامی", +Auml:"حرف A بزرگ لاتین با نشان سواگیری",Aring:"حرف A بزرگ لاتین با حلقه بالا",AElig:"حرف Æ بزرگ لاتین",Ccedil:"حرف C بزرگ لاتین با نشان سواگیری",Egrave:"حرف E بزرگ لاتین با تلفظ درشت",Eacute:"حرف E بزرگ لاتین با تلفظ زیر",Ecirc:"حرف E بزرگ لاتین با خمان",Euml:"حرف E بزرگ لاتین با نشان سواگیری",Igrave:"حرف I بزرگ لاتین با تلفظ درشت",Iacute:"حرف I بزرگ لاتین با تلفظ ریز",Icirc:"حرف I بزرگ لاتین با خمان",Iuml:"حرف I بزرگ لاتین با نشان سواگیری",ETH:"حرف لاتین بزرگ واکه ترتیبی",Ntilde:"حرف N بزرگ لاتین با مد", +Ograve:"حرف O بزرگ لاتین با تلفظ درشت",Oacute:"حرف O بزرگ لاتین با تلفظ ریز",Ocirc:"حرف O بزرگ لاتین با خمان",Otilde:"حرف O بزرگ لاتین با مد",Ouml:"حرف O بزرگ لاتین با نشان سواگیری",times:"نشان ضربدر",Oslash:"حرف O بزرگ لاتین با میان خط",Ugrave:"حرف U بزرگ لاتین با تلفظ درشت",Uacute:"حرف U بزرگ لاتین با تلفظ ریز",Ucirc:"حرف U بزرگ لاتین با خمان",Uuml:"حرف U بزرگ لاتین با نشان سواگیری",Yacute:"حرف Y بزرگ لاتین با تلفظ ریز",THORN:"حرف بزرگ لاتین خاردار",szlig:"حرف کوچک لاتین شارپ s",agrave:"حرف a کوچک لاتین با تلفظ درشت", +aacute:"حرف a کوچک لاتین با تلفظ ریز",acirc:"حرف a کوچک لاتین با خمان",atilde:"حرف a کوچک لاتین با صدای کامی",auml:"حرف a کوچک لاتین با نشان سواگیری",aring:"حرف a کوچک لاتین گوشواره دار",aelig:"حرف کوچک لاتین æ",ccedil:"حرف c کوچک لاتین با نشان سدیل",egrave:"حرف e کوچک لاتین با تلفظ درشت",eacute:"حرف e کوچک لاتین با تلفظ ریز",ecirc:"حرف e کوچک لاتین با خمان",euml:"حرف e کوچک لاتین با نشان سواگیری",igrave:"حرف i کوچک لاتین با تلفظ درشت",iacute:"حرف i کوچک لاتین با تلفظ ریز",icirc:"حرف i کوچک لاتین با خمان", +iuml:"حرف i کوچک لاتین با نشان سواگیری",eth:"حرف کوچک لاتین eth",ntilde:"حرف n کوچک لاتین با صدای کامی",ograve:"حرف o کوچک لاتین با تلفظ درشت",oacute:"حرف o کوچک لاتین با تلفظ زیر",ocirc:"حرف o کوچک لاتین با خمان",otilde:"حرف o کوچک لاتین با صدای کامی",ouml:"حرف o کوچک لاتین با نشان سواگیری",divide:"نشان بخش",oslash:"حرف o کوچک لاتین با میان خط",ugrave:"حرف u کوچک لاتین با تلفظ درشت",uacute:"حرف u کوچک لاتین با تلفظ ریز",ucirc:"حرف u کوچک لاتین با خمان",uuml:"حرف u کوچک لاتین با نشان سواگیری",yacute:"حرف y کوچک لاتین با تلفظ ریز", +thorn:"حرف کوچک لاتین خاردار",yuml:"حرف y کوچک لاتین با نشان سواگیری",OElig:"بند بزرگ لاتین OE",oelig:"بند کوچک لاتین oe",372:"حرف W بزرگ لاتین با خمان",374:"حرف Y بزرگ لاتین با خمان",373:"حرف w کوچک لاتین با خمان",375:"حرف y کوچک لاتین با خمان",sbquo:"نشان نقل قول تکی زیر-9",8219:"نشان نقل قول تکی high-reversed-9",bdquo:"نقل قول دوتایی پایین-9",hellip:"حذف افقی",trade:"نشان تجاری",9658:"نشانگر سیاه جهت راست",bull:"گلوله",rarr:"فلش راست",rArr:"فلش دوتایی راست",hArr:"فلش دوتایی چپ راست",diams:"نشان الماس سیاه", +asymp:"تقریبا برابر با"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fi.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fi.js new file mode 100644 index 0000000..6d701e3 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fi.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js new file mode 100644 index 0000000..d19e2e4 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fr-ca",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret",iexcl:"Point d'exclamation inversé",cent:"Symbole de cent",pound:"Symbole de Livre Sterling",curren:"Symbole monétaire",yen:"Symbole du Yen",brvbar:"Barre scindée",sect:"Symbole de section",uml:"Tréma",copy:"Symbole de copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", +not:"Indicateur de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigüe",micro:"Symbole micro",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Une demi",frac34:"Trois quart",iquest:"Point d'interrogation inversé",Agrave:"A accent grave",Aacute:"A accent aigüe",Acirc:"A circonflexe",Atilde:"A tilde",Auml:"A tréma", +Aring:"A avec un rond au dessus",AElig:"Æ majuscule",Ccedil:"C cédille",Egrave:"E accent grave",Eacute:"E accent aigüe",Ecirc:"E accent circonflexe",Euml:"E tréma",Igrave:"I accent grave",Iacute:"I accent aigüe",Icirc:"I accent circonflexe",Iuml:"I tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N tilde",Ograve:"O accent grave",Oacute:"O accent aigüe",Ocirc:"O accent circonflexe",Otilde:"O tilde",Ouml:"O tréma",times:"Symbole de multiplication",Oslash:"O barré",Ugrave:"U accent grave",Uacute:"U accent aigüe", +Ucirc:"U accent circonflexe",Uuml:"U tréma",Yacute:"Y accent aigüe",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a accent grave",aacute:"a accent aigüe",acirc:"a accent circonflexe",atilde:"a tilde",auml:"a tréma",aring:"a avec un cercle au dessus",aelig:"æ",ccedil:"c cédille",egrave:"e accent grave",eacute:"e accent aigüe",ecirc:"e accent circonflexe",euml:"e tréma",igrave:"i accent grave",iacute:"i accent aigüe",icirc:"i accent circonflexe",iuml:"i tréma", +eth:"Lettre minuscule islandaise ED",ntilde:"n tilde",ograve:"o accent grave",oacute:"o accent aigüe",ocirc:"O accent circonflexe",otilde:"O tilde",ouml:"O tréma",divide:"Symbole de division",oslash:"o barré",ugrave:"u accent grave",uacute:"u accent aigüe",ucirc:"u accent circonflexe",uuml:"u tréma",yacute:"y accent aigüe",thorn:"Lettre islandaise thorn minuscule",yuml:"y tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W accent circonflexe",374:"Y accent circonflexe", +373:"w accent circonflexe",375:"y accent circonflexe",sbquo:"Guillemet simple fermant",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Symbole de marque déposée",9658:"Flèche noire pointant vers la droite",bull:"Puce",rarr:"Flèche vers la droite",rArr:"Flèche double vers la droite",hArr:"Flèche double vers la gauche",diams:"Carreau",asymp:"Presque égal"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fr.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fr.js new file mode 100644 index 0000000..2d1ad09 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/fr.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre Sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", +not:"Crochet de négation",reg:"Marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"\\tExposant 3",acute:"Accent aigu",micro:"Omicron",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"\\tExposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Un demi",frac34:"Trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A majuscule accent grave",Aacute:"A majuscule accent aigu",Acirc:"A majuscule accent circonflexe",Atilde:"A majuscule avec caron", +Auml:"A majuscule tréma",Aring:"A majuscule avec un rond au-dessus",AElig:"Æ majuscule ligaturés",Ccedil:"C majuscule cédille",Egrave:"E majuscule accent grave",Eacute:"E majuscule accent aigu",Ecirc:"E majuscule accent circonflexe",Euml:"E majuscule tréma",Igrave:"I majuscule accent grave",Iacute:"I majuscule accent aigu",Icirc:"I majuscule accent circonflexe",Iuml:"I majuscule tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N majuscule avec caron",Ograve:"O majuscule accent grave",Oacute:"O majuscule accent aigu", +Ocirc:"O majuscule accent circonflexe",Otilde:"O majuscule avec caron",Ouml:"O majuscule tréma",times:"Multiplication",Oslash:"O majuscule barré",Ugrave:"U majuscule accent grave",Uacute:"U majuscule accent aigu",Ucirc:"U majuscule accent circonflexe",Uuml:"U majuscule tréma",Yacute:"Y majuscule accent aigu",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a minuscule accent grave",aacute:"a minuscule accent aigu",acirc:"a minuscule accent circonflexe",atilde:"a minuscule avec caron", +auml:"a minuscule tréma",aring:"a minuscule avec un rond au-dessus",aelig:"æ minuscule ligaturés",ccedil:"c minuscule cédille",egrave:"e minuscule accent grave",eacute:"e minuscule accent aigu",ecirc:"e minuscule accent circonflexe",euml:"e minuscule tréma",igrave:"i minuscule accent grave",iacute:"i minuscule accent aigu",icirc:"i minuscule accent circonflexe",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",ntilde:"n minuscule avec caron",ograve:"o minuscule accent grave",oacute:"o minuscule accent aigu", +ocirc:"o minuscule accent circonflexe",otilde:"o minuscule avec caron",ouml:"o minuscule tréma",divide:"Division",oslash:"o minuscule barré",ugrave:"u minuscule accent grave",uacute:"u minuscule accent aigu",ucirc:"u minuscule accent circonflexe",uuml:"u minuscule tréma",yacute:"y minuscule accent aigu",thorn:"Lettre islandaise thorn minuscule",yuml:"y minuscule tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W majuscule accent circonflexe",374:"Y majuscule accent circonflexe", +373:"w minuscule accent circonflexe",375:"y minuscule accent circonflexe",sbquo:"Guillemet simple fermant (anglais)",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Marque commerciale (trade mark)",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",hArr:"Double flèche vers la gauche",diams:"Carreau noir",asymp:"Presque égal"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/gl.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/gl.js new file mode 100644 index 0000000..f16d366 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/gl.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","gl",{euro:"Símbolo do euro",lsquo:"Comiña simple esquerda",rsquo:"Comiña simple dereita",ldquo:"Comiñas dobres esquerda",rdquo:"Comiñas dobres dereita",ndash:"Guión",mdash:"Raia",iexcl:"Signo de admiración invertido",cent:"Símbolo do centavo",pound:"Símbolo da libra",curren:"Símbolo de moeda",yen:"Símbolo do yen",brvbar:"Barra vertical rota",sect:"Símbolo de sección",uml:"Diérese",copy:"Símbolo de dereitos de autoría",ordf:"Indicador ordinal feminino",laquo:"Comiñas latinas, apertura", +not:"Signo negación",reg:"Símbolo de marca rexistrada",macr:"Guión alto",deg:"Signo de grao",sup2:"Superíndice dous",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo de micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice un",ordm:"Indicador ordinal masculino",raquo:"Comiñas latinas, peche",frac14:"Fracción ordinaria de un cuarto",frac12:"Fracción ordinaria de un medio",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina maiúscula con acento grave", +Aacute:"Letra A latina maiúscula con acento agudo",Acirc:"Letra A latina maiúscula con acento circunflexo",Atilde:"Letra A latina maiúscula con til",Auml:"Letra A latina maiúscula con diérese",Aring:"Letra A latina maiúscula con aro enriba",AElig:"Letra Æ latina maiúscula",Ccedil:"Letra C latina maiúscula con cedilla",Egrave:"Letra E latina maiúscula con acento grave",Eacute:"Letra E latina maiúscula con acento agudo",Ecirc:"Letra E latina maiúscula con acento circunflexo",Euml:"Letra E latina maiúscula con diérese", +Igrave:"Letra I latina maiúscula con acento grave",Iacute:"Letra I latina maiúscula con acento agudo",Icirc:"Letra I latina maiúscula con acento circunflexo",Iuml:"Letra I latina maiúscula con diérese",ETH:"Letra Ed latina maiúscula",Ntilde:"Letra N latina maiúscula con til",Ograve:"Letra O latina maiúscula con acento grave",Oacute:"Letra O latina maiúscula con acento agudo",Ocirc:"Letra O latina maiúscula con acento circunflexo",Otilde:"Letra O latina maiúscula con til",Ouml:"Letra O latina maiúscula con diérese", +times:"Signo de multiplicación",Oslash:"Letra O latina maiúscula con barra transversal",Ugrave:"Letra U latina maiúscula con acento grave",Uacute:"Letra U latina maiúscula con acento agudo",Ucirc:"Letra U latina maiúscula con acento circunflexo",Uuml:"Letra U latina maiúscula con diérese",Yacute:"Letra Y latina maiúscula con acento agudo",THORN:"Letra Thorn latina maiúscula",szlig:"Letra s latina forte minúscula",agrave:"Letra a latina minúscula con acento grave",aacute:"Letra a latina minúscula con acento agudo", +acirc:"Letra a latina minúscula con acento circunflexo",atilde:"Letra a latina minúscula con til",auml:"Letra a latina minúscula con diérese",aring:"Letra a latina minúscula con aro enriba",aelig:"Letra æ latina minúscula",ccedil:"Letra c latina minúscula con cedilla",egrave:"Letra e latina minúscula con acento grave",eacute:"Letra e latina minúscula con acento agudo",ecirc:"Letra e latina minúscula con acento circunflexo",euml:"Letra e latina minúscula con diérese",igrave:"Letra i latina minúscula con acento grave", +iacute:"Letra i latina minúscula con acento agudo",icirc:"Letra i latina minúscula con acento circunflexo",iuml:"Letra i latina minúscula con diérese",eth:"Letra ed latina minúscula",ntilde:"Letra n latina minúscula con til",ograve:"Letra o latina minúscula con acento grave",oacute:"Letra o latina minúscula con acento agudo",ocirc:"Letra o latina minúscula con acento circunflexo",otilde:"Letra o latina minúscula con til",ouml:"Letra o latina minúscula con diérese",divide:"Signo de división",oslash:"Letra o latina minúscula con barra transversal", +ugrave:"Letra u latina minúscula con acento grave",uacute:"Letra u latina minúscula con acento agudo",ucirc:"Letra u latina minúscula con acento circunflexo",uuml:"Letra u latina minúscula con diérese",yacute:"Letra y latina minúscula con acento agudo",thorn:"Letra Thorn latina minúscula",yuml:"Letra y latina minúscula con diérese",OElig:"Ligadura OE latina maiúscula",oelig:"Ligadura oe latina minúscula",372:"Letra W latina maiúscula con acento circunflexo",374:"Letra Y latina maiúscula con acento circunflexo", +373:"Letra w latina minúscula con acento circunflexo",375:"Letra y latina minúscula con acento circunflexo",sbquo:"Comiña simple baixa, de apertura",8219:"Comiña simple alta, de peche",bdquo:"Comiñas dobres baixas, de apertura",hellip:"Elipse, puntos suspensivos",trade:"Signo de marca rexistrada",9658:"Apuntador negro apuntando á dereita",bull:"Viñeta",rarr:"Frecha á dereita",rArr:"Frecha dobre á dereita",hArr:"Frecha dobre da esquerda á dereita",diams:"Diamante negro",asymp:"Case igual a"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/he.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/he.js new file mode 100644 index 0000000..dcfc50f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/he.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"סימן ציטוט יחיד שמאלי",rsquo:"סימן ציטוט יחיד ימני",ldquo:"סימן ציטוט כפול שמאלי",rdquo:"סימן ציטוט כפול ימני",ndash:"קו מפריד קצר",mdash:"קו מפריד ארוך",iexcl:"סימן קריאה הפוך",cent:"סנט",pound:"פאונד",curren:"מטבע",yen:"ין",brvbar:"קו שבור",sect:"סימן מקטע",uml:"שתי נקודות אופקיות (Diaeresis)",copy:"סימן זכויות יוצרים (Copyright)",ordf:"סימן אורדינאלי נקבי",laquo:"סימן ציטוט זווית כפולה לשמאל",not:"סימן שלילה מתמטי",reg:"סימן רשום", +macr:"מקרון (הגיה ארוכה)",deg:"מעלות",sup2:"2 בכתיב עילי",sup3:"3 בכתיב עילי",acute:"סימן דגוש (Acute)",micro:"מיקרו",para:"סימון פסקה",middot:"נקודה אמצעית",cedil:"סדיליה",sup1:"1 בכתיב עילי",ordm:"סימן אורדינאלי זכרי",raquo:"סימן ציטוט זווית כפולה לימין",frac14:"רבע בשבר פשוט",frac12:"חצי בשבר פשוט",frac34:"שלושה רבעים בשבר פשוט",iquest:"סימן שאלה הפוך",Agrave:"אות לטינית A עם גרש (Grave)",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde", +Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"אות לטינית Æ גדולה",Ccedil:"Latin capital letter C with cedilla",Egrave:"אות לטינית E עם גרש (Grave)",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"אות לטינית I עם גרש (Grave)",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis", +ETH:"אות לטינית Eth גדולה",Ntilde:"Latin capital letter N with tilde",Ograve:"אות לטינית O עם גרש (Grave)",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"סימן כפל",Oslash:"Latin capital letter O with stroke",Ugrave:"אות לטינית U עם גרש (Grave)",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis", +Yacute:"Latin capital letter Y with acute accent",THORN:"אות לטינית Thorn גדולה",szlig:"אות לטינית s חדה קטנה",agrave:"אות לטינית a עם גרש (Grave)",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"אות לטינית æ קטנה",ccedil:"Latin small letter c with cedilla",egrave:"אות לטינית e עם גרש (Grave)",eacute:"Latin small letter e with acute accent", +ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"אות לטינית i עם גרש (Grave)",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"אות לטינית eth קטנה",ntilde:"Latin small letter n with tilde",ograve:"אות לטינית o עם גרש (Grave)",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis", +divide:"סימן חלוקה",oslash:"Latin small letter o with stroke",ugrave:"אות לטינית u עם גרש (Grave)",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"אות לטינית thorn קטנה",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex", +373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"סימן ציטוט נמוך יחיד",8219:"סימן ציטוט",bdquo:"סימן ציטוט נמוך כפול",hellip:"שלוש נקודות",trade:"סימן טריידמארק",9658:"סמן שחור לצד ימין",bull:"תבליט (רשימה)",rarr:"חץ לימין",rArr:"חץ כפול לימין",hArr:"חץ כפול לימין ושמאל",diams:"יהלום מלא",asymp:"כמעט שווה"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/hr.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/hr.js new file mode 100644 index 0000000..af10255 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/hr.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskličnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana prečka",sect:"Znak odjeljka",uml:"Prijeglasi",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak", +reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro znak",para:"Pilcrow sign",middot:"Srednja točka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"Latinično veliko slovo A sa oštrim naglaskom", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", +Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/hu.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/hu.js new file mode 100644 index 0000000..7948305 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/hu.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","hu",{euro:"Euró jel",lsquo:"Bal szimpla idézőjel",rsquo:"Jobb szimpla idézőjel",ldquo:"Bal dupla idézőjel",rdquo:"Jobb dupla idézőjel",ndash:"Rövid gondolatjel",mdash:"Hosszú gondolatjel",iexcl:"Fordított felkiáltójel",cent:"Cent jel",pound:"Font jel",curren:"Valuta jel",yen:"Yen jel",brvbar:"Hosszú kettőspont",sect:"Paragrafus jel",uml:"Kettős hangzó jel",copy:"Szerzői jog jel",ordf:"Női sorrend mutatója",laquo:"Balra mutató duplanyíl",not:"Feltételes kötőjel", +reg:"Bejegyzett védjegy jele",macr:"Hosszúsági jel",deg:"Fok jel",sup2:"Négyzeten jel",sup3:"Köbön jel",acute:"Éles ékezet",micro:"Mikro-jel",para:"Bekezdés jel",middot:"Közép pont",cedil:"Cédille",sup1:"Elsőn jel",ordm:"Férfi sorrend mutatója",raquo:"Jobbra mutató duplanyíl",frac14:"Egy negyed jel",frac12:"Egy ketted jel",frac34:"Három negyed jel",iquest:"Fordított kérdőjel",Agrave:"Latin nagy A fordított ékezettel",Aacute:"Latin nagy A normál ékezettel",Acirc:"Latin nagy A hajtott ékezettel",Atilde:"Latin nagy A hullámjellel", +Auml:"Latin nagy A kettőspont ékezettel",Aring:"Latin nagy A gyűrű ékezettel",AElig:"Latin nagy Æ betű",Ccedil:"Latin nagy C cedillával",Egrave:"Latin nagy E fordított ékezettel",Eacute:"Latin nagy E normál ékezettel",Ecirc:"Latin nagy E hajtott ékezettel",Euml:"Latin nagy E dupla kettőspont ékezettel",Igrave:"Latin nagy I fordított ékezettel",Iacute:"Latin nagy I normál ékezettel",Icirc:"Latin nagy I hajtott ékezettel",Iuml:"Latin nagy I kettőspont ékezettel",ETH:"Latin nagy Eth betű",Ntilde:"Latin nagy N hullámjellel", +Ograve:"Latin nagy O fordított ékezettel",Oacute:"Latin nagy O normál ékezettel",Ocirc:"Latin nagy O hajtott ékezettel",Otilde:"Latin nagy O hullámjellel",Ouml:"Latin nagy O kettőspont ékezettel",times:"Szorzás jel",Oslash:"Latin O betű áthúzással",Ugrave:"Latin nagy U fordított ékezettel",Uacute:"Latin nagy U normál ékezettel",Ucirc:"Latin nagy U hajtott ékezettel",Uuml:"Latin nagy U kettőspont ékezettel",Yacute:"Latin nagy Y normál ékezettel",THORN:"Latin nagy Thorn betű",szlig:"Latin kis s betű", +agrave:"Latin kis a fordított ékezettel",aacute:"Latin kis a normál ékezettel",acirc:"Latin kis a hajtott ékezettel",atilde:"Latin kis a hullámjellel",auml:"Latin kis a kettőspont ékezettel",aring:"Latin kis a gyűrű ékezettel",aelig:"Latin kis æ betű",ccedil:"Latin kis c cedillával",egrave:"Latin kis e fordított ékezettel",eacute:"Latin kis e normál ékezettel",ecirc:"Latin kis e hajtott ékezettel",euml:"Latin kis e dupla kettőspont ékezettel",igrave:"Latin kis i fordított ékezettel",iacute:"Latin kis i normál ékezettel", +icirc:"Latin kis i hajtott ékezettel",iuml:"Latin kis i kettőspont ékezettel",eth:"Latin kis eth betű",ntilde:"Latin kis n hullámjellel",ograve:"Latin kis o fordított ékezettel",oacute:"Latin kis o normál ékezettel",ocirc:"Latin kis o hajtott ékezettel",otilde:"Latin kis o hullámjellel",ouml:"Latin kis o kettőspont ékezettel",divide:"Osztásjel",oslash:"Latin kis o betű áthúzással",ugrave:"Latin kis u fordított ékezettel",uacute:"Latin kis u normál ékezettel",ucirc:"Latin kis u hajtott ékezettel", +uuml:"Latin kis u kettőspont ékezettel",yacute:"Latin kis y normál ékezettel",thorn:"Latin kis thorn jel",yuml:"Latin kis y kettőspont ékezettel",OElig:"Latin nagy OE-jel",oelig:"Latin kis oe-jel",372:"Latin nagy W hajtott ékezettel",374:"Latin nagy Y hajtott ékezettel",373:"Latin kis w hajtott ékezettel",375:"Latin kis y hajtott ékezettel",sbquo:"Nyitó nyomdai szimpla idézőjel",8219:"Záró nyomdai záró idézőjel",bdquo:"Nyitó nyomdai dupla idézőjel",hellip:"Három pont",trade:"Kereskedelmi védjegy jele", +9658:"Jobbra mutató fekete mutató",bull:"Golyó",rarr:"Jobbra mutató nyíl",rArr:"Jobbra mutató duplanyíl",hArr:"Bal-jobb duplanyíl",diams:"Fekete gyémánt jel",asymp:"Majdnem egyenlő jel"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/id.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/id.js new file mode 100644 index 0000000..4928f40 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/id.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Tanda Telah Terdaftar",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/it.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/it.js new file mode 100644 index 0000000..894b56c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/it.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte", +not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave", +Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina AE",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso", +Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso", +Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S", +agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto", +ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto", +ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn", +yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale", +trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ja.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ja.js new file mode 100644 index 0000000..84fb8fa --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ja.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記号",lsquo:"左シングル引用符",rsquo:"右シングル引用符",ldquo:"左ダブル引用符",rdquo:"右ダブル引用符",ndash:"半角ダッシュ",mdash:"全角ダッシュ",iexcl:"逆さ感嘆符",cent:"セント記号",pound:"ポンド記号",curren:"通貨記号",yen:"円記号",brvbar:"上下に分かれた縦棒",sect:"節記号",uml:"分音記号(ウムラウト)",copy:"著作権表示記号",ordf:"女性序数標識",laquo:" 始め二重山括弧引用記号",not:"論理否定記号",reg:"登録商標記号",macr:"長音符",deg:"度記号",sup2:"上つき2, 2乗",sup3:"上つき3, 3乗",acute:"揚音符",micro:"ミクロン記号",para:"段落記号",middot:"中黒",cedil:"セディラ",sup1:"上つき1",ordm:"男性序数標識",raquo:"終わり二重山括弧引用記号", +frac14:"四分の一",frac12:"二分の一",frac34:"四分の三",iquest:"逆疑問符",Agrave:"抑音符つき大文字A",Aacute:"揚音符つき大文字A",Acirc:"曲折アクセントつき大文字A",Atilde:"チルダつき大文字A",Auml:"分音記号つき大文字A",Aring:"リングつき大文字A",AElig:"AとEの合字",Ccedil:"セディラつき大文字C",Egrave:"抑音符つき大文字E",Eacute:"揚音符つき大文字E",Ecirc:"曲折アクセントつき大文字E",Euml:"分音記号つき大文字E",Igrave:"抑音符つき大文字I",Iacute:"揚音符つき大文字I",Icirc:"曲折アクセントつき大文字I",Iuml:"分音記号つき大文字I",ETH:"[アイスランド語]大文字ETH",Ntilde:"チルダつき大文字N",Ograve:"抑音符つき大文字O",Oacute:"揚音符つき大文字O",Ocirc:"曲折アクセントつき大文字O",Otilde:"チルダつき大文字O",Ouml:" 分音記号つき大文字O", +times:"乗算記号",Oslash:"打ち消し線つき大文字O",Ugrave:"抑音符つき大文字U",Uacute:"揚音符つき大文字U",Ucirc:"曲折アクセントつき大文字U",Uuml:"分音記号つき大文字U",Yacute:"揚音符つき大文字Y",THORN:"[アイスランド語]大文字THORN",szlig:"ドイツ語エスツェット",agrave:"抑音符つき小文字a",aacute:"揚音符つき小文字a",acirc:"曲折アクセントつき小文字a",atilde:"チルダつき小文字a",auml:"分音記号つき小文字a",aring:"リングつき小文字a",aelig:"aとeの合字",ccedil:"セディラつき小文字c",egrave:"抑音符つき小文字e",eacute:"揚音符つき小文字e",ecirc:"曲折アクセントつき小文字e",euml:"分音記号つき小文字e",igrave:"抑音符つき小文字i",iacute:"揚音符つき小文字i",icirc:"曲折アクセントつき小文字i",iuml:"分音記号つき小文字i",eth:"アイスランド語小文字eth", +ntilde:"チルダつき小文字n",ograve:"抑音符つき小文字o",oacute:"揚音符つき小文字o",ocirc:"曲折アクセントつき小文字o",otilde:"チルダつき小文字o",ouml:"分音記号つき小文字o",divide:"除算記号",oslash:"打ち消し線つき小文字o",ugrave:"抑音符つき小文字u",uacute:"揚音符つき小文字u",ucirc:"曲折アクセントつき小文字u",uuml:"分音記号つき小文字u",yacute:"揚音符つき小文字y",thorn:"アイスランド語小文字thorn",yuml:"分音記号つき小文字y",OElig:"OとEの合字",oelig:"oとeの合字",372:"曲折アクセントつき大文字W",374:"曲折アクセントつき大文字Y",373:"曲折アクセントつき小文字w",375:"曲折アクセントつき小文字y",sbquo:"シングル下引用符",8219:"左右逆の左引用符",bdquo:"ダブル下引用符",hellip:"三点リーダ",trade:"商標記号",9658:"右黒三角ポインタ",bull:"黒丸", +rarr:"右矢印",rArr:"右二重矢印",hArr:"左右二重矢印",diams:"ダイヤ",asymp:"漸近"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/km.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/km.js new file mode 100644 index 0000000..65a7518 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/km.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","km",{euro:"សញ្ញា​អឺរ៉ូ",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"សញ្ញា​សេន",pound:"សញ្ញា​ផោន",curren:"សញ្ញា​រូបិយបណ្ណ",yen:"សញ្ញា​យ៉េន",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"សញ្ញា​រក្សា​សិទ្ធិ",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"សញ្ញា​ដឺក្រេ",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"សញ្ញា​មីក្រូ",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ku.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ku.js new file mode 100644 index 0000000..4917d4a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ku.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانەی یۆرۆ",lsquo:"نیشانەی فاریزەی سەرووژێری تاکی چەپ",rsquo:"نیشانەی فاریزەی سەرووژێری تاکی ڕاست",ldquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی چه‌پ",rdquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی ڕاست",ndash:"تەقەڵی کورت",mdash:"تەقەڵی درێژ",iexcl:"نیشانەی هەڵەوگێڕی سەرسوڕهێنەر",cent:"نیشانەی سەنت",pound:"نیشانەی پاوەند",curren:"نیشانەی دراو",yen:"نیشانەی یەنی ژاپۆنی",brvbar:"شریتی ئەستوونی پچڕاو",sect:"نیشانەی دوو s لەسەریەک",uml:"خاڵ",copy:"نیشانەی مافی چاپ", +ordf:"هێڵ لەسەر پیتی a",laquo:"دوو تیری بەدووایەکی چەپ",not:"نیشانەی نەخێر",reg:"نیشانەی R لەناو بازنەدا",macr:"ماکڕۆن",deg:"نیشانەی پلە",sup2:"سەرنووسی دوو",sup3:"سەرنووسی سێ",acute:"لاری تیژ",micro:"نیشانەی u لق درێژی چەپی خواروو",para:"نیشانەی پەڕەگراف",middot:"ناوەڕاستی خاڵ",cedil:"نیشانەی c ژێر چووکرە",sup1:"سەرنووسی یەک",ordm:"هێڵ لەژێر پیتی o",raquo:"دوو تیری بەدووایەکی ڕاست",frac14:"یەک لەسەر چووار",frac12:"یەک لەسەر دوو",frac34:"سێ لەسەر چووار",iquest:"هێمای هەڵەوگێری پرسیار",Agrave:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری لار", +Aacute:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری تیژ",Acirc:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Atilde:"پیتی لاتینی A-ی گەورە لەگەڵ زەڕە",Auml:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Aring:"پیتی لاتینی گەورەی Å",AElig:"پیتی لاتینی گەورەی Æ",Ccedil:"پیتی لاتینی C-ی گەورە لەگەڵ ژێر چووکرە",Egrave:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری لار",Eacute:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ecirc:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",Euml:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری", +Igrave:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری لار",Iacute:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری تیژ",Icirc:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",Iuml:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",ETH:"پیتی لاتینی E-ی گەورەی",Ntilde:"پیتی لاتینی N-ی گەورە لەگەڵ زەڕە",Ograve:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری لار",Oacute:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ocirc:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",Otilde:"پیتی لاتینی O-ی گەورە لەگەڵ زەڕە",Ouml:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری", +times:"نیشانەی لێکدان",Oslash:"پیتی لاتینی گەورەی Ø لەگەڵ هێمای دڵ وەستان",Ugrave:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری لار",Uacute:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ucirc:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Uuml:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Yacute:"پیتی لاتینی Y-ی گەورە لەگەڵ ڕوومەتداری تیژ",THORN:"پیتی لاتینی دڕکی گەورە",szlig:"پیتی لاتنی نووک تیژی s",agrave:"پیتی لاتینی a-ی بچووک لەگەڵ ڕوومەتداری لار",aacute:"پیتی لاتینی a-ی بچووك لەگەڵ ڕوومەتداری تیژ",acirc:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری", +atilde:"پیتی لاتینی a-ی بچووك لەگەڵ زەڕە",auml:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",aring:"پیتی لاتینی å-ی بچووك",aelig:"پیتی لاتینی æ-ی بچووك",ccedil:"پیتی لاتینی c-ی بچووك لەگەڵ ژێر چووکرە",egrave:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری لار",eacute:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری تیژ",ecirc:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",euml:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",igrave:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری لار",iacute:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری تیژ", +icirc:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",iuml:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",eth:"پیتی لاتینی e-ی بچووك",ntilde:"پیتی لاتینی n-ی بچووك لەگەڵ زەڕە",ograve:"پیتی لاتینی o-ی بچووك لەگەڵ ڕوومەتداری لار",oacute:"پیتی لاتینی o-ی بچووك له‌گەڵ ڕوومەتداری تیژ",ocirc:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",otilde:"پیتی لاتینی o-ی بچووك لەگەڵ زەڕە",ouml:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",divide:"نیشانەی دابەش",oslash:"پیتی لاتینی گەورەی ø لەگەڵ هێمای دڵ وەستان",ugrave:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری لار", +uacute:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری تیژ",ucirc:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",uuml:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",yacute:"پیتی لاتینی y-ی بچووك لەگەڵ ڕوومەتداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ی بچووك لەگەڵ نیشانە لەسەری",OElig:"پیتی لاتینی گەورەی پێکەوەنووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکەوەنووسراوی oe",372:"پیتی لاتینی W-ی گەورە لەگەڵ نیشانە لەسەری",374:"پیتی لاتینی Y-ی گەورە لەگەڵ نیشانە لەسەری",373:"پیتی لاتینی w-ی بچووکی لەگەڵ نیشانە لەسەری", +375:"پیتی لاتینی y-ی بچووکی لەگەڵ نیشانە لەسەری",sbquo:"نیشانەی فاریزەی نزم",8219:"نیشانەی فاریزەی بەرزی پێچەوانە",bdquo:"دوو فاریزەی تەنیش یەك",hellip:"ئاسۆیی بازنە",trade:"نیشانەی بازرگانی",9658:"ئاراستەی ڕەشی دەستی ڕاست",bull:"فیشەك",rarr:"تیری دەستی ڕاست",rArr:"دووتیری دەستی ڕاست",hArr:"دوو تیری ڕاست و چەپ",diams:"ڕەشی پاقڵاوەیی",asymp:"نیشانەی یەکسانە"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/lt.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/lt.js new file mode 100644 index 0000000..2cebb39 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/lt.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","lt",{euro:"Euro ženklas",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cento ženklas",pound:"Svaro ženklas",curren:"Valiutos ženklas",yen:"Jenos ženklas",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Ne ženklas",reg:"Registered sign",macr:"Makronas",deg:"Laipsnio ženklas",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro ženklas",para:"Pilcrow sign",middot:"Vidurinis taškas",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/lv.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/lv.js new file mode 100644 index 0000000..50a77d3 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/lv.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zīme",lsquo:"Kreisā vienkārtīga pēdiņa",rsquo:"Labā vienkārtīga pēdiņa",ldquo:"Kreisā dubult pēdiņa",rdquo:"Labā dubult pēdiņa",ndash:"En svītra",mdash:"Em svītra",iexcl:"Apgriezta izsaukuma zīme",cent:"Centu naudas zīme",pound:"Sterliņu mārciņu naudas zīme",curren:"Valūtas zīme",yen:"Jenu naudas zīme",brvbar:"Vertikāla pārrauta līnija",sect:"Paragrāfa zīme",uml:"Diakritiska zīme",copy:"Autortiesību zīme",ordf:"Sievišķas kārtas rādītājs", +laquo:"Kreisā dubult stūra pēdiņu zīme",not:"Neparakstīts",reg:"Reģistrēta zīme",macr:"Garumzīme",deg:"Grādu zīme",sup2:"Augšraksts divi",sup3:"Augšraksts trīs",acute:"Akūta uzsvara zīme",micro:"Mikro zīme",para:"Rindkopas zīme ",middot:"Vidējs punkts",cedil:"Āķītis zem burta",sup1:"Augšraksts viens",ordm:"Vīrišķīgas kārtas rādītājs",raquo:"Labā dubult stūra pēdiņu zīme",frac14:"Vulgāra frakcija 1/4",frac12:"Vulgāra frakcija 1/2",frac34:"Vulgāra frakcija 3/4",iquest:"Apgriezta jautājuma zīme",Agrave:"Lielais latīņu burts A ar uzsvara zīmi", +Aacute:"Lielais latīņu burts A ar akūtu uzsvara zīmi",Acirc:"Lielais latīņu burts A ar diakritisku zīmi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zīmi",Aring:"Lielais latīņu burts A ar aplīti augšā",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar āķīti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akūtu uzsvara zīmi",Ecirc:"Lielais latīņu burts E ar diakritisko zīmi",Euml:"Lielais latīņu burts E ar diakritisko zīmi", +Igrave:"Lielais latīņu burts I ar uzsvaras zīmi",Iacute:"Lielais latīņu burts I ar akūtu uzsvara zīmi",Icirc:"Lielais latīņu burts I ar diakritisko zīmi",Iuml:"Lielais latīņu burts I ar diakritisko zīmi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zīmi",Oacute:"Lielais latīņu burts O ar akūto uzsvara zīmi",Ocirc:"Lielais latīņu burts O ar diakritisko zīmi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zīmi", +times:"Reizināšanas zīme ",Oslash:"Lielais latīņu burts O ar iesvītrojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zīmi",Uacute:"Lielais latīņu burts U ar akūto uzsvars zīmi",Ucirc:"Lielais latīņu burts U ar diakritisko zīmi",Uuml:"Lielais latīņu burts U ar diakritisko zīmi",Yacute:"Lielais latīņu burts Y ar akūto uzsvaras zīmi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatūru",agrave:"Mazs latīņu burts a ar uzsvara zīmi",aacute:"Mazs latīņu burts a ar akūto uzsvara zīmi", +acirc:"Mazs latīņu burts a ar diakritisko zīmi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zīmi",aring:"Mazs latīņu burts a ar aplīti augšā",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar āķīti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zīmi ",eacute:"Mazs latīņu burts e ar akūtu uzsvara zīmi",ecirc:"Mazs latīņu burts e ar diakritisko zīmi",euml:"Mazs latīņu burts e ar diakritisko zīmi",igrave:"Mazs latīņu burts i ar uzsvara zīmi ",iacute:"Mazs latīņu burts i ar akūtu uzsvara zīmi", +icirc:"Mazs latīņu burts i ar diakritisko zīmi",iuml:"Mazs latīņu burts i ar diakritisko zīmi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zīmi ",oacute:"Mazs latīņu burts o ar akūtu uzsvara zīmi",ocirc:"Mazs latīņu burts o ar diakritisko zīmi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zīmi",divide:"Dalīšanas zīme",oslash:"Mazs latīņu burts o ar iesvītrojumu",ugrave:"Mazs latīņu burts u ar uzsvara zīmi ", +uacute:"Mazs latīņu burts u ar akūtu uzsvara zīmi",ucirc:"Mazs latīņu burts u ar diakritisko zīmi",uuml:"Mazs latīņu burts u ar diakritisko zīmi",yacute:"Mazs latīņu burts y ar akūtu uzsvaras zīmi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zīmi",OElig:"Liela latīņu ligatūra OE",oelig:"Maza latīņu ligatūra oe",372:"Liels latīņu burts W ar diakritisko zīmi ",374:"Liels latīņu burts Y ar diakritisko zīmi ",373:"Mazs latīņu burts w ar diakritisko zīmi ",375:"Mazs latīņu burts y ar diakritisko zīmi ", +sbquo:"Mazas-9 vienkārtīgas pēdiņas",8219:"Lielas-9 vienkārtīgas apgrieztas pēdiņas",bdquo:"Mazas-9 dubultas pēdiņas",hellip:"Horizontāli daudzpunkti",trade:"Preču zīmes zīme",9658:"Melns pa labi pagriezts radītājs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"Gandrīz vienāds ar"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/nb.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/nb.js new file mode 100644 index 0000000..0cdcde2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/nb.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", +reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", +Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", +times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", +ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", +uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", +rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/nl.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/nl.js new file mode 100644 index 0000000..68edf37 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/nl.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken", +reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Micro-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe", +Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu", +Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave", +Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema", +aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe", +iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave", +uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Œ",oelig:"Latijnse kleine letter œ",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe", +375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/no.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/no.js new file mode 100644 index 0000000..eecc56c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/no.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", +reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", +Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", +times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", +ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", +uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", +rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pl.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pl.js new file mode 100644 index 0000000..f21a09d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pl",{euro:"Znak euro",lsquo:"Cudzysłów pojedynczy otwierający",rsquo:"Cudzysłów pojedynczy zamykający",ldquo:"Cudzysłów apostrofowy otwierający",rdquo:"Cudzysłów apostrofowy zamykający",ndash:"Półpauza",mdash:"Pauza",iexcl:"Odwrócony wykrzyknik",cent:"Znak centa",pound:"Znak funta",curren:"Znak waluty",yen:"Znak jena",brvbar:"Przerwana pionowa kreska",sect:"Paragraf",uml:"Diereza",copy:"Znak praw autorskich",ordf:"Wskaźnik rodzaju żeńskiego liczebnika porządkowego", +laquo:"Lewy cudzysłów ostrokątny",not:"Znak negacji",reg:"Zastrzeżony znak towarowy",macr:"Makron",deg:"Znak stopnia",sup2:"Druga potęga",sup3:"Trzecia potęga",acute:"Akcent ostry",micro:"Znak mikro",para:"Znak akapitu",middot:"Kropka środkowa",cedil:"Cedylla",sup1:"Pierwsza potęga",ordm:"Wskaźnik rodzaju męskiego liczebnika porządkowego",raquo:"Prawy cudzysłów ostrokątny",frac14:"Ułamek zwykły jedna czwarta",frac12:"Ułamek zwykły jedna druga",frac34:"Ułamek zwykły trzy czwarte",iquest:"Odwrócony znak zapytania", +Agrave:"Wielka litera A z akcentem ciężkim",Aacute:"Wielka litera A z akcentem ostrym",Acirc:"Wielka litera A z akcentem przeciągłym",Atilde:"Wielka litera A z tyldą",Auml:"Wielka litera A z dierezą",Aring:"Wielka litera A z kółkiem",AElig:"Wielka ligatura Æ",Ccedil:"Wielka litera C z cedyllą",Egrave:"Wielka litera E z akcentem ciężkim",Eacute:"Wielka litera E z akcentem ostrym",Ecirc:"Wielka litera E z akcentem przeciągłym",Euml:"Wielka litera E z dierezą",Igrave:"Wielka litera I z akcentem ciężkim", +Iacute:"Wielka litera I z akcentem ostrym",Icirc:"Wielka litera I z akcentem przeciągłym",Iuml:"Wielka litera I z dierezą",ETH:"Wielka litera Eth",Ntilde:"Wielka litera N z tyldą",Ograve:"Wielka litera O z akcentem ciężkim",Oacute:"Wielka litera O z akcentem ostrym",Ocirc:"Wielka litera O z akcentem przeciągłym",Otilde:"Wielka litera O z tyldą",Ouml:"Wielka litera O z dierezą",times:"Znak mnożenia wektorowego",Oslash:"Wielka litera O z przekreśleniem",Ugrave:"Wielka litera U z akcentem ciężkim",Uacute:"Wielka litera U z akcentem ostrym", +Ucirc:"Wielka litera U z akcentem przeciągłym",Uuml:"Wielka litera U z dierezą",Yacute:"Wielka litera Y z akcentem ostrym",THORN:"Wielka litera Thorn",szlig:"Mała litera ostre s (eszet)",agrave:"Mała litera a z akcentem ciężkim",aacute:"Mała litera a z akcentem ostrym",acirc:"Mała litera a z akcentem przeciągłym",atilde:"Mała litera a z tyldą",auml:"Mała litera a z dierezą",aring:"Mała litera a z kółkiem",aelig:"Mała ligatura æ",ccedil:"Mała litera c z cedyllą",egrave:"Mała litera e z akcentem ciężkim", +eacute:"Mała litera e z akcentem ostrym",ecirc:"Mała litera e z akcentem przeciągłym",euml:"Mała litera e z dierezą",igrave:"Mała litera i z akcentem ciężkim",iacute:"Mała litera i z akcentem ostrym",icirc:"Mała litera i z akcentem przeciągłym",iuml:"Mała litera i z dierezą",eth:"Mała litera eth",ntilde:"Mała litera n z tyldą",ograve:"Mała litera o z akcentem ciężkim",oacute:"Mała litera o z akcentem ostrym",ocirc:"Mała litera o z akcentem przeciągłym",otilde:"Mała litera o z tyldą",ouml:"Mała litera o z dierezą", +divide:"Anglosaski znak dzielenia",oslash:"Mała litera o z przekreśleniem",ugrave:"Mała litera u z akcentem ciężkim",uacute:"Mała litera u z akcentem ostrym",ucirc:"Mała litera u z akcentem przeciągłym",uuml:"Mała litera u z dierezą",yacute:"Mała litera y z akcentem ostrym",thorn:"Mała litera thorn",yuml:"Mała litera y z dierezą",OElig:"Wielka ligatura OE",oelig:"Mała ligatura oe",372:"Wielka litera W z akcentem przeciągłym",374:"Wielka litera Y z akcentem przeciągłym",373:"Mała litera w z akcentem przeciągłym", +375:"Mała litera y z akcentem przeciągłym",sbquo:"Pojedynczy apostrof dolny",8219:"Pojedynczy apostrof górny",bdquo:"Podwójny apostrof dolny",hellip:"Wielokropek",trade:"Znak towarowy",9658:"Czarny wskaźnik wskazujący w prawo",bull:"Punktor",rarr:"Strzałka w prawo",rArr:"Podwójna strzałka w prawo",hArr:"Podwójna strzałka w lewo",diams:"Czarny znak karo",asymp:"Znak prawie równe"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js new file mode 100644 index 0000000..e3f7831 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada", +macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema", +Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo", +Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema", +aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo", +otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo", +373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pt.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pt.js new file mode 100644 index 0000000..11ef746 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/pt.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pt",{euro:"Símbolo do Euro",lsquo:"Aspa esquerda simples",rsquo:"Aspa direita simples",ldquo:"Aspa esquerda dupla",rdquo:"Aspa direita dupla",ndash:"Travessão Simples",mdash:"Travessão Longo",iexcl:"Ponto de exclamação invertido",cent:"Símbolo do Cêntimo",pound:"Símbolo da Libra",curren:"Símbolo de Moeda",yen:"Símbolo do Iene",brvbar:"Barra quebrada",sect:"Símbolo de Secção",uml:"Trema",copy:"Símbolo dos Direitos de Autor",ordf:"Indicador ordinal feminino", +laquo:"Aspa esquerda ângulo duplo",not:"Não Símbolo",reg:"Símbolo de Registado",macr:"Mácron",deg:"Símbolo de Grau",sup2:"Expoente 2",sup3:"Expoente 3",acute:"Acento agudo",micro:"Símbolo de Micro",para:"Símbolo de Parágrafo",middot:"Ponto do Meio",cedil:"Cedilha",sup1:"Expoente 1",ordm:"Indicador ordinal masculino",raquo:"Aspas ângulo duplo pra Direita",frac14:"Fração vulgar 1/4",frac12:"Fração vulgar 1/2",frac34:"Fração vulgar 3/4",iquest:"Ponto de interrugação invertido",Agrave:"Letra maiúscula latina A com acento grave", +Aacute:"Letra maiúscula latina A com acento agudo",Acirc:"Letra maiúscula latina A com circunflexo",Atilde:"Letra maiúscula latina A com til",Auml:"Letra maiúscula latina A com trema",Aring:"Letra maiúscula latina A com sinal diacrítico",AElig:"Letra Maiúscula Latina Æ",Ccedil:"Letra maiúscula latina C com cedilha",Egrave:"Letra maiúscula latina E com acento grave",Eacute:"Letra maiúscula latina E com acento agudo",Ecirc:"Letra maiúscula latina E com circunflexo",Euml:"Letra maiúscula latina E com trema", +Igrave:"Letra maiúscula latina I com acento grave",Iacute:"Letra maiúscula latina I com acento agudo",Icirc:"Letra maiúscula latina I com cincunflexo",Iuml:"Letra maiúscula latina I com trema",ETH:"Letra maiúscula latina Eth (Ðð)",Ntilde:"Letra maiúscula latina N com til",Ograve:"Letra maiúscula latina O com acento grave",Oacute:"Letra maiúscula latina O com acento agudo",Ocirc:"Letra maiúscula latina I com circunflexo",Otilde:"Letra maiúscula latina O com til",Ouml:"Letra maiúscula latina O com trema", +times:"Símbolo de Multiplicação",Oslash:"Letra maiúscula O com barra",Ugrave:"Letra maiúscula latina U com acento grave",Uacute:"Letra maiúscula latina U com acento agudo",Ucirc:"Letra maiúscula latina U com circunflexo",Uuml:"Letra maiúscula latina E com trema",Yacute:"Letra maiúscula latina Y com acento agudo",THORN:"Letra maiúscula latina Rúnico",szlig:"Letra minúscula latina s forte",agrave:"Letra minúscula latina a com acento grave",aacute:"Letra minúscula latina a com acento agudo",acirc:"Letra minúscula latina a com circunflexo", +atilde:"Letra minúscula latina a com til",auml:"Letra minúscula latina a com trema",aring:"Letra minúscula latina a com sinal diacrítico",aelig:"Letra minúscula latina æ",ccedil:"Letra minúscula latina c com cedilha",egrave:"Letra minúscula latina e com acento grave",eacute:"Letra minúscula latina e com acento agudo",ecirc:"Letra minúscula latina e com circunflexo",euml:"Letra minúscula latina e com trema",igrave:"Letra minúscula latina i com acento grave",iacute:"Letra minúscula latina i com acento agudo", +icirc:"Letra minúscula latina i com circunflexo",iuml:"Letra pequena latina i com trema",eth:"Letra minúscula latina eth",ntilde:"Letra minúscula latina n com til",ograve:"Letra minúscula latina o com acento grave",oacute:"Letra minúscula latina o com acento agudo",ocirc:"Letra minúscula latina o com circunflexo",otilde:"Letra minúscula latina o com til",ouml:"Letra minúscula latina o com trema",divide:"Símbolo de Divisão",oslash:"Letra minúscula latina o com barra",ugrave:"Letra minúscula latina u com acento grave", +uacute:"Letra minúscula latina u com acento agudo",ucirc:"Letra minúscula latina u com circunflexo",uuml:"Letra minúscula latina u com trema",yacute:"Letra minúscula latina y com acento agudo",thorn:"Letra minúscula latina Rúnico",yuml:"Letra minúscula latina y com trema",OElig:"Ligadura maiúscula latina OE",oelig:"Ligadura minúscula latina oe",372:"Letra maiúscula latina W com circunflexo",374:"Letra maiúscula latina Y com circunflexo",373:"Letra minúscula latina w com circunflexo",375:"Letra minúscula latina y com circunflexo", +sbquo:"Aspa Simples inferior-9",8219:"Aspa Simples superior invertida-9",bdquo:"Aspa Duplas inferior-9",hellip:"Elipse Horizontal ",trade:"Símbolo de Marca Registada",9658:"Ponteiro preto direito",bull:"Marca",rarr:"Seta para a direita",rArr:"Seta dupla para a direita",hArr:"Seta dupla direita esquerda",diams:"Naipe diamante preto",asymp:"Quase igual a "}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ru.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ru.js new file mode 100644 index 0000000..866e865 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ru.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ru",{euro:"Знак евро",lsquo:"Левая одинарная кавычка",rsquo:"Правая одинарная кавычка",ldquo:"Левая двойная кавычка",rdquo:"Левая двойная кавычка",ndash:"Среднее тире",mdash:"Длинное тире",iexcl:"перевёрнутый восклицательный знак",cent:"Цент",pound:"Фунт",curren:"Знак валюты",yen:"Йена",brvbar:"Вертикальная черта с разрывом",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак охраны авторского права",ordf:"Указатель окончания женского рода ...ая",laquo:"Левая кавычка-«ёлочка»", +not:"Отрицание",reg:"Знак охраны смежных прав\\t",macr:"Макрон",deg:"Градус",sup2:"Надстрочное два",sup3:"Надстрочное три",acute:"Акут",micro:"Микро",para:"Абзац",middot:"Интерпункт",cedil:"Седиль",sup1:"Надстрочная единица",ordm:"Порядковое числительное",raquo:"Правая кавычка-«ёлочка»",frac14:"Одна четвертая",frac12:"Одна вторая",frac34:"Три четвёртых",iquest:"Перевёрнутый вопросительный знак",Agrave:"Латинская заглавная буква А с апострофом",Aacute:"Латинская заглавная буква A с ударением",Acirc:"Латинская заглавная буква А с циркумфлексом", +Atilde:"Латинская заглавная буква А с тильдой",Auml:"Латинская заглавная буква А с тремой",Aring:"Латинская заглавная буква А с кольцом над ней",AElig:"Латинская большая буква Æ",Ccedil:"Латинская заглавная буква C с седилью",Egrave:"Латинская заглавная буква Е с апострофом",Eacute:"Латинская заглавная буква Е с ударением",Ecirc:"Латинская заглавная буква Е с циркумфлексом",Euml:"Латинская заглавная буква Е с тремой",Igrave:"Латинская заглавная буква I с апострофом",Iacute:"Латинская заглавная буква I с ударением", +Icirc:"Латинская заглавная буква I с циркумфлексом",Iuml:"Латинская заглавная буква I с тремой",ETH:"Латинская большая буква Eth",Ntilde:"Латинская заглавная буква N с тильдой",Ograve:"Латинская заглавная буква O с апострофом",Oacute:"Латинская заглавная буква O с ударением",Ocirc:"Латинская заглавная буква O с циркумфлексом",Otilde:"Латинская заглавная буква O с тильдой",Ouml:"Латинская заглавная буква O с тремой",times:"Знак умножения",Oslash:"Латинская большая перечеркнутая O",Ugrave:"Латинская заглавная буква U с апострофом", +Uacute:"Латинская заглавная буква U с ударением",Ucirc:"Латинская заглавная буква U с циркумфлексом",Uuml:"Латинская заглавная буква U с тремой",Yacute:"Латинская заглавная буква Y с ударением",THORN:"Латинская заглавная буква Thorn",szlig:"Знак диеза",agrave:"Латинская маленькая буква a с апострофом",aacute:"Латинская маленькая буква a с ударением",acirc:"Латинская маленькая буква a с циркумфлексом",atilde:"Латинская маленькая буква a с тильдой",auml:"Латинская маленькая буква a с тремой",aring:"Латинская маленькая буква a с кольцом", +aelig:"Латинская маленькая буква æ",ccedil:"Латинская маленькая буква с с седилью",egrave:"Латинская маленькая буква е с апострофом",eacute:"Латинская маленькая буква е с ударением",ecirc:"Латинская маленькая буква е с циркумфлексом",euml:"Латинская маленькая буква е с тремой",igrave:"Латинская маленькая буква i с апострофом",iacute:"Латинская маленькая буква i с ударением",icirc:"Латинская маленькая буква i с циркумфлексом",iuml:"Латинская маленькая буква i с тремой",eth:"Латинская маленькая буква eth", +ntilde:"Латинская маленькая буква n с тильдой",ograve:"Латинская маленькая буква o с апострофом",oacute:"Латинская маленькая буква o с ударением",ocirc:"Латинская маленькая буква o с циркумфлексом",otilde:"Латинская маленькая буква o с тильдой",ouml:"Латинская маленькая буква o с тремой",divide:"Знак деления",oslash:"Латинская строчная перечеркнутая o",ugrave:"Латинская маленькая буква u с апострофом",uacute:"Латинская маленькая буква u с ударением",ucirc:"Латинская маленькая буква u с циркумфлексом", +uuml:"Латинская маленькая буква u с тремой",yacute:"Латинская маленькая буква y с ударением",thorn:"Латинская маленькая буква thorn",yuml:"Латинская маленькая буква y с тремой",OElig:"Латинская прописная лигатура OE",oelig:"Латинская строчная лигатура oe",372:"Латинская заглавная буква W с циркумфлексом",374:"Латинская заглавная буква Y с циркумфлексом",373:"Латинская маленькая буква w с циркумфлексом",375:"Латинская маленькая буква y с циркумфлексом",sbquo:"Нижняя одинарная кавычка",8219:"Правая одинарная кавычка", +bdquo:"Левая двойная кавычка",hellip:"Горизонтальное многоточие",trade:"Товарный знак",9658:"Черный указатель вправо",bull:"Маркер списка",rarr:"Стрелка вправо",rArr:"Двойная стрелка вправо",hArr:"Двойная стрелка влево-вправо",diams:"Черный ромб",asymp:"Примерно равно"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/si.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/si.js new file mode 100644 index 0000000..1255a35 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/si.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","si",{euro:"යුරෝ සලකුණ",lsquo:"වමේ තනි උපුටා දක්වීම ",rsquo:"දකුණේ තනි උපුටා දක්වීම ",ldquo:"වමේ දිත්ව උපුටා දක්වීම ",rdquo:"දකුණේ දිත්ව උපුටා දක්වීම ",ndash:"En dash",mdash:"Em dash",iexcl:"යටිකුරු හර්ෂදී ",cent:"Cent sign",pound:"Pound sign",curren:"මුල්‍යමය ",yen:"යෙන් ",brvbar:"Broken bar",sect:"තෙරේම් ",uml:"Diaeresis",copy:"පිටපත් අයිතිය ",ordf:"දර්ශකය",laquo:"Left-pointing double angle quotation mark",not:"සලකුණක් නොවේ",reg:"සලකුණක් ලියාපදිංචි කිරීම", +macr:"මුද්‍රිත ",deg:"සලකුණේ ",sup2:"උඩු ලකුණු දෙක",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", +Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sk.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sk.js new file mode 100644 index 0000000..2d226d0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sk.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrátený výkričník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"Prerušená zvislá čiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor", +reg:"Znak registrácie",macr:"Pomlčka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"Obyčajný zlomok jedna štvrtina",frac12:"Obyčajný zlomok jedna polovica",frac34:"Obyčajný zlomok tri štvrtiny",iquest:"Otočený otáznik",Agrave:"Veľké písmeno latinky A s accentom", +Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkčeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkčeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom", +Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkčeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkčeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preškrtnuté",Ugrave:"Veľké písmeno latinky U s accentom", +Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkčeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkčeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad", +aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkčeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkčeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom", +oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkčeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preškrtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkčeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami", +OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkčeňom",374:"Veľké písmeno latinky Y s mäkčeňom",373:"Malé písmeno latinky w s mäkčeňom",375:"Malé písmeno latinky y s mäkčeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otočená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej značky",9658:"Čierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá šipka vpravo", +hArr:"Dvojitá šipka vľavo a vpravo",diams:"Čierne piky",asymp:"Skoro sa rovná"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sl.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sl.js new file mode 100644 index 0000000..84759b6 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sl",{euro:"Evro znak",lsquo:"Levi enojni narekovaj",rsquo:"Desni enojni narekovaj",ldquo:"Levi dvojni narekovaj",rdquo:"Desni dvojni narekovaj",ndash:"En pomišljaj",mdash:"Em pomišljaj",iexcl:"Obrnjen klicaj",cent:"Cent znak",pound:"Funt znak",curren:"Znak valute",yen:"Jen znak",brvbar:"Zlomljena črta",sect:"Znak oddelka",uml:"Diaeresis",copy:"Znak avtorskih pravic",ordf:"Ženski zaporedni kazalnik",laquo:"Levi obrnjen dvojni kotni narekovaj",not:"Ne znak",reg:"Registrirani znak", +macr:"Macron",deg:"Znak stopinj",sup2:"Nadpisano dva",sup3:"Nadpisano tri",acute:"Ostrivec",micro:"Mikro znak",para:"Pilcrow znak",middot:"Sredinska pika",cedil:"Cedilla",sup1:"Nadpisano ena",ordm:"Moški zaporedni kazalnik",raquo:"Desno obrnjen dvojni kotni narekovaj",frac14:"Ena četrtina",frac12:"Ena polovica",frac34:"Tri četrtine",iquest:"Obrnjen vprašaj",Agrave:"Velika latinska črka A s krativcem",Aacute:"Velika latinska črka A z ostrivcem",Acirc:"Velika latinska črka A s strešico",Atilde:"Velika latinska črka A z tildo", +Auml:"Velika latinska črka A z diaeresis-om",Aring:"Velika latinska črka A z obročem",AElig:"Velika latinska črka Æ",Ccedil:"Velika latinska črka C s cedillo",Egrave:"Velika latinska črka E s krativcem",Eacute:"Velika latinska črka E z ostrivcem",Ecirc:"Velika latinska črka E s strešico",Euml:"Velika latinska črka E z diaeresis-om",Igrave:"Velika latinska črka I s krativcem",Iacute:"Velika latinska črka I z ostrivcem",Icirc:"Velika latinska črka I s strešico",Iuml:"Velika latinska črka I z diaeresis-om", +ETH:"Velika latinska črka Eth",Ntilde:"Velika latinska črka N s tildo",Ograve:"Velika latinska črka O s krativcem",Oacute:"Velika latinska črka O z ostrivcem",Ocirc:"Velika latinska črka O s strešico",Otilde:"Velika latinska črka O s tildo",Ouml:"Velika latinska črka O z diaeresis-om",times:"Znak za množenje",Oslash:"Velika prečrtana latinska črka O",Ugrave:"Velika latinska črka U s krativcem",Uacute:"Velika latinska črka U z ostrivcem",Ucirc:"Velika latinska črka U s strešico",Uuml:"Velika latinska črka U z diaeresis-om", +Yacute:"Velika latinska črka Y z ostrivcem",THORN:"Velika latinska črka Thorn",szlig:"Mala ostra latinska črka s",agrave:"Mala latinska črka a s krativcem",aacute:"Mala latinska črka a z ostrivcem",acirc:"Mala latinska črka a s strešico",atilde:"Mala latinska črka a s tildo",auml:"Mala latinska črka a z diaeresis-om",aring:"Mala latinska črka a z obročem",aelig:"Mala latinska črka æ",ccedil:"Mala latinska črka c s cedillo",egrave:"Mala latinska črka e s krativcem",eacute:"Mala latinska črka e z ostrivcem", +ecirc:"Mala latinska črka e s strešico",euml:"Mala latinska črka e z diaeresis-om",igrave:"Mala latinska črka i s krativcem",iacute:"Mala latinska črka i z ostrivcem",icirc:"Mala latinska črka i s strešico",iuml:"Mala latinska črka i z diaeresis-om",eth:"Mala latinska črka eth",ntilde:"Mala latinska črka n s tildo",ograve:"Mala latinska črka o s krativcem",oacute:"Mala latinska črka o z ostrivcem",ocirc:"Mala latinska črka o s strešico",otilde:"Mala latinska črka o s tildo",ouml:"Mala latinska črka o z diaeresis-om", +divide:"Znak za deljenje",oslash:"Mala prečrtana latinska črka o",ugrave:"Mala latinska črka u s krativcem",uacute:"Mala latinska črka u z ostrivcem",ucirc:"Mala latinska črka u s strešico",uuml:"Mala latinska črka u z diaeresis-om",yacute:"Mala latinska črka y z ostrivcem",thorn:"Mala latinska črka thorn",yuml:"Mala latinska črka y z diaeresis-om",OElig:"Velika latinska ligatura OE",oelig:"Mala latinska ligatura oe",372:"Velika latinska črka W s strešico",374:"Velika latinska črka Y s strešico", +373:"Mala latinska črka w s strešico",375:"Mala latinska črka y s strešico",sbquo:"Enojni nizki-9 narekovaj",8219:"Enojni visoki-obrnjen-9 narekovaj",bdquo:"Dvojni nizki-9 narekovaj",hellip:"Horizontalni izpust",trade:"Znak blagovne znamke",9658:"Črni desno-usmerjen kazalec",bull:"Krogla",rarr:"Desno-usmerjena puščica",rArr:"Desno-usmerjena dvojna puščica",hArr:"Leva in desna dvojna puščica",diams:"Črna kara",asymp:"Skoraj enako"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sq.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sq.js new file mode 100644 index 0000000..c709800 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sq.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sq",{euro:"Shenja e Euros",lsquo:"Thonjëza majtas me një vi",rsquo:"Thonjëza djathtas me një vi",ldquo:"Thonjëza majtas",rdquo:"Thonjëza djathtas",ndash:"En viza lidhëse",mdash:"Em viza lidhëse",iexcl:"Pikëçuditëse e përmbysur",cent:"Shenja e Centit",pound:"Shejna e Funtit",curren:"Shenja e valutës",yen:"Shenja e Jenit",brvbar:"Viza e këputur",sect:"Shenja e pjesës",uml:"Diaeresis",copy:"Shenja e të drejtave të kopjimit",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Nuk ka shenjë",reg:"Shenja e të regjistruarit",macr:"Macron",deg:"Shenja e shkallës",sup2:"Super-skripta dy",sup3:"Super-skripta tre",acute:"Theks i mprehtë",micro:"Shjenja e Mikros",para:"Pilcrow sign",middot:"Pika e Mesme",cedil:"Hark nën shkronja",sup1:"Super-skripta një",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Thyesa një të katrat",frac12:"Thyesa një të dytat",frac34:"Thyesa tre të katrat",iquest:"Pikëpyetje e përmbysur",Agrave:"Shkronja e madhe latine A me theks të rëndë", +Aacute:"Shkronja e madhe latine A me theks akute",Acirc:"Shkronja e madhe latine A me theks lakor",Atilde:"Shkronja e madhe latine A me tildë",Auml:"Shkronja e madhe latine A me dy pika",Aring:"Shkronja e madhe latine A me unazë mbi",AElig:"Shkronja e madhe latine Æ",Ccedil:"Shkronja e madhe latine C me hark poshtë",Egrave:"Shkronja e madhe latine E me theks të rëndë",Eacute:"Shkronja e madhe latine E me theks akute",Ecirc:"Shkronja e madhe latine E me theks lakor",Euml:"Shkronja e madhe latine E me dy pika", +Igrave:"Shkronja e madhe latine I me theks të rëndë",Iacute:"Shkronja e madhe latine I me theks akute",Icirc:"Shkronja e madhe latine I me theks lakor",Iuml:"Shkronja e madhe latine I me dy pika",ETH:"Shkronja e madhe latine Eth",Ntilde:"Shkronja e madhe latine N me tildë",Ograve:"Shkronja e madhe latine O me theks të rëndë",Oacute:"Shkronja e madhe latine O me theks akute",Ocirc:"Shkronja e madhe latine O me theks lakor",Otilde:"Shkronja e madhe latine O me tildë",Ouml:"Shkronja e madhe latine O me dy pika", +times:"Shenja e shumëzimit",Oslash:"Shkronja e madhe latine O me vizë në mes",Ugrave:"Shkronja e madhe latine U me theks të rëndë",Uacute:"Shkronja e madhe latine U me theks akute",Ucirc:"Shkronja e madhe latine U me theks lakor",Uuml:"Shkronja e madhe latine U me dy pika",Yacute:"Shkronja e madhe latine Y me theks akute",THORN:"Shkronja e madhe latine Thorn",szlig:"Shkronja e vogë latine s e mprehtë",agrave:"Shkronja e vogë latine a me theks të rëndë",aacute:"Shkronja e vogë latine a me theks të mprehtë", +acirc:"Shkronja e vogël latine a me theks lakor",atilde:"Shkronja e vogël latine a me tildë",auml:"Shkronja e vogël latine a me dy pika",aring:"Shkronja e vogë latine a me unazë mbi",aelig:"Shkronja e vogë latine æ",ccedil:"Shkronja e vogël latine c me hark poshtë",egrave:"Shkronja e vogë latine e me theks të rëndë",eacute:"Shkronja e vogë latine e me theks të mprehtë",ecirc:"Shkronja e vogël latine e me theks lakor",euml:"Shkronja e vogël latine e me dy pika",igrave:"Shkronja e vogë latine i me theks të rëndë", +iacute:"Shkronja e vogë latine i me theks të mprehtë",icirc:"Shkronja e vogël latine i me theks lakor",iuml:"Shkronja e vogël latine i me dy pika",eth:"Shkronja e vogë latine eth",ntilde:"Shkronja e vogël latine n me tildë",ograve:"Shkronja e vogë latine o me theks të rëndë",oacute:"Shkronja e vogë latine o me theks të mprehtë",ocirc:"Shkronja e vogël latine o me theks lakor",otilde:"Shkronja e vogël latine o me tildë",ouml:"Shkronja e vogël latine o me dy pika",divide:"Shenja ndarëse",oslash:"Shkronja e vogël latine o me vizë në mes", +ugrave:"Shkronja e vogë latine u me theks të rëndë",uacute:"Shkronja e vogë latine u me theks të mprehtë",ucirc:"Shkronja e vogël latine u me theks lakor",uuml:"Shkronja e vogël latine u me dy pika",yacute:"Shkronja e vogë latine y me theks të mprehtë",thorn:"Shkronja e vogël latine thorn",yuml:"Shkronja e vogël latine y me dy pika",OElig:"Shkronja e madhe e bashkuar latine OE",oelig:"Shkronja e vogël e bashkuar latine oe",372:"Shkronja e madhe latine W me theks lakor",374:"Shkronja e madhe latine Y me theks lakor", +373:"Shkronja e vogël latine w me theks lakor",375:"Shkronja e vogël latine y me theks lakor",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Shenja e Simbolit Tregtarë",9658:"Black right-pointing pointer",bull:"Pulla",rarr:"Shigjeta djathtas",rArr:"Shenja të dyfishta djathtas",hArr:"Shigjeta e dyfishë majtas-djathtas",diams:"Black diamond suit",asymp:"Gati e barabar me"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sv.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sv.js new file mode 100644 index 0000000..8f741b9 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/sv.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken", +not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt två",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"Bråktal - en kvart",frac12:"Bråktal - en halv",frac34:"Bråktal - tre fjärdedelar",iquest:"Inverterat frågetecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex", +Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex", +Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ", +ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø", +ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lågt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lågt 9-citationstecken",hellip:"Horisontellt uteslutningstecken", +trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/th.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/th.js new file mode 100644 index 0000000..ae0b00e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/th.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","th",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"สัญลักษณ์สกุลเงิน",yen:"สัญลักษณ์เงินเยน",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"สัญลักษณ์หัวข้อย่อย",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/tr.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/tr.js new file mode 100644 index 0000000..3dd220a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/tr.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti", +not:"Not işareti",reg:"Kayıtlı işareti",macr:"Makron",deg:"Derece işareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan işareti",micro:"Mikro işareti",para:"Pilcrow işareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"Sağ işaret çift açı tırnak işareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru işareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi", +Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi", +ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma işareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi", +THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi", +igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme işareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi", +uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük bağlı OE harfi",oelig:"Latin küçük bağlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak işareti",8219:"Tek yüksek-ters-9 tırnak işareti", +bdquo:"Çift düşük-9 tırnak işareti",hellip:"Yatay elips",trade:"Marka tescili işareti",9658:"Siyah sağ işaret işaretçisi",bull:"Koyu nokta",rarr:"Sağa doğru ok",rArr:"Sağa doğru çift ok",hArr:"Sol, sağ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eşit"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/tt.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/tt.js new file mode 100644 index 0000000..2eadb9f --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/tt.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","tt",{euro:"Евро тамгасы",lsquo:"Сул бер иңле куштырнаклар",rsquo:"Уң бер иңле куштырнаклар",ldquo:"Сул ике иңле куштырнаклар",rdquo:"Уң ике иңле куштырнаклар",ndash:"Кыска сызык",mdash:"Озын сызык",iexcl:"Әйләндерелгән өндәү билгесе",cent:"Цент тамгасы",pound:"Фунт тамгасы",curren:"Акча берәмлеге тамгасы",yen:"Иена тамгасы",brvbar:"Broken bar",sect:"Section sign",uml:"Диерезис",copy:"Хокук иясе булу билгесе",ordf:"Feminine ordinal indicator",laquo:"Ачылучы чыршысыман җәя", +not:"Not sign",reg:"Теркәләнгән булу билгесе",macr:"Макрон",deg:"Градус билгесе",sup2:"Икенче өске индекс",sup3:"Өченче өске индекс",acute:"Басым билгесе",micro:"Микро билгесе",para:"Параграф билгесе",middot:"Middle dot",cedil:"Седиль",sup1:"Беренче өске индекс",ordm:"Masculine ordinal indicator",raquo:"Ябылучы чыршысыман җәя",frac14:"Гади дүрттән бер билгесе",frac12:"Гади икедән бер билгесе",frac34:"Гади дүрттән өч билгесе",iquest:"Әйләндерелгән өндәү билгесе",Agrave:"Гравис белән латин A баш хәрефе", +Aacute:"Басым билгесе белән латин A баш хәрефе",Acirc:"Циркумфлекс белән латин A баш хәрефе",Atilde:"Тильда белән латин A баш хәрефе",Auml:"Диерезис белән латин A баш хәрефе",Aring:"Өстендә боҗра булган латин A баш хәрефе",AElig:"Латин Æ баш хәрефе",Ccedil:"Седиль белән латин C баш хәрефе",Egrave:"Гравис белән латин E баш хәрефе",Eacute:"Басым билгесе белән латин E баш хәрефе",Ecirc:"Циркумфлекс белән латин E баш хәрефе",Euml:"Диерезис белән латин E баш хәрефе",Igrave:"Гравис белән латин I баш хәрефе", +Iacute:"Басым билгесе белән латин I баш хәрефе",Icirc:"Циркумфлекс белән латин I баш хәрефе",Iuml:"Диерезис белән латин I баш хәрефе",ETH:"Латин Eth баш хәрефе",Ntilde:"Тильда белән латин N баш хәрефе",Ograve:"Гравис белән латин O баш хәрефе",Oacute:"Басым билгесе белән латин O баш хәрефе",Ocirc:"Циркумфлекс белән латин O баш хәрефе",Otilde:"Тильда белән латин O баш хәрефе",Ouml:"Диерезис белән латин O баш хәрефе",times:"Тапкырлау билгесе",Oslash:"Сызык белән латин O баш хәрефе",Ugrave:"Гравис белән латин U баш хәрефе", +Uacute:"Басым билгесе белән латин U баш хәрефе",Ucirc:"Циркумфлекс белән латин U баш хәрефе",Uuml:"Диерезис белән латин U баш хәрефе",Yacute:"Басым билгесе белән латин Y баш хәрефе",THORN:"Латин Thorn баш хәрефе",szlig:"Латин beta юл хәрефе",agrave:"Гравис белән латин a юл хәрефе",aacute:"Басым билгесе белән латин a юл хәрефе",acirc:"Циркумфлекс белән латин a юл хәрефе",atilde:"Тильда белән латин a юл хәрефе",auml:"Диерезис белән латин a юл хәрефе",aring:"Өстендә боҗра булган латин a юл хәрефе",aelig:"Латин æ юл хәрефе", +ccedil:"Седиль белән латин c юл хәрефе",egrave:"Гравис белән латин e юл хәрефе",eacute:"Басым билгесе белән латин e юл хәрефе",ecirc:"Циркумфлекс белән латин e юл хәрефе",euml:"Диерезис белән латин e юл хәрефе",igrave:"Гравис белән латин i юл хәрефе",iacute:"Басым билгесе белән латин i юл хәрефе",icirc:"Циркумфлекс белән латин i юл хәрефе",iuml:"Диерезис белән латин i юл хәрефе",eth:"Латин eth юл хәрефе",ntilde:"Тильда белән латин n юл хәрефе",ograve:"Гравис белән латин o юл хәрефе",oacute:"Басым билгесе белән латин o юл хәрефе", +ocirc:"Циркумфлекс белән латин o юл хәрефе",otilde:"Тильда белән латин o юл хәрефе",ouml:"Диерезис белән латин o юл хәрефе",divide:"Бүлү билгесе",oslash:"Сызык белән латин o юл хәрефе",ugrave:"Гравис белән латин u юл хәрефе",uacute:"Басым билгесе белән латин u юл хәрефе",ucirc:"Циркумфлекс белән латин u юл хәрефе",uuml:"Диерезис белән латин u юл хәрефе",yacute:"Басым билгесе белән латин y юл хәрефе",thorn:"Латин thorn юл хәрефе",yuml:"Диерезис белән латин y юл хәрефе",OElig:"Латин лигатура OE баш хәрефе", +oelig:"Латин лигатура oe юл хәрефе",372:"Циркумфлекс белән латин W баш хәрефе",374:"Циркумфлекс белән латин Y баш хәрефе",373:"Циркумфлекс белән латин w юл хәрефе",375:"Циркумфлекс белән латин y юл хәрефе",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Ятма эллипс",trade:"Сәүдә маркасы билгесе",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow", +diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ug.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ug.js new file mode 100644 index 0000000..51f4c1d --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/ug.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ پەش سول",rsquo:"يالاڭ پەش ئوڭ",ldquo:"قوش پەش سول",rdquo:"قوش پەش ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"فوند ستېرلىڭ",curren:"پۇل بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگراف بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى", +deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندېكىس 2",sup3:"يۇقىرى ئىندېكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا چېكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندېكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش پەش ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent", +Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ", +ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent", +oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"بۆلۈش بەلگىسى",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn", +yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"خەتلەتكەن تاۋار ماركىسى بەلگىسى",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/uk.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/uk.js new file mode 100644 index 0000000..845e752 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/uk.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","uk",{euro:"Знак євро",lsquo:"Ліві одинарні лапки",rsquo:"Праві одинарні лапки",ldquo:"Ліві подвійні лапки",rdquo:"Праві подвійні лапки",ndash:"Середнє тире",mdash:"Довге тире",iexcl:"Перевернутий знак оклику",cent:"Знак цента",pound:"Знак фунта",curren:"Знак валюти",yen:"Знак єни",brvbar:"Переривчаста вертикальна лінія",sect:"Знак параграфу",uml:"Умлаут",copy:"Знак авторських прав",ordf:"Жіночий порядковий вказівник",laquo:"ліві вказівні подвійні кутові дужки", +not:"Заперечення",reg:"Знак охорони суміжних прав",macr:"Макрон",deg:"Знак градуса",sup2:"два у верхньому індексі",sup3:"три у верхньому індексі",acute:"Знак акута",micro:"Знак мікро",para:"Знак абзацу",middot:"Інтерпункт",cedil:"Седиль",sup1:"Один у верхньому індексі",ordm:"Чоловічий порядковий вказівник",raquo:"праві вказівні подвійні кутові дужки",frac14:"Одна четвертина",frac12:"Одна друга",frac34:"три четвертих",iquest:"Перевернутий знак питання",Agrave:"Велика латинська A з гравісом",Aacute:"Велика латинська А з акутом", +Acirc:"Велика латинська А з циркумфлексом",Atilde:"Велика латинська А з тильдою",Auml:"Велике латинське А з умлаутом",Aring:"Велика латинська A з кільцем згори",AElig:"Велика латинська Æ",Ccedil:"Велика латинська C з седиллю",Egrave:"Велика латинська E з гравісом",Eacute:"Велика латинська E з акутом",Ecirc:"Велика латинська E з циркумфлексом",Euml:"Велика латинська А з умлаутом",Igrave:"Велика латинська I з гравісом",Iacute:"Велика латинська I з акутом",Icirc:"Велика латинська I з циркумфлексом", +Iuml:"Велика латинська І з умлаутом",ETH:"Велика латинська Eth",Ntilde:"Велика латинська N з тильдою",Ograve:"Велика латинська O з гравісом",Oacute:"Велика латинська O з акутом",Ocirc:"Велика латинська O з циркумфлексом",Otilde:"Велика латинська O з тильдою",Ouml:"Велика латинська О з умлаутом",times:"Знак множення",Oslash:"Велика латинська перекреслена O ",Ugrave:"Велика латинська U з гравісом",Uacute:"Велика латинська U з акутом",Ucirc:"Велика латинська U з циркумфлексом",Uuml:"Велика латинська U з умлаутом", +Yacute:"Велика латинська Y з акутом",THORN:"Велика латинська Торн",szlig:"Мала латинська есцет",agrave:"Мала латинська a з гравісом",aacute:"Мала латинська a з акутом",acirc:"Мала латинська a з циркумфлексом",atilde:"Мала латинська a з тильдою",auml:"Мала латинська a з умлаутом",aring:"Мала латинська a з кільцем згори",aelig:"Мала латинська æ",ccedil:"Мала латинська C з седиллю",egrave:"Мала латинська e з гравісом",eacute:"Мала латинська e з акутом",ecirc:"Мала латинська e з циркумфлексом",euml:"Мала латинська e з умлаутом", +igrave:"Мала латинська i з гравісом",iacute:"Мала латинська i з акутом",icirc:"Мала латинська i з циркумфлексом",iuml:"Мала латинська i з умлаутом",eth:"Мала латинська Eth",ntilde:"Мала латинська n з тильдою",ograve:"Мала латинська o з гравісом",oacute:"Мала латинська o з акутом",ocirc:"Мала латинська o з циркумфлексом",otilde:"Мала латинська o з тильдою",ouml:"Мала латинська o з умлаутом",divide:"Знак ділення",oslash:"Мала латинська перекреслена o",ugrave:"Мала латинська u з гравісом",uacute:"Мала латинська u з акутом", +ucirc:"Мала латинська u з циркумфлексом",uuml:"Мала латинська u з умлаутом",yacute:"Мала латинська y з акутом",thorn:"Мала латинська торн",yuml:"Мала латинська y з умлаутом",OElig:"Велика латинська лігатура OE",oelig:"Мала латинська лігатура oe",372:"Велика латинська W з циркумфлексом",374:"Велика латинська Y з циркумфлексом",373:"Мала латинська w з циркумфлексом",375:"Мала латинська y з циркумфлексом",sbquo:"Одиничні нижні лабки",8219:"Верхні одиничні обернені лабки",bdquo:"Подвійні нижні лабки", +hellip:"Три крапки",trade:"Знак торгової марки",9658:"Чорний правий вказівник",bull:"Маркер списку",rarr:"Стрілка вправо",rArr:"Подвійна стрілка вправо",hArr:"Подвійна стрілка вліво-вправо",diams:"Чорний діамонт",asymp:"Наближено дорівнює"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/vi.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/vi.js new file mode 100644 index 0000000..d4e4d37 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/vi.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","vi",{euro:"Ký hiệu Euro",lsquo:"Dấu ngoặc đơn trái",rsquo:"Dấu ngoặc đơn phải",ldquo:"Dấu ngoặc đôi trái",rdquo:"Dấu ngoặc đôi phải",ndash:"Gạch ngang tiếng anh",mdash:"Gạch ngang Em",iexcl:"Chuyển đổi dấu chấm than",cent:"Ký tự tiền Mỹ",pound:"Ký tự tiền Anh",curren:"Ký tự tiền tệ",yen:"Ký tự tiền Yên Nhật",brvbar:"Thanh hỏng",sect:"Ký tự khu vực",uml:"Dấu tách đôi",copy:"Ký tự bản quyền",ordf:"Phần chỉ thị giống cái",laquo:"Chọn dấu ngoặc đôi trái",not:"Không có ký tự", +reg:"Ký tự đăng ký",macr:"Dấu nguyên âm dài",deg:"Ký tự độ",sup2:"Chữ trồi lên trên dạng 2",sup3:"Chữ trồi lên trên dạng 3",acute:"Dấu trọng âm",micro:"Ký tự micro",para:"Ký tự đoạn văn",middot:"Dấu chấm tròn",cedil:"Dấu móc lưới",sup1:"Ký tự trồi lên cấp 1",ordm:"Ký tự biểu hiện giống đực",raquo:"Chọn dấu ngoặc đôi phải",frac14:"Tỉ lệ một phần tư",frac12:"Tỉ lệ một nửa",frac34:"Tỉ lệ ba phần tư",iquest:"Chuyển đổi dấu chấm hỏi",Agrave:"Ký tự la-tinh viết hoa A với dấu huyền",Aacute:"Ký tự la-tinh viết hoa A với dấu sắc", +Acirc:"Ký tự la-tinh viết hoa A với dấu mũ",Atilde:"Ký tự la-tinh viết hoa A với dấu ngã",Auml:"Ký tự la-tinh viết hoa A với dấu hai chấm trên đầu",Aring:"Ký tự la-tinh viết hoa A với biểu tượng vòng tròn trên đầu",AElig:"Ký tự la-tinh viết hoa của Æ",Ccedil:"Ký tự la-tinh viết hoa C với dấu móc bên dưới",Egrave:"Ký tự la-tinh viết hoa E với dấu huyền",Eacute:"Ký tự la-tinh viết hoa E với dấu sắc",Ecirc:"Ký tự la-tinh viết hoa E với dấu mũ",Euml:"Ký tự la-tinh viết hoa E với dấu hai chấm trên đầu", +Igrave:"Ký tự la-tinh viết hoa I với dấu huyền",Iacute:"Ký tự la-tinh viết hoa I với dấu sắc",Icirc:"Ký tự la-tinh viết hoa I với dấu mũ",Iuml:"Ký tự la-tinh viết hoa I với dấu hai chấm trên đầu",ETH:"Viết hoa của ký tự Eth",Ntilde:"Ký tự la-tinh viết hoa N với dấu ngã",Ograve:"Ký tự la-tinh viết hoa O với dấu huyền",Oacute:"Ký tự la-tinh viết hoa O với dấu sắc",Ocirc:"Ký tự la-tinh viết hoa O với dấu mũ",Otilde:"Ký tự la-tinh viết hoa O với dấu ngã",Ouml:"Ký tự la-tinh viết hoa O với dấu hai chấm trên đầu", +times:"Ký tự phép toán nhân",Oslash:"Ký tự la-tinh viết hoa A với dấu ngã xuống",Ugrave:"Ký tự la-tinh viết hoa U với dấu huyền",Uacute:"Ký tự la-tinh viết hoa U với dấu sắc",Ucirc:"Ký tự la-tinh viết hoa U với dấu mũ",Uuml:"Ký tự la-tinh viết hoa U với dấu hai chấm trên đầu",Yacute:"Ký tự la-tinh viết hoa Y với dấu sắc",THORN:"Phần viết hoa của ký tự Thorn",szlig:"Ký tự viết nhỏ la-tinh của chữ s",agrave:"Ký tự la-tinh thường với dấu huyền",aacute:"Ký tự la-tinh thường với dấu sắc",acirc:"Ký tự la-tinh thường với dấu mũ", +atilde:"Ký tự la-tinh thường với dấu ngã",auml:"Ký tự la-tinh thường với dấu hai chấm trên đầu",aring:"Ký tự la-tinh viết thường với biểu tượng vòng tròn trên đầu",aelig:"Ký tự la-tinh viết thường của æ",ccedil:"Ký tự la-tinh viết thường của c với dấu móc bên dưới",egrave:"Ký tự la-tinh viết thường e với dấu huyền",eacute:"Ký tự la-tinh viết thường e với dấu sắc",ecirc:"Ký tự la-tinh viết thường e với dấu mũ",euml:"Ký tự la-tinh viết thường e với dấu hai chấm trên đầu",igrave:"Ký tự la-tinh viết thường i với dấu huyền", +iacute:"Ký tự la-tinh viết thường i với dấu sắc",icirc:"Ký tự la-tinh viết thường i với dấu mũ",iuml:"Ký tự la-tinh viết thường i với dấu hai chấm trên đầu",eth:"Ký tự la-tinh viết thường của eth",ntilde:"Ký tự la-tinh viết thường n với dấu ngã",ograve:"Ký tự la-tinh viết thường o với dấu huyền",oacute:"Ký tự la-tinh viết thường o với dấu sắc",ocirc:"Ký tự la-tinh viết thường o với dấu mũ",otilde:"Ký tự la-tinh viết thường o với dấu ngã",ouml:"Ký tự la-tinh viết thường o với dấu hai chấm trên đầu", +divide:"Ký hiệu phép tính chia",oslash:"Ký tự la-tinh viết thường o với dấu ngã",ugrave:"Ký tự la-tinh viết thường u với dấu huyền",uacute:"Ký tự la-tinh viết thường u với dấu sắc",ucirc:"Ký tự la-tinh viết thường u với dấu mũ",uuml:"Ký tự la-tinh viết thường u với dấu hai chấm trên đầu",yacute:"Ký tự la-tinh viết thường y với dấu sắc",thorn:"Ký tự la-tinh viết thường của chữ thorn",yuml:"Ký tự la-tinh viết thường y với dấu hai chấm trên đầu",OElig:"Ký tự la-tinh viết hoa gạch nối OE",oelig:"Ký tự la-tinh viết thường gạch nối OE", +372:"Ký tự la-tinh viết hoa W với dấu mũ",374:"Ký tự la-tinh viết hoa Y với dấu mũ",373:"Ký tự la-tinh viết thường w với dấu mũ",375:"Ký tự la-tinh viết thường y với dấu mũ",sbquo:"Dấu ngoặc đơn thấp số-9",8219:"Dấu ngoặc đơn đảo ngược số-9",bdquo:"Gấp đôi dấu ngoặc đơn số-9",hellip:"Tĩnh dược chiều ngang",trade:"Ký tự thương hiệu",9658:"Ký tự trỏ về hướng bên phải màu đen",bull:"Ký hiệu",rarr:"Mũi tên hướng bên phải",rArr:"Mũi tên hướng bên phải dạng đôi",hArr:"Mũi tên hướng bên trái dạng đôi",diams:"Ký hiệu hình thoi", +asymp:"Gần bằng với"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js new file mode 100644 index 0000000..6896e91 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"长划线",iexcl:"竖翻叹号",cent:"分币符号",pound:"英镑符号",curren:"货币符号",yen:"日元符号",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号", +Agrave:"带抑音符的拉丁文大写字母 A",Aacute:"带锐音符的拉丁文大写字母 A",Acirc:"带扬抑符的拉丁文大写字母 A",Atilde:"带颚化符的拉丁文大写字母 A",Auml:"带分音符的拉丁文大写字母 A",Aring:"带上圆圈的拉丁文大写字母 A",AElig:"拉丁文大写字母 Ae",Ccedil:"带下加符的拉丁文大写字母 C",Egrave:"带抑音符的拉丁文大写字母 E",Eacute:"带锐音符的拉丁文大写字母 E",Ecirc:"带扬抑符的拉丁文大写字母 E",Euml:"带分音符的拉丁文大写字母 E",Igrave:"带抑音符的拉丁文大写字母 I",Iacute:"带锐音符的拉丁文大写字母 I",Icirc:"带扬抑符的拉丁文大写字母 I",Iuml:"带分音符的拉丁文大写字母 I",ETH:"拉丁文大写字母 Eth",Ntilde:"带颚化符的拉丁文大写字母 N",Ograve:"带抑音符的拉丁文大写字母 O",Oacute:"带锐音符的拉丁文大写字母 O",Ocirc:"带扬抑符的拉丁文大写字母 O",Otilde:"带颚化符的拉丁文大写字母 O", +Ouml:"带分音符的拉丁文大写字母 O",times:"乘号",Oslash:"带粗线的拉丁文大写字母 O",Ugrave:"带抑音符的拉丁文大写字母 U",Uacute:"带锐音符的拉丁文大写字母 U",Ucirc:"带扬抑符的拉丁文大写字母 U",Uuml:"带分音符的拉丁文大写字母 U",Yacute:"带抑音符的拉丁文大写字母 Y",THORN:"拉丁文大写字母 Thorn",szlig:"拉丁文小写字母清音 S",agrave:"带抑音符的拉丁文小写字母 A",aacute:"带锐音符的拉丁文小写字母 A",acirc:"带扬抑符的拉丁文小写字母 A",atilde:"带颚化符的拉丁文小写字母 A",auml:"带分音符的拉丁文小写字母 A",aring:"带上圆圈的拉丁文小写字母 A",aelig:"拉丁文小写字母 Ae",ccedil:"带下加符的拉丁文小写字母 C",egrave:"带抑音符的拉丁文小写字母 E",eacute:"带锐音符的拉丁文小写字母 E",ecirc:"带扬抑符的拉丁文小写字母 E",euml:"带分音符的拉丁文小写字母 E",igrave:"带抑音符的拉丁文小写字母 I", +iacute:"带锐音符的拉丁文小写字母 I",icirc:"带扬抑符的拉丁文小写字母 I",iuml:"带分音符的拉丁文小写字母 I",eth:"拉丁文小写字母 Eth",ntilde:"带颚化符的拉丁文小写字母 N",ograve:"带抑音符的拉丁文小写字母 O",oacute:"带锐音符的拉丁文小写字母 O",ocirc:"带扬抑符的拉丁文小写字母 O",otilde:"带颚化符的拉丁文小写字母 O",ouml:"带分音符的拉丁文小写字母 O",divide:"除号",oslash:"带粗线的拉丁文小写字母 O",ugrave:"带抑音符的拉丁文小写字母 U",uacute:"带锐音符的拉丁文小写字母 U",ucirc:"带扬抑符的拉丁文小写字母 U",uuml:"带分音符的拉丁文小写字母 U",yacute:"带抑音符的拉丁文小写字母 Y",thorn:"拉丁文小写字母 Thorn",yuml:"带分音符的拉丁文小写字母 Y",OElig:"拉丁文大写连字 Oe",oelig:"拉丁文小写连字 Oe",372:"带扬抑符的拉丁文大写字母 W",374:"带扬抑符的拉丁文大写字母 Y", +373:"带扬抑符的拉丁文小写字母 W",375:"带扬抑符的拉丁文小写字母 Y",sbquo:"单下 9 形引号",8219:"单高横翻 9 形引号",bdquo:"双下 9 形引号",hellip:"水平省略号",trade:"商标标志",9658:"实心右指指针",bull:"加重号",rarr:"向右箭头",rArr:"向右双线箭头",hArr:"左右双线箭头",diams:"实心方块纸牌",asymp:"约等于"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/zh.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/zh.js new file mode 100644 index 0000000..7bc2b55 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/lang/zh.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","zh",{euro:"歐元符號",lsquo:"左單引號",rsquo:"右單引號",ldquo:"左雙引號",rdquo:"右雙引號",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"Broken bar",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"Micro sign",para:"段落符號",middot:"中間點",cedil:"字母 C 下面的尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"右雙角括號",frac14:"四分之一符號",frac12:"Vulgar fraction one half", +frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"拉丁大寫字母 E 帶分音符號",Aring:"拉丁大寫字母 A 帶上圓圈",AElig:"拉丁大寫字母 Æ",Ccedil:"拉丁大寫字母 C 帶下尾符號",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis", +Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis", +times:"乘號",Oslash:"拉丁大寫字母 O 帶粗線符號",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde", +auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis", +eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex", +uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark", +hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/specialchar.js b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/specialchar.js new file mode 100644 index 0000000..c4d1696 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/specialchar/dialogs/specialchar.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("specialchar",function(i){var e,l=i.lang.specialchar,k=function(c){var b,c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);if("a"==c.getName()&&(b=c.getChild(0).getHtml()))c.removeClass("cke_light_background"),e.hide(),c=i.document.createElement("span"),c.setHtml(b),i.insertText(c.getText())},m=CKEDITOR.tools.addFunction(k),j,g=function(c,b){var a,b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){j&&d(null,j); +var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");j=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml(" "),e.getContentElement("info","htmlPreview").getElement().setHtml(" "),b.getParent().removeClass("cke_light_background"), +j=void 0)},n=CKEDITOR.tools.addFunction(function(c){var c=new CKEDITOR.dom.event(c),b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==i.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:if(a=b.getParent().getParent().getNext())if((a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type)a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 32:k({data:c});c.preventDefault(); +break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)): +d(null,b)}});return{title:l.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=i.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=[''],d=0,g=b.length,h,e;d');for(var j=0;j'+h+''+e+"")}else f.push('")}f.push("")}f.push("
       ');f.push("
      ",''+l.options+"");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:i.lang.common.generalTab, +title:i.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox", +align:"top",children:[{type:"html",html:"
      "},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"
       
      "},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", +html:"
       
      "}]}]}]}]}]}}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/table/dialogs/table.js b/php/pic_switch_demo/static/ckeditor/plugins/table/dialogs/table.js new file mode 100644 index 0000000..6f65681 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/table/dialogs/table.js @@ -0,0 +1,21 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){function r(a){for(var e=0,l=0,k=0,m,g=a.$.rows.length;kl&&(l=e)}return l}function o(a){return function(){var e=this.getValue(),e=!!(CKEDITOR.dialog.validate.integer()(e)&&0n.getSize("width")?"100%":500:0,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&& +a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles"); +a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:" "},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing", +this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right", +html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0"+h.widthPx}]},f,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:d(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")|| +b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},f,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.alignLeft,"left"],[e.alignCenter,"center"],[e.alignRight,"right"],[e.alignJustify,"justify"]],setup:d(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align"); +a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:d(function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]}, +f,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:i.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()): +a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:i.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},f,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:d(function(a){var b=a.getAttribute("bgColor"); +return a.getStyle("background-color")||b}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}},k?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:f]},f, +{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:d(function(a){var b=a.getAttribute("borderColor");return a.getStyle("border-color")||b}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},k?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(m?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align", +"bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d
      '),d='';a.image&&b&&(d+='');d+='");k.on("click",function(){p(a.html)});return k}function p(a){var b=CKEDITOR.dialog.getCurrent();b.getValueOf("selectTpl","chkInsertOpt")?(c.fire("saveSnapshot"),c.setData(a,function(){b.hide();var a=c.createRange();a.moveToElementEditStart(c.editable());a.select();setTimeout(function(){c.fire("saveSnapshot")},0)})):(c.insertHtml(a),b.hide())}function i(a){var b=a.data.getTarget(), +c=g.equals(b);if(c||g.contains(b)){var d=a.data.getKeystroke(),f=g.getElementsByTag("a"),e;if(f){if(c)e=f.getItem(0);else switch(d){case 40:e=b.getNext();break;case 38:e=b.getPrevious();break;case 13:case 32:b.fire("click")}e&&(e.focus(),a.data.preventDefault())}}}var h=CKEDITOR.plugins.get("templates");CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(h.path+"dialogs/templates.css"));var g,h="cke_tpl_list_label_"+CKEDITOR.tools.getNextNumber(),f=c.lang.templates,l=c.config;return{title:c.lang.templates.title, +minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:"selectTpl",label:f.title,elements:[{type:"vbox",padding:5,children:[{id:"selectTplText",type:"html",html:""+f.selectPromptMsg+""},{id:"templatesList",type:"html",focus:!0,html:'
      '+f.options+""},{id:"chkInsertOpt",type:"checkbox",label:f.insertOption, +"default":l.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var a=this.getContentElement("selectTpl","templatesList");g=a.getElement();CKEDITOR.loadTemplates(l.templates_files,function(){var b=(l.templates||"default").split(",");if(b.length){var c=g;c.setHtml("");for(var d=0,h=b.length;d'+f.emptyListMsg+"")});this._.element.on("keydown",i)},onHide:function(){this._.element.removeListener("keydown",i)}}})})(); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/templates/templates/default.js b/php/pic_switch_demo/static/ckeditor/plugins/templates/templates/default.js new file mode 100644 index 0000000..d8c172e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/templates/templates/default.js @@ -0,0 +1,6 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.addTemplates("default",{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath("templates")+"templates/images/"),templates:[{title:"Image and Title",image:"template1.gif",description:"One main image with a title and text that surround the image.",html:'

      Type the title here

      Type the text here

      '},{title:"Strange Template",image:"template2.gif",description:"A template that defines two colums, each one with a title, and some text.", +html:'

      Title 1

      Title 2

      Text 1Text 2

      More text goes here.

      '},{title:"Text and Table",image:"template3.gif",description:"A title with some text and a table.",html:'

      Title goes here

      Table title
         
         
         

      Type the text here

      '}]}); \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/plugins/templates/templates/images/template1.gif b/php/pic_switch_demo/static/ckeditor/plugins/templates/templates/images/template1.gif new file mode 100644 index 0000000000000000000000000000000000000000..efdabbebd4503ceb55c948fa73b9b83cbd373e57 GIT binary patch literal 375 zcmV--0f_!bNk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB95pDD3{Ep z^T{;k4xj+g%7JRP+$IPq!1Bb&uKB$DQa@x|8x8NO4b`hO25#TOnRw~9=3yE0xyeE4CQ8$(2)Mz>8udZCXX=BRr7DZbW_#-a zYZEHlJM(KAEc4dditDMnJ4(CC+&uK06fIp0D*Z|wX5EYpGb{?;a*WKVoEoWp!Y!`y zeo4*}FFC(bZf@duda#%D-q zaHzPUxA@lRm;@PFNk%w1VPpVC0FeLyva+%O00960{{R30A^8LV00000EC2ui0Av7000092 zgpaAq?GK}zwAu@W-n{z{hT=$;9b%^H%BpA!$8!13_AS@=&Xal%3~GMDB93TG#*l%g z^9hYgr_`$T`us4l+^+W<)gC_JviY3#AeC&_xD98m<8-m1jvsB&<_@0q~XXRsCap^IRqK$(K#c!N9pBf82AawVH$?WN){q&IjedXiz+EX zOS+od%WDgp+d909toAG5`lTy-9D18rOxWx+T}>D*o&1Qa9n5V^96nACtqfi*?*05t zZSMX~zfpQ^<%jRPUfiDEO8=eEuB)DKv}S_cJW8uTxqL`=(AMXYB~Aenu4SM=e_ zrj6M`kqsZ_xrlC}y^5evW>krApudqWP2zFM5Fo{b%sA$2wGU)SI5vkKVQCad(WEn$ zGF`IFr&KONpB8ayRSwduHn4I{;q@zxs8h=VDkqjl*t8(;n#c+zd*_U=jy QeEa(S3plV~2n7HDJNoX*`2YX_ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/plugins/wsc/LICENSE.md b/php/pic_switch_demo/static/ckeditor/plugins/wsc/LICENSE.md new file mode 100644 index 0000000..c7d374a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/wsc/LICENSE.md @@ -0,0 +1,28 @@ +Software License Agreement +========================== + +**CKEditor WSC Plugin** +Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: + +* GNU General Public License Version 2 or later (the "GPL"): + http://www.gnu.org/licenses/gpl.html + +* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): + http://www.gnu.org/licenses/lgpl.html + +* Mozilla Public License Version 1.1 or later (the "MPL"): + http://www.mozilla.org/MPL/MPL-1.1.html + +You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. + +Sources of Intellectual Property Included in this plugin +-------------------------------------------------------- + +Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/php/pic_switch_demo/static/ckeditor/plugins/wsc/README.md b/php/pic_switch_demo/static/ckeditor/plugins/wsc/README.md new file mode 100644 index 0000000..46eeafb --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/wsc/README.md @@ -0,0 +1,25 @@ +CKEditor WebSpellChecker Plugin +=============================== + +This plugin brings Web Spell Checker (WSC) into CKEditor. + +WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. + +Installation +------------ + +1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. +2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): + + config.extraPlugins = 'wsc'; + +That's all. WSC will appear on the editor toolbar and will be ready to use. + +License +------- + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. + +Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). diff --git a/php/pic_switch_demo/static/ckeditor/plugins/wsc/dialogs/ciframe.html b/php/pic_switch_demo/static/ckeditor/plugins/wsc/dialogs/ciframe.html new file mode 100644 index 0000000..82df25b --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/plugins/wsc/dialogs/ciframe.html @@ -0,0 +1,66 @@ + + + + + + + + +

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

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

      +
      +

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

      +

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

      +
      +

      Click the buttons to create and remove a CKEditor instance.

      +

      + + +

      + +
      +
      + + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/api.html b/php/pic_switch_demo/static/ckeditor/samples/api.html new file mode 100644 index 0000000..5becd32 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/api.html @@ -0,0 +1,207 @@ + + + + + + API Usage — CKEditor Sample + + + + + + +

      + CKEditor Samples » Using CKEditor JavaScript API +

      +
      +

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

      +

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

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

      +

      + + +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/appendto.html b/php/pic_switch_demo/static/ckeditor/samples/appendto.html new file mode 100644 index 0000000..a84b0ee --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/appendto.html @@ -0,0 +1,56 @@ + + + + + + Append To Page Element Using JavaScript Code — CKEditor Sample + + + + +

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

      +
      +
      +

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

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

      + CKEditor — Posted Data +

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

      + CKEditor Samples » Data Filtering and Features Activation +

      +
      +

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

      +

      When and what is being filtered?

      +

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

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

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

      + +

      How to configure or disable ACF?

      +

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

      +

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

      +

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

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

      + Now try to play with allowed content: +

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

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

      +

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

      +

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

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

      Beyond data flow: Features activation

      +

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

      +

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

      + +

      Sample configurations

      +

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

      +
      + +
      + +
      +

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

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

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

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

      + The following rules may require additional explanation: +

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

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

      +
      + + +
      + +
      + +
      + +
      +

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

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

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

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

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

      +
      + + +
      + +
      + +
      + +
      +

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

      +

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

      +
      +

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

      +
      + + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/divreplace.html b/php/pic_switch_demo/static/ckeditor/samples/divreplace.html new file mode 100644 index 0000000..3ee0e0e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/divreplace.html @@ -0,0 +1,141 @@ + + + + + + Replace DIV — CKEditor Sample + + + + + + +

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

      +
      +

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

      +

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

      +
      +

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

      +
      +

      + Part 1 +

      +

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

      +
      +
      +

      + Part 2 +

      +

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

      +

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

      +
      +
      +

      + Part 3 +

      +

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

      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/index.html b/php/pic_switch_demo/static/ckeditor/samples/index.html new file mode 100644 index 0000000..964c5a3 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/index.html @@ -0,0 +1,128 @@ + + + + + + CKEditor Samples + + + +

      + CKEditor Samples +

      +
      +
      +

      + Basic Samples +

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

      + Basic Customization +

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

      Plugins

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

      + Inline Editing +

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

      + Advanced Samples +

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

      CKEditor Samples » Massive inline editing

      +
      +

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

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

      Click inside of any element below to start editing.

      +
      +
      +
      + +
      +
      +
      +

      + Fusce vitae porttitor +

      +

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

      +

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

      +
      +

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

      +
      +
      +

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

      +
      +

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

      +

      Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.

      +
      +
      +
      +
      +

      + Integer condimentum sit amet +

      +

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

      +

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

      +

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

      +
      +
      +

      + Praesent wisi accumsan sit amet nibh +

      +

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

      +

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

      +

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

      +
      +
      +
      +
      +

      + CKEditor logo +

      +

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

      +

      + Nullam laoreet vel consectetuer tellus suscipit +

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

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

      +

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

      +

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

      +
      +
      +
      +
      + Tags of this article: +

      + inline, editing, floating, CKEditor +

      +
      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/inlinebycode.html b/php/pic_switch_demo/static/ckeditor/samples/inlinebycode.html new file mode 100644 index 0000000..fe627d0 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/inlinebycode.html @@ -0,0 +1,121 @@ + + + + + + Inline Editing by Code — CKEditor Sample + + + + + +

      + CKEditor Samples » Inline Editing by Code +

      +
      +

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

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

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

      +
      +
      +

      Saturn V carrying Apollo 11 Apollo 11

      + +

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

      + +

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

      + +

      Broadcasting and quotes

      + +

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

      + +
      +

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

      +
      + +

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

      + +
      +

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

      +
      + +

      Technical details

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

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

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

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

      + +
      +

      Source: Wikipedia.org

      +
      + + + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/inlinetextarea.html b/php/pic_switch_demo/static/ckeditor/samples/inlinetextarea.html new file mode 100644 index 0000000..097361e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/inlinetextarea.html @@ -0,0 +1,110 @@ + + + + + + Replace Textarea with Inline Editor — CKEditor Sample + + + + + +

      + CKEditor Samples » Replace Textarea with Inline Editor +

      +
      +

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

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

      This is a sample form with some fields

      +

      + Title:
      +

      +

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

      +

      + +

      +
      + + + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/jquery.html b/php/pic_switch_demo/static/ckeditor/samples/jquery.html new file mode 100644 index 0000000..97afe86 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/jquery.html @@ -0,0 +1,100 @@ + + + + + + jQuery Adapter — CKEditor Sample + + + + + + + + +

      + CKEditor Samples » Create Editors with jQuery +

      +
      +
      +

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

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

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

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

      Inline Example

      + +
      +

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

      +

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

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

      +

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

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

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

      +
      + +
      + +

      Classic (iframe-based) Example

      + + + +

      + + + + + +

      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/plugins/dialog/assets/my_dialog.js b/php/pic_switch_demo/static/ckeditor/samples/plugins/dialog/assets/my_dialog.js new file mode 100644 index 0000000..3d8f369 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/plugins/dialog/assets/my_dialog.js @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.dialog.add( 'myDialog', function( editor ) { + return { + title: 'My Dialog', + minWidth: 400, + minHeight: 200, + contents: [ + { + id: 'tab1', + label: 'First Tab', + title: 'First Tab', + elements: [ + { + id: 'input1', + type: 'text', + label: 'Text Field' + }, + { + id: 'select1', + type: 'select', + label: 'Select Field', + items: [ + [ 'option1', 'value1' ], + [ 'option2', 'value2' ] + ] + } + ] + }, + { + id: 'tab2', + label: 'Second Tab', + title: 'Second Tab', + elements: [ + { + id: 'button1', + type: 'button', + label: 'Button Field' + } + ] + } + ] + }; +} ); + diff --git a/php/pic_switch_demo/static/ckeditor/samples/plugins/dialog/dialog.html b/php/pic_switch_demo/static/ckeditor/samples/plugins/dialog/dialog.html new file mode 100644 index 0000000..b4940b2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/plugins/dialog/dialog.html @@ -0,0 +1,187 @@ + + + + + + Using API to Customize Dialog Windows — CKEditor Sample + + + + + + + + + +

      + CKEditor Samples » Using CKEditor Dialog API +

      +
      +

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

      +

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

      +
      +

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

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

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

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

      + CKEditor Samples » ENTER Key Configuration +

      +
      +

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

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

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

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

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

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

      +
      + +

      +

      + +

      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla b/php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla new file mode 100644 index 0000000000000000000000000000000000000000..27e68ccd1cb7192c8bda2418d198d90f1aff10a7 GIT binary patch literal 85504 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js b/php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js new file mode 100644 index 0000000..95fdf0a --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js @@ -0,0 +1,18 @@ +var swfobject=function(){function u(){if(!s){try{var a=d.getElementsByTagName("body")[0].appendChild(d.createElement("span"));a.parentNode.removeChild(a)}catch(b){return}s=!0;for(var a=x.length,c=0;cf){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;D()})()}else D()}function D(){var a=p.length;if(0e.wk))t(c,!0),f&&(g.success=!0,g.ref=E(c),f(g));else if(p[b].expressInstall&&F()){g={};g.data=p[b].expressInstall;g.width=d.getAttribute("width")||"0";g.height=d.getAttribute("height")||"0";d.getAttribute("class")&&(g.styleclass=d.getAttribute("class"));d.getAttribute("align")&&(g.align=d.getAttribute("align"));for(var h={},d=d.getElementsByTagName("param"),j=d.length,k=0;ke.wk)}function G(a,b,c,f){A=!0;H=f||null;N={success:!1,id:c};var g=n(c);if(g){"OBJECT"==g.nodeName?(w=I(g),B=null):(w=g,B=c);a.id= +O;if(typeof a.width==i||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width="310";if(typeof a.height==i||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height="137";d.title=d.title.slice(0,47)+" - Flash Player Installation";f=e.ie&&e.win?"ActiveX":"PlugIn";f="MMredirectURL="+m.location.toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+d.title;b.flashvars=typeof b.flashvars!=i?b.flashvars+("&"+f):f;e.ie&&(e.win&&4!=g.readyState)&&(f=d.createElement("div"),c+="SWFObjectNew",f.setAttribute("id", +c),g.parentNode.insertBefore(f,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());J(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(I(a),b);a.style.display="none";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(I(a),a)}function I(a){var b=d.createElement("div");if(e.win&& +e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(r)[0])if(a=a.childNodes)for(var c=a.length,f=0;fe.wk)return f;if(g)if(typeof a.id==i&&(a.id=c),e.ie&&e.win){var o="",h;for(h in a)a[h]!=Object.prototype[h]&&("data"==h.toLowerCase()?b.movie=a[h]:"styleclass"==h.toLowerCase()?o+=' class="'+a[h]+'"':"classid"!=h.toLowerCase()&&(o+=" "+ +h+'="'+a[h]+'"'));h="";for(var j in b)b[j]!=Object.prototype[j]&&(h+='');g.outerHTML='"+h+"";C[C.length]=a.id;f=n(a.id)}else{j=d.createElement(r);j.setAttribute("type",y);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(o in b)b[o]!=Object.prototype[o]&&"movie"!=o.toLowerCase()&& +(a=j,h=o,k=b[o],c=d.createElement("param"),c.setAttribute("name",h),c.setAttribute("value",k),a.appendChild(c));g.parentNode.replaceChild(j,g);f=j}return f}function P(a){var b=n(a);b&&"OBJECT"==b.nodeName&&(e.ie&&e.win?(b.style.display="none",function(){if(4==b.readyState){var c=n(a);if(c){for(var f in c)"function"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function n(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b} +function U(a,b,c){a.attachEvent(b,c);v[v.length]=[a,b,c]}function z(a){var b=e.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName("head")[0];if(g){c=c&&"string"==typeof c?c:"screen";f&&(K=l=null);if(!l||K!=c)f=d.createElement("style"),f.setAttribute("type","text/css"),f.setAttribute("media",c),l=g.appendChild(f), +e.ie&&(e.win&&typeof d.styleSheets!=i&&0\.;]/.exec(a)&&typeof encodeURIComponent!=i?encodeURIComponent(a):a}var i="undefined",r="object",y="application/x-shockwave-flash", +O="SWFObjectExprInst",m=window,d=document,q=navigator,T=!1,x=[function(){T?V():D()}],p=[],C=[],v=[],w,B,H,N,s=!1,A=!1,l,K,R=!0,e=function(){var a=typeof d.getElementById!=i&&typeof d.getElementsByTagName!=i&&typeof d.createElement!=i,b=q.userAgent.toLowerCase(),c=q.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!+"\v1",e=[0,0,0],h=null;if(typeof q.plugins!=i&&typeof q.plugins["Shockwave Flash"]== +r){if((h=q.plugins["Shockwave Flash"].description)&&!(typeof q.mimeTypes!=i&&q.mimeTypes[y]&&!q.mimeTypes[y].enabledPlugin))T=!0,g=!1,h=h.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(h.replace(/^(.*)\..*$/,"$1"),10),e[1]=parseInt(h.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof m.ActiveXObject!=i)try{var j=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(j&&(h=j.GetVariable("$version")))g=!0,h=h.split(" ")[1].split(","), +e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)]}catch(k){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((typeof d.readyState!=i&&"complete"==d.readyState||typeof d.readyState==i&&(d.getElementsByTagName("body")[0]||d.body))&&u(),s||(typeof d.addEventListener!=i&&d.addEventListener("DOMContentLoaded",u,!1),e.ie&&e.win&&(d.attachEvent("onreadystatechange",function(){"complete"==d.readyState&&(d.detachEvent("onreadystatechange",arguments.callee),u())}),m==top&&function(){if(!s){try{d.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee, +0);return}u()}}()),e.wk&&function(){s||(/loaded|complete/.test(d.readyState)?u():setTimeout(arguments.callee,0))}(),M(u)))})();(function(){e.ie&&e.win&&window.attachEvent("onunload",function(){for(var a=v.length,b=0;be.wk)&&a&&b&&c&&d&&g?(t(b,!1),L(function(){c+="";d+="";var e={};if(k&&typeof k===r)for(var l in k)e[l]=k[l];e.data=a;e.width=c;e.height=d;l={};if(j&&typeof j===r)for(var p in j)l[p]=j[p];if(h&&typeof h===r)for(var q in h)l.flashvars=typeof l.flashvars!=i?l.flashvars+("&"+q+"="+h[q]):q+"="+h[q];if(z(g))p=J(e,l,b),e.id== +b&&t(b,!0),n.success=!0,n.ref=p;else{if(o&&F()){e.data=o;G(e,l,b,m);return}t(b,!0)}m&&m(n)})):m&&m(n)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:z,createSWF:function(a,b,c){if(e.w3)return J(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:L,addLoadEvent:M,getQueryParamValue:function(a){var b= +d.location.search||d.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(null==a)return S(b);for(var b=b.split("&"),c=0;c + + + + + Output for Flash — CKEditor Sample + + + + + + + + + + + +

      + CKEditor Samples » Producing Flash Compliant HTML Output +

      +
      +

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

      +

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

      +

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

      +
      +

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

      + + + + + +
      + + +

      + +

      +
      +
      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/outputhtml.html b/php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/outputhtml.html new file mode 100644 index 0000000..d857b4e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/plugins/htmlwriter/outputhtml.html @@ -0,0 +1,221 @@ + + + + + + HTML Compliant Output — CKEditor Sample + + + + + + + + + +

      + CKEditor Samples » Producing HTML Compliant Output +

      +
      +

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

      +

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

      +

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

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

      + + + +

      +

      + +

      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/plugins/magicline/magicline.html b/php/pic_switch_demo/static/ckeditor/samples/plugins/magicline/magicline.html new file mode 100644 index 0000000..1638f4c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/plugins/magicline/magicline.html @@ -0,0 +1,206 @@ + + + + + + Using Magicline plugin — CKEditor Sample + + + + + + + +

      + CKEditor Samples » Using Magicline plugin +

      +
      +

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

      +

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

      +
      +
      + +
      +

      + This editor uses a default Magicline setup. +

      +
      + + +
      +
      +
      + +
      +

      + This editor is using a blue line. +

      +
      +CKEDITOR.replace( 'editor2', {
      +	magicline_color: 'blue'
      +});
      +
      + + +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/plugins/toolbar/toolbar.html b/php/pic_switch_demo/static/ckeditor/samples/plugins/toolbar/toolbar.html new file mode 100644 index 0000000..7d7a99e --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/plugins/toolbar/toolbar.html @@ -0,0 +1,232 @@ + + + + + + Toolbar Configuration — CKEditor Sample + + + + + + + +

      + CKEditor Samples » Toolbar Configuration +

      +
      +

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

      + +

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

      + +

      By config.toolbar

      + +

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

      + +

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

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

      By config.toolbarGroups

      + +

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

      + +

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

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

      Full toolbar configuration

      +

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

      +

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

      + +
      
      +	
      + + + + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/plugins/wysiwygarea/fullpage.html b/php/pic_switch_demo/static/ckeditor/samples/plugins/wysiwygarea/fullpage.html new file mode 100644 index 0000000..8c6f2e8 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/plugins/wysiwygarea/fullpage.html @@ -0,0 +1,77 @@ + + + + + + Full Page Editing — CKEditor Sample + + + + + + + + + +

      + CKEditor Samples » Full Page Editing +

      +
      +

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

      +

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

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

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

      +

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

      +
      +
      + + + +

      + +

      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/readonly.html b/php/pic_switch_demo/static/ckeditor/samples/readonly.html new file mode 100644 index 0000000..cf609df --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/readonly.html @@ -0,0 +1,73 @@ + + + + + + Using the CKEditor Read-Only API — CKEditor Sample + + + + + +

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

      +
      +

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

      +

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

      +
      +
      +

      + +

      +

      + + +

      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/replacebyclass.html b/php/pic_switch_demo/static/ckeditor/samples/replacebyclass.html new file mode 100644 index 0000000..6baea4c --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/replacebyclass.html @@ -0,0 +1,57 @@ + + + + + + Replace Textareas by Class Name — CKEditor Sample + + + + +

      + CKEditor Samples » Replace Textarea Elements by Class Name +

      +
      +

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

      +

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

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

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

      +
      +
      +

      + + +

      +

      + +

      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/replacebycode.html b/php/pic_switch_demo/static/ckeditor/samples/replacebycode.html new file mode 100644 index 0000000..8e7d7f7 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/replacebycode.html @@ -0,0 +1,56 @@ + + + + + + Replace Textarea by Code — CKEditor Sample + + + + +

      + CKEditor Samples » Replace Textarea Elements Using JavaScript Code +

      +
      +
      +

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

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

      + +

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

      + CKEditor Samples » TAB Key-Based Navigation +

      +
      +

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

      +
      +

      + +

      +
      +

      + +

      +

      + +

      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/uicolor.html b/php/pic_switch_demo/static/ckeditor/samples/uicolor.html new file mode 100644 index 0000000..9a42c78 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/uicolor.html @@ -0,0 +1,69 @@ + + + + + + UI Color Picker — CKEditor Sample + + + + +

      + CKEditor Samples » UI Color +

      +
      +

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

      +
      +
      +

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

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

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

      +

      + + +

      +

      + +

      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/uilanguages.html b/php/pic_switch_demo/static/ckeditor/samples/uilanguages.html new file mode 100644 index 0000000..f428fdb --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/uilanguages.html @@ -0,0 +1,119 @@ + + + + + + User Interface Globalization — CKEditor Sample + + + + + +

      + CKEditor Samples » User Interface Languages +

      +
      +

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

      +

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

      +

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

      +

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

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

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

      +
      +
      +

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

      +

      + + +

      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/samples/xhtmlstyle.html b/php/pic_switch_demo/static/ckeditor/samples/xhtmlstyle.html new file mode 100644 index 0000000..600cddc --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/samples/xhtmlstyle.html @@ -0,0 +1,231 @@ + + + + + + XHTML Compliant Output — CKEditor Sample + + + + + + +

      + CKEditor Samples » Producing XHTML Compliant Output +

      +
      +

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

      +

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

      +

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

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

      + + + +

      +

      + +

      +
      + + + diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/dialog.css b/php/pic_switch_demo/static/ckeditor/skins/moono/dialog.css new file mode 100644 index 0000000..76c4651 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/dialog.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie.css b/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie.css new file mode 100644 index 0000000..1474e90 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie7.css b/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie7.css new file mode 100644 index 0000000..ebe0b78 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie8.css b/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie8.css new file mode 100644 index 0000000..566f3c2 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_iequirks.css b/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_iequirks.css new file mode 100644 index 0000000..f8887c7 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/dialog_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/editor.css b/php/pic_switch_demo/static/ckeditor/skins/moono/editor.css new file mode 100644 index 0000000..9616d79 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/editor.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/editor_gecko.css b/php/pic_switch_demo/static/ckeditor/skins/moono/editor_gecko.css new file mode 100644 index 0000000..66de2de --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/editor_gecko.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie.css b/php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie.css new file mode 100644 index 0000000..a7ee066 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie7.css b/php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie7.css new file mode 100644 index 0000000..6eece07 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie8.css b/php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie8.css new file mode 100644 index 0000000..1f4dbdc --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/editor_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/editor_iequirks.css b/php/pic_switch_demo/static/ckeditor/skins/moono/editor_iequirks.css new file mode 100644 index 0000000..48d7989 --- /dev/null +++ b/php/pic_switch_demo/static/ckeditor/skins/moono/editor_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/icons.png b/php/pic_switch_demo/static/ckeditor/skins/moono/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec992d9220ecaf92dd8b8f462ad43b0eaef2f8a GIT binary patch literal 20833 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/icons_hidpi.png b/php/pic_switch_demo/static/ckeditor/skins/moono/icons_hidpi.png new file mode 100644 index 0000000000000000000000000000000000000000..6e103c05f11690fe3f9fd56dbd67205b58d7e90d GIT binary patch literal 67753 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 z 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/images/arrow.png b/php/pic_switch_demo/static/ckeditor/skins/moono/images/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..d72b5f3b8808bd89996ef62f845164d459957a1b GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol>!VDz;rWf@BDXjpX5LX~=X=(ZY|9>EfAH1#& z-3wIBTN30K45T@Ev~-ix<}bSOt=nC)A1Gk%>Eal|aXtBhiAd6gyIe=gyBczF}qKQ%F0(mNbo(!7G$6ystm-3eX4!Pgg&ebxsLQ E09R-@$^ZZW literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/images/close.png b/php/pic_switch_demo/static/ckeditor/skins/moono/images/close.png new file mode 100644 index 0000000000000000000000000000000000000000..6a04ab5275b321ce911c4e1416df7e0184d05f51 GIT binary patch literal 468 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/images/hidpi/lock.png b/php/pic_switch_demo/static/ckeditor/skins/moono/images/hidpi/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..1b87bbb7a14ceac0e259d75bdbc03365f01e9acf GIT binary patch literal 1299 zcmcK2YfO_@7zgl|J7XgE`xuonh01Nvjr*nTTY7<(-l(*+SfqVRg|f}S7??s;78ztp zX0k1txJ4X+B9|7(76PTE8=#;ILmd?4R;B^j!~z2x+8z9CvQPWvf6jSwzMPXM&u0ue z$=S)@34$PJ3K?dB6Lqj0ZNLuSs2_nKYbQn)hj_2G^*%^j+k>{Y-&LyV_V$_fcH_;P zvmhNEa~&NIJ3AM;yO-4JC5>iTtzPNveFW0ix8C2sF)(1(YB#mot---<5UuuakfEU+ z5S?yEuiw?_cJ=x_oo)~8!^6)(42FLUhW+7T%gBgjY|L`|wq<0OglbH=L7z`GR!Dcf!945ee zh0SJhIBXy%hXcap<^bFSCwRPEK0j9|AC{QP{8=%iRI0uZF2u&_`pE|f?L5kw3~ zBx0#lf*=y96hROvP*fz9$%ApWdo)va&{wTvRRW0uB zs>XO!=Uk-==9!?5@ZAN6#Syn!*AzSWhcB_^{#}C$haF~V#>Iw??d;fVlersm!!7;Uj>SJmi_hG5 zZ#pk-HW(_ix=qMW}A|^1`E2(SBSAdU|Li>Y8G$tCm(@1~=H6 z6ag5$lC;o&ImGX(B0jJPRk>h;_7e6O1LgJZU)YLj?I~aT3umymFustv(yj67&=Dm^ z?g_V&m3kVp*&AiWs4odWC9^_H_CGgi5Nm8H&$p$wuM4(gUDumDCrs~Z2E6SyLW!%& zP!I0Lm2aTnAU?{vkv)U$mKU^^qb1M{1k-Ofb_PyW@s~9{B7WB6vn4NitEC!2g!?Sd p*{oO(6}kOo)YtW8d<-4USq^e@@n6;8y}(pJ5QRvGJMp6P{{r75P22zg literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/images/hidpi/refresh.png b/php/pic_switch_demo/static/ckeditor/skins/moono/images/hidpi/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c2b86e6d1cd21bd352a54321ae13100b78e581 GIT binary patch literal 1842 zcmV-22hI42P)Uv6m4vp)}&37zI6HlHEH|eLsJKw zXPbapXPgxfwV)P793GstvOQgEa}Gh|da2&z%em*Az4y1i^^HedShGgFt+Ybg*R2zm zHf#`AHf|J`acy6}UbL=VJK{6My8xi_>sz;qNBj1Pmq(9^=LZjpo?W}drN+h)gLo(F zY57Aa$8Q?sYlx$E_N=(Qd-sSzytQ&3{`aO$;^mPe1Q0PRF;P00On>6Pzjo$~xU+Y! zdVkT5Oa8Y~9(Wo4?!@6YcI*(^i4zLI7b{oF^0{-Rqsep=_eolNyXXVBTXtMxUoke) z*9@?(&6~yTJ$uCSLx+Uc(jv6er-jzlr2u@oVuf73e7US&v`CJdIPnFZeG75Y&Ye?x zY=L;AVp>ZYX~ok62l|zEbWouKWHKZNVs&zLO>1aqkP8wGArqDmY*7YZsMbE%Zd`JDI20zZ;&$jQr70cBWLQeG}U zoH1h$-UTxE`%rc@1}O4fI6FtsS_QJALKc^m$w}eiKVz+l%6V>wy)=HThMz7$GJOG{NA!{^U%XfQ1zl^690Hb4^;0R&H*wi;J=7Aq=e z9U;ipL1GiYfd7$t?@yW1Ra{acXCwLxi;Lw)QBfyYa#Y3`b*|-mKbmU#l6RnJqvR zLskuu@vH>|X^R2hOr&2yVWBL9uCBTQAq64%{GvMl6L# zMz*lRQcwHPN@!#OeeFGA!XH^VIWiAS5CA3}_I4`+)YhnFC|5lMM&Os4n3}5g=R;W3 zJj~`*%(9`e^h!#-U`n~Te3l6SxnzML3JTb#z!Y4+|A0)mN@`I3o^2@q_dk_Bi@bSKqBE| zQhf~(O-i3}Sm`g}?>W1>@6OiuaX;C_dEErYEMUCZ>;){FsmhM%Z$uSNg!lm z7G?oAFRyEOm#L=TOPBgbGAQ;74Ryw|BDc|_dtxyOaeWp*bALigio~8A7AThRc3aJ; zRWB^PY{#H7AS7fp-$~Hb^loojzlRj7vxuP|WvS$Mq?Y z$mnQJtUjD4ZPk%szjg*(A%xi+6x0|UA1{+ZWg5Vw>3}j|ogut8-X$aYW3b*F9L(O} zqo_xv97?_InUJnPgwtP7!GxNQoSaIh&z#vCpOhpMAc+tHN`*3B6ZPj9Ok_k|0>J@waRKV zCf0-zx8paJR-z{xOd;km%Pc=O@NDSkmoT{Z?N_#wR$75Obe_YAED= g=g^ir!ms2106T%iXz%*nVE_OC07*qoM6N<$f=_o+lmGw# literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/ckeditor/skins/moono/images/lock-open.png b/php/pic_switch_demo/static/ckeditor/skins/moono/images/lock-open.png new file mode 100644 index 0000000000000000000000000000000000000000..04769877aa6d074e476f9560638d06cb158aaf1b GIT binary patch literal 349 zcmV-j0iyniP)Hc z&n^Q25XbTF&7uB8h{F<*UK$c{6bF(DX-V5yq<8{P)2DIiBX|hAR<{~TY$9o%h5mZ)AKROqT}ICn1K2gcrVZ2a4<}@gIzkdJz{m-92fBpLP=g*)2|NjHELI68EJ2y8s zkS!=EC?q7r%gd{)s|%6hQrC zQ&USzOJ85#+}zyO*4EC>&e74)$;rvp)z#hI-P6<4$H&Ll*VoU_FCZWwFfcGEC@3T( zBrGf}JUl!iA|f&}GAb%c^3n-Mpfw65L4F`_p#mOBpv4~P>Ak%>PCWYb^I+EhUqA)R zJzX3_BqUi68WtTk;Bh_3F0dqH=?3-5S9bp27<4=JnDRuWx-#Aadn}%KH8O@(F~l4f zV%6B5u|000zF>k}?(D_64^}eFG4tcw`tZRF@ly(tt&g5n<9kM zsLu=gzW%*|vFG*AU-=fqr?FkSs@QPm>HfukQ`A@#Ix8h7DKMl)rKBuVXo%cucmMZ^ rIRclgQu1>9uIx;p5dj z%lP`u&v$=J<2z5)lzAD*kbFD5EhFb!&D-m^J6co(0xLU+qr3iEV3kgyVg?12G;; z{1S&}Zs+utOA*o9X7*lg?dXjK7KQHXDU Qp#T5?07*qoM6N<$g14l=!Tbody .new_pic { + background:url(images/new.png) no-repeat; + } +* .new_pic{ + filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src="http://www.ljlj.cc/themes/store/default/styles/default/images/new.png") + } + +/*新增加 2014 01 16*/ +.beat a:link,.beat a:visited{ + color:#2A6DC4; text-decoration:underline;font-weight:bold; + } +/*.beUse{ + margin:13px 0 0 0;padding:11px 0 11px 9px;background:#F7F7F7; + }*/ +.beUse{ + margin:3px 0 0 0;padding:5px 0 5px 9px;background:#F7F7F7; + }/*2014-1-24 因为页面松散*/ +.beUse span,.lightColor { + color:#FC4001; + } +.lightColor2{color:#b2b3b0;} +.beUse span{ + margin-right:18px; + } +/*.beUse .useButton{ + margin-left:10px;padding:3px 12px 4px 12px;color:#3C3C3C;background:#F4F4F4;font-weight:bold;border:#C6C6C6 solid 1px; + }*/ +.beUse .useButton{ + width:35px;height:21px;text-align:center;margin-left:10px;color:#3C3C3C;background:#F4F4F4;font-weight:bold;border:#C6C6C6 solid 1px;vertical-align: text-bottom; + } +.lightColor{ + margin-right:15px; + } +.noBorder{ + border:none ; + } +/*.replyShow{ + border:#DDDDDD solid 1px;padding:15px 20px 2px 15px;position:relative;margin-top:15px; + }*/ +.replyShow{ + margin-left:20px;border:#DDDDDD solid 1px;padding:15px 20px 2px 15px;position:relative;margin-top:15px; + } +.upTab{ + position:absolute;top:-8px;_top:-10px;left:22px; + } +.replyTime{ + position:absolute;right:30px;top:21px; + } +.replyTitle{ + font-weight:bold; + } +.replyLine{ + margin:10px 0 10px 0;color:#3D393A; + } +.replyMore{ + text-align:right;margin-right:28px; + } +.marginHeight{ + padding:15px 25px 0px 25px; + } +.addDd,.addDt{ + padding-left:9px; + } \ No newline at end of file diff --git a/php/pic_switch_demo/static/css/shopBackground.css b/php/pic_switch_demo/static/css/shopBackground.css new file mode 100644 index 0000000..605a284 --- /dev/null +++ b/php/pic_switch_demo/static/css/shopBackground.css @@ -0,0 +1,146 @@ +@charset "utf-8"; +/* CSS Document */ +/*shop background add css*/ +/*left nav css*/ +.tabControl{ + display:inline-block;background:#ECECEC;border:#797979 solid 1px;padding:3px 0;width:80px;text-align:center;color:#000; + } +.recommend{ + border-left:none;margin-right:15px; + } +.curChoose{ + background:#FFF;font-size:14;font-weight:bold;color:#FF7E28; + } +.ztdemo_shop_table .secondClassify{ + padding-left:40px; + } +.ztdemo_shop_table .hirdlyClassify{ + padding-left:80px; + } +.leftNavTable{ + min-width:900px; + } +.brandLogo img{ + width:50px;height:50px; + } +/*vew add public css*/ +.newAdd{ + color:#4A4A4A;font-weight:bold; + } +.newAdd a:link,.newAdd a:visited{ + color:#4A4A4A;text-decoration:none; + } +.newAdd a:hover{ + text-decoration:underline; + } +.newAdd span{ + color:#000; + } +.lefNavContentAdd{ + padding-top:26px;*padding-top:8px; + } +.lefNavContentAdd p{ + padding-left:40px;line-height:35px; + } +/*input select*/ +.addText,.addSelect,.addSelectLevel{ + height:20px;margin-left:12px;width:140px;line-height:20px; + } +.addTextUrl{ + width:240px; + } +.addSelect,.addSelectLevel{ + width:110px; + } +.addSelectLevel{ + margin:0 5px 0 18px; + } +.addRadio,.addRadioNo{ + vertical-align:middle;margin-right:3px; + } +.addRadio{ + margin-left:12px; + } +.addRadioNo{ + margin-left:30px; + } +/*banner add amend*/ +.bannerContent p{ + margin-left:-20px; + } +.newAddWidth{ + display:inline-block;width:60px;text-align:right; + } +.addTextTitle{ + width:180px; + } +.sort,.tone{ + margin-left:12px;width:50px;height:20px;line-height:20px; + } +.chooseInput{ + margin-left:12px; + } +.toneMargin{ + margin-left:12px; + } +.tone{ + width:80px;margin-left:5px; + } +.lefNavContentAdd .bannerAmendImg{ + border:#797979 solid 1px;width:283px;height:127px;margin:3px 0 10px 93px;padding-left:0; + } +.bannerAmendImg img{ + width:283px;vertical-align:top; + } +/*20140414*/ +.TitleWidth { width:70px;display:inline-block; } +.sb-img{ + margin:20px 0 0 21px; + } +.add-openp{ + padding-left:21px; + } + +/*2014-12-09*/ +.tupian{ + position:absolute; + top:0px; + left:21px; + display:none; +} + + +/*2014-12-13*/ +.info-tag{ + overflow:hidden;margin:10px 0 0 21px; + } +.info-tag p{ + float:left;width:90px;margin:20px 10px 0 0; + } +.info-tag input{ + width:13px;height:13px;vertical-align:sub;margin-right:5px; + } +.ztdemo_shop_table td .input-file{ + width:auto; + } +.ztdemo_shop_table td .info_radio{ + width:auto;height:auto;margin-right:3px;vertical-align:middle; + } +.info_tag{ + display:inline-block;margin-right:20px; + } +.input-acquiesce{ + color:#666; + } +.info-textarea{ + width:300px;height:100px; + } +.select_nomar{ + margin:0; + } +.radio_mar{ + margin-left:30px; + } + + + diff --git a/php/pic_switch_demo/static/css/zt_demo.css b/php/pic_switch_demo/static/css/zt_demo.css new file mode 100644 index 0000000..6e31fcb --- /dev/null +++ b/php/pic_switch_demo/static/css/zt_demo.css @@ -0,0 +1,1382 @@ +@charset "utf-8"; +/* CSS Document */ +body,div,p,span,table,tr,th,td,a,img,input,ul,li,select,textarea,button,form{ + margin:0;padding:0; + } +img{ + border:none; + } +body{ + font-size:12px;font-family:"微软雅黑", "Arial Unicode MS", "宋体", sans-serif;background:#FFF; + } +li{ + list-style-type:none; + } +table{ + border-collapse:collapse; + } +th,td{ + padding:0; + } +.ztdemo_page{ + color:#4A4A4A;min-width:1000px;padding-bottom:50px; + } +/************公共样式部分****************/ +/*title公用部分*/ +.ztdemo_title{ + color:#FFF;font-size:14px;background:#FF7E28;padding:10px 0 10px 21px; + } +.ztdemo_title span{ + font-size:18px; + } +.ztdemo_omar{ + font-size:14px;font-weight:bold;margin:16px 0 7px 0; + } +/*input*/ +input{ + height:23px;line-height:23px;vertical-align:middle; + } +textarea{ + vertical-align:top; + } +.input_time{ + width:98px; + } +.img_time{ + margin-left:8px; + } +.img_time img{ + vertical-align:middle; + } +/*按钮部分*/ +.ztdemo_an{ + overflow:hidden;zoom:1;margin-top:30px; + } +.ztdemo_an .save_button,.ztdemo_an .back_button{ + float:left; + } +.ztdemo_mar{ + margin-left:24px; + } + +.save_button,.back_button,.inquire_button,.cset_button{ + height:22px;font-size:12px;color:#FFF;margin-left:21px;display:inline; + } +.save_button img,.back_button img,.inquire_button img,.cset_button img{ + vertical-align:top; + } +.save_text,.back_text,.inquire_text,.cset_text{ + display:inline-block;height:22px;line-height:22px;width:78px;cursor:pointer;border:none;color:#FFF; + } +.save_text{ + background:#FF6600; + } +.back_text{ + background:#666666;vertical-align:top; + } +.inquire_text{ + background:#377BEE; + } +.cset_text{ + background:#5593FF; + } +/*分页*/ +.paging{ + overflow:hidden;zoom:1;font-size:12px;margin-top:30px;color:#000; + } +.paging_right{ + float:right;margin-right:20px;height:20px;line-height:20px; + } +.paging_right img{ + vertical-align:top;cursor:pointer; + } +.paging_right em{ + display:inline-block;margin:0 4px;font-weight:bold;font-style:normal; + } +.paging_right a:link,.paging_right a:visited{ + text-decoration:none;color:#000; + } +.paging_right .paging_initial{ + font-size:12px;display:inline-block;border:#999 solid 1px;width:28px;text-align:center;line-height:18px;color:#000;margin-left:5px; + } +.paging_right .paging_ahover{ + color:#FF7E00;font-size:14px;font-weight:bold;display:inline-block;width:40px;text-align:center;line-height:18px; + } +.paging_right button{ + vertical-align:top;border:none;height:20px;background:#FFF; + } +.paging_home,.paging_last{ + font-size:12px;color:#FFF; background:#5593FF;padding:0 10px;font-weight:lighter;height:20px;display:inline-block; margin:0 10px; + } + +/*提示文字*/ +.ts{ + color:#FF6600;margin-left:8px; + } +.tsr{ + color:#E5004F;margin-left:8px; + } +.trc{ + color:#FF6600;font-weight:lighter;margin-left:3px; + } +.dis{ + display:none; + } +.tsc{ + color:#8FD900; + } + + + +/**************页面部分样式******************/ +/*基本设置页面*/ +.ztdemo_content{ + padding:7px 0 0 21px;min-width:900px;color:#4a4a4a;position:relative; + } +.ztdemo_tmar{ + margin-left:30px; + } +.ztdemo_tmar p{ + margin:18px 0 13px 0; + } +.ztdemo_tmar .input_wid{ + width:375px;padding-left:5px; + } +.ztdemo_tmar .textarea_w{ + width:374px;height:104px;padding:8px 0 8px 8px;line-height:20px; + } +.ztdemo_tmar .input_wids{ + margin-left:12px; + } +.ztdemo_tmar .textarea_ws{ + margin-left:24px; + } +.ztdemo_dis{ + display:none; + } +.cz_mar{ + margin-left:8px; + } +.tsr_mar{ + margin-left:-7px;font-size:18px;vertical-align:middle; + } +.tsr_top{ + margin-left:15px; + } +/*2013 08 22*/ +.shade_div{ + position:absolute;top:50px;width:100%;height:530px;background:#FFF;filter:alpha(opacity=50);opacity:0.5; + } + + + +/*商品列表区*/ +.ztdemo_shoptitle{ + padding:13px 0 12px 45px;border-bottom:#666666 dashed 1px;height:22px; + } +.ztdemo_shoptitle .cset_button{ + display:inline;width:75px; + } +.ztdemo_shop_selected{ + color:#B2B2B2; + } +.ztdemo_shoptitle a:link,.ztdemo_shoptitle a:visited{ + color:#377BEE; text-decoration:underline; + } +.cset_button_nomar{ + margin-left:10px; + } +.ztdemo_shop_table{ + margin-top:26px;min-width:900px; + } +.ztdemo_shop_table th{ + text-align:left;color:#4A4A4A;padding:0 0 13px 21px;border-bottom:#A3C5FF solid 1px; + } +.ztdemo_shop_table td{ + padding:9px 0 9px 21px;color:#666666; + } +.ztdemo_shop_table td input{ + width:30px;height:20px;padding-left:6px + } +.shop_table_hs{ + background:#FEEFDF; + } +.ztdemo_shop_table a:link,.ztdemo_shop_table a:visited{ + color:#377BEE;text-decoration:underline; + } +.tsr_height{ + line-height:22px; + } +/*2013 08 22 23*/ +.cset_button_nomar img{ + vertical-align:top; + } +#d1{ + display:inline; + } +.cset_button_nomar .cset_text{ + vertical-align:top; + } + +/*专题模板设置*/ +.ztdemo_omar .cset_button,.ztdemo_omar .ts{ + font-weight:lighter;font-size:12px; + } +.cset_button_set{ + margin-left:8px; + } +.ztdemo_sety{ + font-weight:bold;display:inline-block;width:84px; + } +.ztdemo_setzj{ + + } +.ztdemo_set_select{ + width:140px;margin-left:5px; + } +.ztdemo_set_img{ + vertical-align:middle;display:inline;margin-left:14px; position:relative; + } +.ztdemo_set_img span{ + position:absolute;top:0;left:28px; + } +.small_dis{ + display:none; + } +.ts_mar{ + margin-left:15px; + } +.ztdemo_tmar_hei{ + margin-top:10px;margin-bottom:5px; + } +.cset_button_none{ + margin-left:60px; + } +.ztdemo_setin{ + height:18px;width:65px;padding-left:5px; + } +.wait{ + float:left;margin-left:25px;font-size:14px; + } +.wait img{ + margin-right:8px; vertical-align:middle; + } +/*2013 08 23*/ +.set-up{ + vertical-align:top; + } + + +/*专题列表页--新增专题*/ +/* +.ztdemo_title_an img{ + margin-left:15px;vertical-align:bottom; + } +*/ +.ztdemo_list_title{ + padding:13px 0 12px 21px;background:#ECECEC; + } +.ztdemo_list_title .input_wid{ + width:195px;height:20px;line-height:20px;padding-left:5px; + } +.ztdemo_list_title .ztdemo_set_select{ + height:23px;margin-left:0;width:100px; vertical-align:top; + } +.ztdemo_list_title2{ + margin-left:20px; + } +.inquire_button_newzt{ + margin-left:10px; + } +.ztdemo_shop_td img{ + margin-left:20px; + } +.ztdemo_shop_a a{ + margin-right:20px; + } +.ztdemo_shop_texttil{ + margin:14px 0 12px 45px; + } +.ztdemo_shop_textbj{ + margin-left:21px; + } +/*2013 08 22*/ +.inquire_button_newzt img{ + vertical-align:middle; + } + +/*资料库*/ +/*资料库上传部分*/ +.data_up{ + height:560px;border:#A8ACAD solid 1px;overflow:hidden;zoom:1;overflow-y:scroll;margin:10px 0;padding-bottom:10px;-webkit-box-shadow:inset 0 6px 5px #eee;-moz-box-shadow:inset 0 6px 5px #eee;box-shadow:inset 0 6px 5px #eee; + } +.data_bigdiv{ + float:left;width:224px;margin:10px 3px 0 7px;overflow:hidden; + } +.dataup_div{ + position:relative;height:132px;border:#C8C8C8 solid 1px; + } +.dataup_div_shop{ + margin:1px; + } +.dataup_div_shop img{ + width:220px;height:130px; + } +.dataup_div_close{ + position:absolute;right:0;top:0;display:none; + } +.{ + height:19px;margin-top:6px;overflow:hidden;zoom:1; + } +.data_imgdel a:link,.data_imgdel a:visited{ + color: #377BEE;text-decoration: underline; + } +.img_save_button{ + margin-left:0px; + } +.upload_wait{ + margin-left:25px;font-size: 14px;display:inline-block; + } +.upload_wait img{ + vertical-align:top;margin-right:5px; + } +.inquire_file{ + outline:none;border:none; + } +.save_button_data{ + margin-left:0; + } +/*有无资料图片*/ +.data_havediv{ + + } +.data_notdiv{ + font-size:30px;color:#D1D1D1;line-height:440px;text-align:center; + } +/*选择图片*/ +.upchoose_div{ + margin-bottom:10px;overflow:hidden;zoom:1; + } +.inquire_sc{ + width:68px;margin-left:-72px;text-indent:-9999em;filter:alpha(opacity=0);opacity:0; + } +.data_text{ + padding:0 5px; + } +.upchoose_name{ + display:inline-block;width:224px;height:23px;line-height:27px;margin-top:6px;overflow:hidden;margin-right:20px; + } +.choose_mar{ + margin-left:55px;font-weight:lighter; + } +.upchoose_choose,.upchoose_an{ + float:left; + } +.upchoose_choose input{ + width:240px;overflow:hidden;margin-right:20px; + } +/*2013 08 22 29*/ +.upchoose_an img{ + vertical-align:top; + } +.set_upload{ + vertical-align:middle; + } + + +/*专题模板 通栏广告*/ +.wedget_gg{ + color:#B2B2B2;display:inline;font-weight:lighter;font-size:12px;margin-left:8px;width:160px;height:18px;line-height:25px;overflow:hidden; + } +.wedget_content{ + padding-left:10px; + } +.wedget_title{ + border:none; + } +.wedget_show img{ + width:500px; + } +.wedget_href{ + border:none;padding-top:0; + } +.wedget_href .cset_button{ + color:#000; + } +.wedget_div{ + margin-left:-1px; + } +.wedget_text{ + width:330px;color:#B2B2B2;padding-left:5px;margin-left:5px; + } + +/*文字区域*/ +.wedget_textarea{ + margin-left:45px; + } +.textarea_text{ + display:inline-block; + } + + +/*抢购区*/ +.cset_button_wedget{ + margin-left:33px; + } +.ztdemo_shop_table2 td .wedget_lj{ + width:290px; + } +.ztdemo_shop_div{ + min-width:1110px; + } +.wedget_set{ + margin-left:0px; + } +.ztdemo_shop_table2{ + min-width:1110px; + } +.ztdemo_shop_table2 th{ + text-align:left;color:#4A4A4A;padding:0 0 13px 21px;border-bottom:#A3C5FF solid 1px; + } +.ztdemo_shop_table2 td{ + padding:9px 0 9px 21px;color:#666666; + } +.ztdemo_shop_table2 a:link,.ztdemo_shop_table2 a:visited{ + color:#377BEE;text-decoration:underline; + } +.ztdemo_shop_table2 td input{ + width:30px;height:20px;padding-left:6px + } +.wed_nolist{ + height:100px; + } + + +/*商品列表*/ +.goods_color{ + color:#000; + } +.goods_title{ + padding:0 0 20px 45px; + } +.goods_text{ + padding:0 10px; + } +.goods_shop{ + margin:0 0 20px 10px;height:18px; + } +.goods_num{ + display:inline-block;width:40px; + } +.goods_id{ + width:67px;height:18px;padding-left:3px;vertical-align:bottom; + } +.goods_name{ + display:inline-block;margin-left:5px;width:120px;height:18px;line-height:25px;overflow:hidden; + } +.goods_mar{ + margin-left:100px; + } +.goods_add{ + margin-left:40px; + } +.goods_addan{ + padding:0 3px; + } +/*2013 08 22*/ +.goods_text{ + padding:0 10px;vertical-align:top; + } + + + + +/*相关专题*/ +.cset_button_topic{ + margin-left:23px; + } + + + +/*保存成功 提示*/ +.save{ + width:437px;position:absolute;top:40%;left:35%;border:#377BEE solid 3px;padding-bottom:60px; + } +.save_title{ + color:#FFF;font-size:14px;font-weight:bold;background:#377BEE;padding:17px 0;text-align:center; letter-spacing:0.2em; + } +.save_win,.save_fail{ + margin:50px 0 54px 0;text-align:center;font-size:16px;font-weight:bold;color:#FF6600; + } +.save_win span{ + color:#8FD900;margin-right:8px; + } +.save_href{ + color:#666666;text-align:center; + } +.save_fail{ + color:#E5004F; + } + + +/*资料库 图片*/ +.data_bg{ + position:relative;background:#000;filter:alpha(opacity=60);opacity:0.6;width:100%;height:950px; + } +.data_images{ + width:816px;position:absolute; + } +.data_tite{ + color:#FFF;background:#377BEE;padding:16px 13px 15px 18px;font-size:14px;font-weight:bold; letter-spacing:0.1em;overflow:hidden;zoom:1; + } +.data_tite p{ + float:left; + } +.data_tite .data_titlean{ + float:right; + } +.data_titlean input{ + border:none;width:15px;height:16px; + } +.data_content{ + height:355px;background:#FFF;overflow:hidden;zoom:1;overflow-y:scroll;border-bottom:#A5A5A5 solid 1px; + } +.data_images_div{ + width:190px;margin:8px 0 7px 8px;float:left; + } +.images_nochoose{ + border:#D5D5D5 solid 1px; + } +.images_nochoose img{ + width:188px;height:118px; + } +.images_choosean{ + margin-top:5px; + } +.images_choosean input{ + vertical-align:top; + } +.images_choosean span{ + display:inline-block;margin-left:5px;width:165px;height:19px;line-height:22px;overflow:hidden; + } +.images_choose{ + border:#8FD900 solid 3px; + } +.images_choose img{ + width:184px;height:114px; + } +.data_an{ + padding:11px 0 12px 0;background:#E5E5E5;margin-top:0; + } + + +/*头部*/ +.header{ + background:#4A4A4A;color:#FFF;height:65px;overflow:hidden;zoom:1; + } +.logo{ + width:170px;height:52px;float:left;background:url(../images/logo_03.gif);margin:13px 0 0 17px; + } +.header_content{ + margin:11px 20px 0 0; + } + +.user{ + text-align:right;font-size:14px; + } +.user span{ + margin:0 8px; + } +.user a{ + font-weight:bold; + } +.user a:link,.user a:visited{ + color:#FFF;text-decoration:underline; + } +.nav{ + height:38px;margin-left:195px; + } +.nav a{ + display:inline-block;width:120px;height:38px;line-height:38px;font-size:14px;font-weight:bold;text-align:center;color:#FFF; + } +.nav a:link,.nav a:visited{ + text-decoration:none; + } +.nav a:hover{ + background:url(../images/Home_06.gif);color:#4A4A4A; + } +.nav .choose{ + background:url(../images/Home_06.gif);color:#4A4A4A; + } + + +/*landing */ +.landing{ + width:431px;position:absolute;top:40%;left:35%; + } +.landing_title{ + padding:15px 0 14px 14px;background:#4A4A4A;border-bottom:#9D9D9D solid 1px; + } +.landing_content{ + background:#666666;padding:24px 0 18px 75px; + } +.username{ + float:left;width:253px;height:45px;background:url(../images/loading_07.gif); + } +.username input{ + width:200px;height:42px;line-height:42px;margin-left:40px;border:0;outline:none; + } +.password{ + float:left;width:253px; height:44px; line-height:44px;background:url(../images/landing_09.gif); + } +.password input{ + width:200px;height:38px;margin:2px 0 0 40px;border:0;outline:none; + } +.landing_text{ + padding:0 15px; + } +.landing_an{ + margin-left:8px; + } +/*2013 08 26*/ +.landing_username,.landing_password{ + overflow:hidden;zoom:1; + } +.right,.wrong{ + width:16px;height:15px;float:left;margin:15px 0 0 10px; + } +.right{ + background:url(../images/right.gif); + } +.wrong{ + background:url(../images/wrong.gif); + } + +/*2014.01.11后台新增虚拟数据管理*/ +.useSetGj{ + position:relative;min-width:900px;overflow:hidden;zoom:1;margin:10px 0 0 21px; + } +.useSetGy,.useSetGjan{ + float:left; + } +.useSetPosition{ + left:0;height:450px;top:25px; + } +.useSetGyTitle{ + font-size:14px;margin:0 84px 5px 0;float:left;width:340px; + } +.useSetGbor{ + width:300px;height:400px;overflow-y:scroll;border:#666 solid 1px;padding:5px 0 0 10px;float:left; + } +.useSetGbor p{ + line-height:28px; + } +.useSetGbor input{ + vertical-align:middle;margin-right:2px; + } +.leftPsotion{ + position:absolute;top:25px;left:0px; + } +.useSetGborRight{ + position:absolute;left:427px;top:25px; + } +.blockTop{ + position:absolute;top:20px;left:300px; + } +.blockMiddle{ + position:absolute;top:80px;left:300px; + } +.blockBottom{ + position:absolute;top:140px;left:300px; + } + + + +.useSetGsec{ + margin-left:15px; + } +.useSetGjan{ + margin:25px 10px 0; + } +.block{ + display:block;margin-top:40px; + } + +.ztdemo_list_title .inputPx{ + width:40px;padding-left:6px; + } +.lefNavContentAdd .input_wid{ + height:20px;width:190px;margin-left:12px; + } + +/* 20140422 cxb add*/ +.lefNavContentAdd p{ overflow:hidden;} +.lefNavContentAdd .custTitleWidth{ + width:85px;float:left; + } +/* 20140422 cxb add*/ +.xnUser{ + margin-left:0px; + } +.xnUserBz{ + width:295px;height:76px;vertical-align:text-top;padding:4px 0 0 5px; + } +.xnUserNo{ + margin:0; + } +.xnUseran{ + margin-left:20px; + } +.xnOrderClear{ + overflow:hidden;zoom:1; + } +.xnOrderClear p{ + float:left; margin-right:100px; + } +.xnOrderLbor{ + border-bottom:#666 dashed 1px;padding-bottom:5px;margin-bottom:5px; + } +.TitleWidth span,.xnUser span{ + font-weight:bold; + } +.xnOrderLbor .name{ + margin:0 15px 0 50px; + } +.xnComment .input_wid{ + width:100px; + } +.xnCommentAudit .ztdemo_set_select{ + width:80px; + } +.xnCommentPage{ + min-width:1375px; + } +.xnMar{ + padding-left:40px; + } +.xnOrderAdd{ + margin-bottom:10px; + } +.xnOrderAdd .input_wid{ + margin-left:0;padding-left:3px; width:400px; + } +.amountInput{ + margin:0 12px 0 0;height:20px;line-height:20px; + } +.goodsInputMar{ + margin-left:7px; + } +.xnOrderTable{ + margin:5px 0 10px 32px; + } +.xnOrderTable th{ + border:none; + } +.xnOrderTable td{ + padding:3px 0 3px 21px; + } +.xnOrderTable .xnTd{ + padding-left:0; + } +.xnCommentTag span{ + margin:0 17px 10px 3px;display:inline; + } +.xnCommentTag input{ + vertical-align:middle;margin-right:2px; + } +.xnCommentContent .xnCommentAdd{ + width:400px;height:80px;vertical-align:text-top;padding:3px 0 0 5px; + } +.specialTs{ + margin-left:50px; + } +.xnInoputColor{ + color:#999; + } +.noShopTs{ + margin-left:50px; + } +.xnInputBackground{ + background:#F00; + } +.data_imgdel span{ + } +.data_imgdel .name{ + font-weight:lighter; + } +.no{ + margin-bottom:0; + } +.alignInput{ + vertical-align:top; + } +.lookAll{ + padding:0 5px; + } +.save_button .gj{ + width:90px;padding:0; + } +.gjBackInput{ + width:90px;padding:0; + } +.xnUserP p{ + line-height:0px;margin-bottom:10px; + } +.lefNavContentAdd .TitleWidth{ + text-align:left; + } +.lefNavContentAdd .xnUserNo{ + margin:0; + } +.bhButton{ + display: inline-block; + float: left; + } +.xnAddWidth { + width: 60px; + margin-right: 12px; +} + +/*2014.04.14 新增*/ +.er-landingts{ + font-size:14px;margin-top:5px;margin-left:20px; + } +.logo{ + height:63px;font-size:24px;font-weight:bold; + } +.landing_title{ + padding:15px 0 14px 14px;background:#4A4A4A;border-bottom:#9D9D9D solid 1px;color:#FFF;font-size:16px; + } +.add-vertical{ + vertical-align:inherit; + } + +/* 装修日记 2014-04-21 reg */ +.spanMarginr15{ margin-right: 15px;line-height: 20px;} +.piczone{ background:#E4E4E4;padding:10px 40px 10px 40px;} +.picupload{margin:0;padding:0; line-height:40px;height:40px;margin-bottom:20px;font-size:16px;color:#000;} +.picthum{ overflow:hidden;*zoom:1;zoom:1;} +.picthum li{ width:220px;height:160px;overflow:hidden;padding:10px; float:left;margin:0 10px 10px 0;border:1px solid #CCC;} +.picthum li:hover{background:#CACACA;} +.pic180{width:220px; height:130px;overflow:hidden;margin-bottom:10px;} + +.picset{ overflow:hidden;*zoom:1;zoom:1;width:220px;height:30px;} + +.lineh18{ line-height:18px;} +.addlinkinput{background:#4EB569;color:#FFF; display:block; margin:0 auto; width:100px; height:26px;line-heigh:26px; border:none; cursor:pointer; font-weight:bold; } + + +a.addlink:link,a.addlink:visited{ background:#4EB569;color:#FFF; display:block; margin:0 auto; text-decoration:none; width:100px; height:26px;line-heigh:26px; text-align:center;line-height:20px;} +a.addlink:hover{text-decoration:underline;} + +.dellinkinput{background:#FF6B8D;color:#FFF; display:block; margin:0 auto; width:100px; height:26px;line-heigh:26px; border:none; cursor:pointer; font-weight:bold; } + +a.dellink:link,a.dellink:visited,a.dellink:hover{ background:#FF6B8D;color:#FFF; display:block;text-decoration:none;margin:0 auto; width:100px;height:26px;text-align:center;line-height:26px;} +a.dellink:hover{text-decoration:underline;} +.customertit{ color:#FF9900;font-size:14px;padding:0 0 0 40px;} +.custtagadd{ width:100px; text-align:center; margin-left:12px; height:25px;line-height:25px;background:#F30;color:#FFF;border:none; } + +.custtextarea { margin-left:12px;width:295px;vertical-align:text-top;line-height:18px;float:left;height:100px;border:1px solid #ccc;} +.custtextareaView{margin-left:12px;width:600px;height:120px;vertical-align:text-top;line-height:18px;float:left} + +.addTagsul{ overflow:hidden;zoom:1;padding:20px 0 0 100px;} + .addTagsli{ float:left; margin:0 20px; } + .addTagsli b{ height:20px; line-height:20px; margin-right:5px;} + .addTagsli span img{vertical-align:text-top;} + +.wzTags{ border:3px solid #f1f1f1; margin:10px 40px; width:60%; overflow:hidden;zoom:1; } +.wzTags span{ height:25px;line-height:25px; display:block; margin:20px; float:left;} +.diaryTip{ border:4px solid #ccc; border-radius:6px; background:#F2F2F2; color:#FF6600;line-height:25px;font-size:14px; width:80%;padding:10px; margin:20px 0 20px 40px;} + + +/*数据打通 2014-05-28*/ +.data-page{ + padding-bottom:20px; + } +.add-data{ + padding:15px 0 15px 21px;font-size:16px; + } +.add-data span{ + font-weight:bold; + } +.add-data .tsc{ + font-size:12px;font-weight:lighter;display:inline-block;margin-left:50px; + } +.ztdemo_list_title .add-data-input{ + vertical-align:middle; + } +.add-data-button input{ + vertical-align:top; + } +.add-data-margin{ + margin:30px 0 30px 20px; + } +.ztdemo_shop_table .add-data-a a:link,.ztdemo_shop_table .add-data-a a:visited{ + color:#666666;text-decoration:none; + } +.ztdemo_shop_table .add-data-a a:hover{ + color:#00F;text-decoration:underline; + } +.tsc b{ + font-weight:lighter;margin:0 8px; + } +.data-shop-content{ + padding:15px 0 0 5px;overflow:hidden;zoom:1;color:#333333; + } +.yun-shop{ + float:left;width:445px;margin-right:25px; + } +.yun-shop-title{ + font-size:16px;padding:0 0 10px 15px; + } +.data-shop-table1{ + background:#E4E4E4;padding:5px 0 5px 15px;border-collapse:inherit;line-height:25px;margin-bottom:20px; + } +.data-shop-table1 th,.data-shop-table2 th{ + text-align:left;*padding-left:15px; + } +.data-shop-table2{ + line-height:25px;margin-top:10px;border-collapse:inherit;padding-bottom:15px;border-bottom:#0099FF solid 1px; + } +.data-shop-table2 th{ + padding-left:15px; + } +.data-shop-table2 td{ + padding-left:9px; + } +.datashop-table2-title{ + background:#E8F7FF;line-height:30px; + } +.noborder{ + border:none; + } +.data-shop-add{ + font-size:16px; + } +.datashop-add-infor{ + padding:20px 0 8px 20px;border-bottom:#0099FF solid 1px;margin-bottom:10px; + } +.datashop-add-infor p{ + line-height:40px; + } +.shop-suffix-input,.data-shop-input{ + height:20px;height:20px;line-height:20px;padding-left:5px; + } +.data-shop-input{ + width:195px; + } +.shop-suffix-input{ + width:485px; + } +.datashop-add-infor span{ + display:inline-block;width:150px; + } +.data-infor-a a{ + display:inline-block;margin-left:50px; + } +.data-infor-a a:link,.data-infor-a a:visited{ + color:#0000FF;text-decoration:underline; + } +.datashop-add-infor .shop-select1{ + margin-right:20px; + } +.data-infor-tsr{ + margin:-10px 0 0 0; + } +.data-shop-img{ + padding:10px 0 15px 20px;overflow:hidden;zoom:1;border-bottom:#0099FF solid 1px;margin-bottom:10px; + } +.shop-img-name,.shop-img,.shop-img-up{ + float:left; + } +.shop-img-name{ + width:150px; + } +.shop-img{ + margin-right:30px; + } +.shop-img-show{ + border:#CCCCCC solid 1px;width:428px;height:366px;margin-bottom:22px;text-align:center; + } +.shop-img-show img{ + width:428px;height:366px; + } +.shop-img-small{ + overflow:hidden;zoom:1; + } +.shop-img-small li{ + float:left;width:68px;margin-right:22px; + } +.shop-img-small .last-li{ + margin-right:0; + } +.shopimg-small-del .small-del-img{ + width:68px;height:68px;border:#CCCCCC solid 1px;margin-bottom:3px; + } +.small-del-img img{ + width:68px;height:68px; + } +.mar{ + margin:0 10px; + } +.up-textname{ + margin-top:55px; + } +.up-textname li{ + line-height:42px; + } +.up-textname a{ + display:inline-block;margin:0 20px 0 10px; + } +.up-textname a:link,.up-textname a:visited{ + color:#00F;text-decoration:underline + } +.noborder{ + border:none; + } +.description-shop-img{ + + } +.description-shop-img .shop-img-show{ + width:800px;margin-bottom:15px; + } +.description-img-small{ + margin-top:20px;width:800px; + } +.add{ + color:#00F;display:inline-block;margin-left:8px; + } +.description-img-small li{ + width:57px;margin:10px 20px 10px 0;border:#FFF solid 1px;height:126px; + } +.description-img-small .small-del-img,.description-img-small .small-del-img img{ + width:55px;height:55px;margin:0; + } +.description-img-small .show{ + height:30px;line-height:20px;margin:0; + } +.show-img-name{ + + } +.description-small-del{ + width:89px; + } +.description-img-small .bor-hover{ + border:#CCCCCC solid 1px;padding:10px 4px;height:106px; margin-top:0; + } +.data-shop-mar{ + margin-left:149px; + } +.data-title-tab{ + margin:10px 0 15px 15px; + } +.data-title-tab a{ + display:inline-block;width:180px;height:31px;line-height:31px;text-align:center;border:#CCCCCC solid 1px;border-right:none; + } +.data-title-tab a:link,.data-title-tab a:visited{ + color:#00F;text-decoration:none; + } +.data-title-tab .tab-last{ + border-right:#CCCCCC solid 1px; + } +.tab-active{ + background:#CCCCCC; + } +.shop-description-div{ + margin:50px 0 0 15px; + } +.shop-description-div .option_box{ + padding:0; + } +.shop-description-div .default{ + margin:0;width:740px; + } +.third-tab-content{ + width:100%;float:none;margin-right:0;margin-left:15px; + } +.tab-last-mar{ + margin-left:50px; + } + +.tab-vertical{ + margin-top:3px;display:inline-block; + } +.sale-a a:link,.sale-a a:visited{ + color:#00F;text-decoration:underline; + } +.ztdemo_shop_table td .data-shop-input{ + width:195px; + } +.symbol{ + margin:0 10px 0 -22px; + } +.add-data-margin .ztdemo_set_select{ + height:23px;margin-right:20px;width:100px;vertical-align:middle; + } +.info-radio{ + vertical-align:middle;*vertical-align:text-bottom;margin-right:5px; + } +.nobackground{ + background:none;position:fixed + } +/* 数据打通 陈雄标 140603 */ + +.dataGoodst{ overflow:hidden;zoom:1;*zoom:1;margin:20px auto; } +.dataTitle{font-size:18px; float:left; margin:0 30px 0 22px; } +.dataTipss{font-size:12px; color:#090; line-height:30px; } +.datayuntit{ padding:20px 0 0 40px; line-height:30px; border-top:1px solid #A3C5FF;margin:0 0 50px 0;} +.datanum1{ padding:20px 10px 30px 10px; line-height:30px;} +.pt10{ padding:10px 0 0 0;} +a.ablack:link,a.ablack:visited{ color:#666; text-decoration:none; } +a.ablack:hover{ color:#377BEE; text-decoration:underline; } +/* 关联商户 样式 */ +.quxiao{ float:left; margin:0 10px 0 0} + +.back_textin{background:#666666; display:inline-block;height:22px;line-height:22px;width:78px;cursor:pointer;border:none;color:#FFF;} +/* 商城商品 data-goods-list.html */ +.rightw650{width:650px; margin:0;float:right; } +.datagoodswidth{ float:left; } +.datagoodswidth a{ margin-left:20px;} + +.nobg{ + background:none; + } + +/*2014-06-15 新增*/ +.add-cstitle{ + + } +.add-cscontent{ + margin-left:149px; + } +.add-cstable td{ + height:40px; + } +.trc-title{ + font-size:16px;margin-left:0; + } +.small-width span{ + width:100px; + } +.small-width .shop-select1{ + width:98px; + } +.img-detail-title{ + font-size:18px;font-weight:lighter;margin:20px 0 10px 20px; + } +.img-detail{ + margin:20px 20px 20px 20px;border-bottom:#CCCCCC solid 1px;padding-bottom:10px; + } +.img-detail p{ + margin:20px 0 15px 0; + } +.img-detail .img-detail-img{ + margin-left:50px; + } +.img-detail-img img{ + + } +.img-detail-name span,.img-detail-size span{ + margin-left:20px; + } +.padding-detail{ + padding-left:20px; + } +.detail-w1180 img{ + width:1180px;height:auto; + } +.detail-w642 img{ + width:642px;height:400px; + } +.detail-w428 img{ + width:428px;height:366px; + } +.detail-w316 img{ + width:316px;height:270px; + } +.detail-w68 img{ + width:68px;height:68px; + } +.noborder{ + border:none; + } +.img-mar span{ + margin-left:30px; + } +.img-list{ + margin-left:20px;overflow:hidden;zoom:1;margin-top:20px; + } +.img-list-div{ + float:left;margin:0 30px 50px 0; + } +.img-list-img{ + border:#ccc solid 1px;padding:1px; + } +.img-list-img img{ + width:316px;height:270px; + } +.img-list-text{ + overflow:hidden;zoom:1;margin-top:10px; + } +.img-list-left{ + float:left;width:79px; word-wrap:break-word; + } +.img-list-right{ + float:right;margin-top:5px; + } +.img-list-right a:link,.img-list-right a:visited{ + color:#0066CC; text-decoration:underline; + } +.img-add-content{ + border:#ccc solid 1px;padding:30px 0 20px 0;overflow:hidden;zoom:1;width:1068px; + } +.img-add-div{ + border:#FFF solid 1px;float:left;margin:0 15px 25px 15px;padding:1px 1px 8px 1px; + } +.img-add-hover{ + border:#ccc solid 1px; + } +.img-add-div img{ + width:316px;height:270px; + } +.img-add-show{ + margin-bottom:20px; + } +.img-add-text{ + padding-left:3px;margin-bottom:5px; + } +.nomar{ + margin:8px 0 0 3px; + } +.none{ + padding-left:0;margin-left:0; + } +.bz-text{ + width:280px;height:20px;line-height:20px; + } +.last-mar{ + margin-left:50px; + } + + +/**/ +.small-del-img a{ + display:block;width:70px;height:70px;line-height:70px;text-align:center; + } +.small-del-img a:link,.small-del-img a:visited{ + color:#00F;text-decoration:underline; + } +.goods-align{ + text-align:center; + } +.norms-select{ + width:204px;height:20px;line-height:20px; + } +.data-smallshop-input{ + width:164px; + } +.yesno{ + margin-right:3px;vertical-align:middle + } +.radio-mar{ + margin-left:30px; + } +.alert-height{ + height:580px;overflow-y:scroll; + } +.alert-button{ + width:1070px;padding:10px 0;background:#CCCCCC; + } +.max-height{ + max-height:625px;overflow-y:scroll; + } +/*2014-06-23*/ +.data-overflow{ + min-width:810px; + } +/*2014-06-23 新增*/ +.add-alert{ + position:absolute;left:35%;top:30%;border:#797979 solid 1px;width:505px;padding:0 0 30px 15px; + } +.add-alert h3{ + font-size:16px; + } +.add-alert p{ + margin:10px 115px 30px 60px; + } +.add-alert a{ + margin-left:48px; + } +.add-alert-button{ + margin-left:150px; + } + + +/*2014.6.24新增*/ +.attr-add{ + + } +.small-width .attr-add span{ + margin-right:30px;width:auto; + } +.attr-add a{ + font-size:16px;padding:7px 0 0 5px; + } +.attr-add a:link,.attr-add a:visited{ + text-decoration:none;color:#4A4A4A; + } +.attr-add a:hover{ + color:#4A4A4A; + } +.nobg{ + background:none;margin-bottom:50px; + } +.add-mar{ + margin-left:150px; + } +.datashop-add-infor .trc,.datashop-add-infor .tsr{ + width:auto; + } +.datashop-add-infor .goods_id{ + vertical-align:middle; + } +.ul-mar{ + margin:0 0 15px 103px;padding-bottom:15px;border-bottom:#E4E4E4 solid 1px; + } +.ul-mar li{ + line-height:25px; + } +.add-attr{ + margin-top:15px; + } +.attr-attribute,.attr-type{ + + } +.attr-attribute{ + margin-right:30px; + } +.attr-type span{ + display:inline-block;width:auto;margin:0 30px 10px 10px; + } +.attr-type input{ + margin-right:3px; vertical-align:middle; + } +.attr-title{ + vertical-align:top;width:60px; + } +.attr-choose{ + color:#D612DE; + } +.edit-mar{ + margin-left:153px; + } +.noborder{ + border:none; + } + +.datashop-add-infor .xnComment{ + position:relative; + } +.add-div{ + border:#A9A9A9 solid 1px;width:100px;padding-left:2px;position:absolute;left:120px;margin-top:-6px;background:#FFF;z-index:10; + } \ No newline at end of file diff --git a/php/pic_switch_demo/static/images/Home_06.gif b/php/pic_switch_demo/static/images/Home_06.gif new file mode 100644 index 0000000000000000000000000000000000000000..a54ae166e127c91d3e6c0bfa5d73724a1ab664b9 GIT binary patch literal 1307 zcmZ?wbhEHbtYA=M*v!E2|Nnn4FE2kozv^nUk#C56lsTcvPQUjyF)=hTc$kE){7 z;3~h6MhI|Z8xtBTx$+|-gpg^Jvqyke^gTcyO5{G?PXAR8pCucQE0Qj%?} z|N*N_31y=g{<>lpi<;HsXMd|v6mX?+vGmMOMfhu&1EAvVc zD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5FD#PU%0_}#d=^5=_Tjq>Q^Kd z=o{)8=;!8w`~_BBToROua0XV@#UYgisro^w#rdU0$*Dl)$}r8qu)}W=NFmTQR{lkq zz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTIk_5|7?_z@n!C8U8W|c|IJr4nni)A7nVC45 z8Jao4%)qAC!opDgt4=Wv8g3YuV-FyNn&1dD$L$Y zpuJGNMtJpFITxiSmgE~oJ}1aO^sa5%#009OpTPFdQ->= zF@2z8^g&4jDXGAOfawp!geQC;2cC6O^MLuK2$(S#|Nr~@=l8FlKfZta`sMSdk00K@ zd;8|~tCugHKYRM*@uPt zi4*$!dV9LNIy>6iT3ec%8XM~CYHO;iDl5v%N=u513Jdb{a&xk?GBeWCQd5$X5)DCA|t}XLPLUs0t5X0e0{vVJU!gqTwR=<93AZKY;CNqEG^8vWH2PB9RGJl7j|T25&^doU(1&g9`x<@;k@*E4Uw8zLF4@$+ zLudYlNyc7lqt@S8Q+E1o)&2(?Dtz>2pMSBX>TKTb`yY1H_^rSF{>PrW^Y4HEZ)j|4 TZfR|6@96C6?&*~jWUvMRx_sO( literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/Home_09.gif b/php/pic_switch_demo/static/images/Home_09.gif new file mode 100644 index 0000000000000000000000000000000000000000..0a2f7a8039194e3cc6670c13a48c25e60fa53b4f GIT binary patch literal 2320 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/big_03.gif b/php/pic_switch_demo/static/images/big_03.gif new file mode 100644 index 0000000000000000000000000000000000000000..bea8a5d3835c96058a6a8d415293df84b188f6bb GIT binary patch literal 1503 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/button_03.png b/php/pic_switch_demo/static/images/button_03.png new file mode 100644 index 0000000000000000000000000000000000000000..843772c52025053dfe83e687584260dec607b76d GIT binary patch literal 1037 zcmbVL&1=(O91e(^8x9$QI4_0_L~%{tH))y=7H69eSFp2mh4tXUG_gA>NU%Z?trdD%(uAMoItuALsn4hE99gViR?P#mxjQZ!R^x z&7PmvMNAL z({c_`EKrL=x)BjKD@5t+h`~asmjp2haKz?}ZX2%?gQJlir4Yuo+A(pI4huy~CS-0b zKpqHTnCCUHPDum(4dX=Xw7C%@p@CAoo_Mq$o!JqX*6wsixgm{4zn28GDejtuz4Z`9 zq-q%){loi#uUo2Gc4S3y9Lu&v2+PHyq*_H;QYB56fHUGa30pK(AQho%L#G0vEvh2r zDVwtBn4kp3$_QJHQsPD)8u<;V-yv2x6|0*GatThF7_W^cpx(sz7j+} z?x#2M_8etvp(J>Od?&#nJE*T7oZ#P4Ey=V^MFTd-^R8&BS}DoUgrX{!$|g6&`u|fi zfd(Vw!|~6sjIQVe=G)`Zr-x(lpol6aq0;!qTzx}jWmK(lGyC5D{dRwMe|NV&zBe&< z`~CFx&8?j$6Wgz5-Z6XA_8~a`_@L(>+`s(%p4~rK(88zO&=_p}Ljh2aQBZl|*VLgkxV4tF_PASK@Rl zAOxR)kq>}WiJ5^73GoeB*kA;92F__x7^)6fvhU&F@ArSd+S$IhymV`c(4We$3_FDIifW(4d zVuT`28JpwQH;dE{_Amu~Jd6^P|MC6<52DcIca;`wr8XW#TZb9$9By}m!@WQc`OOWm zUKmUu#?%Kzyr1MoVe(U5gYC;}kq1)<-81oRfnrVD%WR%*iZw=Nl@4%p2oD7O|rE`wj^XVw}*XWAf~e5JsWl zXqx3Is_J=;>q-b&wVJFsHAU8BU6G+T*Eow?vo$E!knJL`fsiX{64SA4Me=M|M^a&pTjeL@3EeBn5V-4%T*~BqZbfPFbFlXdRqI zPjKjEBnH#`8qpc{J8!N5pSl!}F|M#1ZKc62R`3u+7cifc-9540`i zD0uf@(2Jl~4+;)pFc7aEJnZ7pf5DfoogT&x29oz9pU>y}`(<kNAruFbLURr$_qw%nw4hi;P|9k~hSsy^vrP!HWcZeiCycyx@H8L1bvJG9f-)IAak zZjKSMFlKCyTVBm#*W1Gsba6k34F31WPdo^GgWpjauo0Vh5Ud|2c>8dx?H%rU6`x;S z0n3@r1VT(*kcGo2)iZ-1>*{QuUyD2#L+GBtpE=cOG=WJH3={ztJ*YyUA_2*za=CmT zNDx60N+ObqsI1G94k4I4JhPVgJ-uZ)6I<+L@B>O?T@**7kuZ`4lJrGXsZ??eNh&f# zF+GT=n-!yUX{uo1)JuYx1|$NxqT40=)Zm$?XCZ`fqj4@ArISRll!=)ei%5WC80K+} z(J5`=ziwQJPTL1D7F#$a`-#Wu(Oa65S?(@3lmnSJ`okn(MRA7~@%BR;(Yj^u?2q6F zzHVt+)ltf2$FXc%La16Q$(mJCWKFIpGIXXI7ja8wRjR?7Y9ptHkS%Ev)2W(@^lhw!8pHqaDjbCvt-jY%N1zDJnmXW(`u@MOeATFS~d9z*Z-fKiOd->Z;pSO zWqQRrFyEfHK0BNb502QxBy2RY4=3N)SQ&Mz+RlD-H#assZ+G|2%<1d`_auRXoO-TpcEwQyQ^n-6H+-m>1+cAxzL DYO+5O literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/button_08.png b/php/pic_switch_demo/static/images/button_08.png new file mode 100644 index 0000000000000000000000000000000000000000..336306792506bfb4bd5b32ca78705a10ad5f11a5 GIT binary patch literal 1035 zcmbVLJ8#oa6pn;wY1IyuD56YPu2dD#*uH+$iD_t)*rt(4iPA{Tz<^`lG*)U~W8V_D z5~wg0sT)WzB7OkOh=C3jh@~^)2e2}+bDT$Es5)TDz7L=8JKuS|sBPSxp1d)c$z-N0 z>qZ^cOYmO1G6vtv^1^Fa=9t-Jo3zb(c0@8om$nG1`1Urb6WiT;^o^_lsO>eHtXaLM zJJjdx)P_&|5YU;-%4!nYPM0v$BHLb2;C_Aj%puP$a9e6stcGRM@z(bvvbn#}aQ3@S z-sM*Bpp`@i0-rD&CH_tj>q&v@^XjlquLTbEO<1?U4Ma7oHB_b%K`Jk19dTJi%b3Tq zqG{R^l0+;Dq9kA`i#1)AbWudZhXZes+t%xbHS`6i0@q+wCAr_r{6^Z9(r zAxT-V$i{mCvy*HP&yN@k5<8I>GLHr*Wwcv#mlZfrItalJtJO2&ARZ$tHO5}{6Fx*IuAkM{fs47t15QECWk^!t$qMX`4b>g@U?U=^dl z!5`lBT;0g!ik7NrmSvcxgmF<(oJs8+dH zQWdGJVXZjAR)Uz>fkQ@qJ@7lkmM_HW<%rmfMh!}LMjcS=P)6ep4N-Y>87*#kflGVw z&9pp&Xblp1kBMtV)JOgN>fSm2Rh&~5O*Smm1mzg#L_>kNEl_TjR0-l9VBP=8nE+yh zv^oB1meCb-V7fhPeK?#A4+&smA{dQ1d3FKD>UPB_Hj*DL<-^mjUyhG!<0lhKYwuRW0e*Dg*<5@8`jQ6F7 G&;I~mSv&y% literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/button_09.png b/php/pic_switch_demo/static/images/button_09.png new file mode 100644 index 0000000000000000000000000000000000000000..e0dcd749379e64a85cbd976b5f75c02f4f70fdd9 GIT binary patch literal 1032 zcmbVLJ#W)M7`7->P*GF~glMOeix5b}zO&=_Lk*QbY1F1vNu*}Pu`i9)+Gp%5am!K= z1B^@vG4Kx%5(^Ro6&ouHf|Vb@z#rh8CWWEufF=7r{5;S5{d{Bn?(EFM499V^jTNWG z)+zR0JwMI9=j0nN*)mVvE^U)O9r_vO%#idjXvF>&Zec&%d+-G>F;YM3bZNJ_W&|V_ z{1PJ+amv^nx3pZOez1)x=;5s>sq?=+e&RtC*7;4P37e^n2hqxYhTHq=onU`E&_jOt z4p=G-CJ!QP(uQetE#Hr z1`+Z)}U5>imGx)DXqta3~CAfn-}E(sjMmkfaJj zRPw!q`b8zl7bgl1&VwvUX+#oGD*8RLOY1!I^eBWlZ8ndElYE>gmNK#MQxOSJjN>w{ z5jv+W{MU^W(RpVt#bOKRWH$>~J^G6iGRxiRhDspw#<-V7tSJ7DLxSBHC$!vbWB^3JR8=K zWKFn@B&U87;ECOc*&TEBQ@MtnVV{z$L&(mg12zVPl6*i?V7F`F=4OElDIkN5Ast#RP#%<}EX4MpABS}+grp=GJ;s4}JWX_0XbNtgR zlPlJN<@UJs+2MG2aKa`gW24dg{?%qfAR;uEjfSy literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/button_10.png b/php/pic_switch_demo/static/images/button_10.png new file mode 100644 index 0000000000000000000000000000000000000000..f00354454e8e1d97332f97806df80fcdf6476a9b GIT binary patch literal 1032 zcmbVL%Wl&^6m_eWe=!8V0>S?{^+r9t$Nm zw~?|i2DBh-Y-O?Q9Z-%2bQDB2@#p6+A`1MPxUY9`CvMVluzixyy_21ucXHrWeQ|3O zZDbY@gp|7|3lF2z%4*`2*Mfb1EsJPs!VhZVOjN(Ki<&HEw6@Rs;Pt7|)RUvR34W6onsmM4>mG*Km%jAT-+R&x$TDT75h zJ&w4Wm7{dEV6bWGB|*#s7NMNc9k3%_6G7=LgfQ-O&WWRRo+wC}oVl?~BrJzv9@o@5 zMG%m!|9}@t_{V)dCE;yWCN32x_cHNdQH04{hchg*4)AyC%XP$q#(X zHqE-D8;0Z9t(HPaUDH(4)^ycWtGbGvg5x4A!MKW54RDwc(o!0VraR4gL)Vn1L5zBV zZAU40Baaq-1MoY?+LvOjW`0p+cRu0Y%~tp7hblR=D}H^)ECQd~g? z=G*huhr{{s&dVtPKgW+1~>bCR! qt(dO7+5Dj^qlNVwPlR6zI$K!8!sB4^#i!ENbT-?q9s8{D^wl312sWz# literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/button_11.png b/php/pic_switch_demo/static/images/button_11.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5ba4fa067afad62ba0e89ac165ee682fee2685 GIT binary patch literal 1035 zcmbVL&ui0A9M2dI8QU04WqNv~pc8EJUfQNjT%FA?SFm$-h4pBfyslwOUVM48=}ykm z6g+#G$o>KE;=z-k;LU@e|A7~;A|8C{+Ua5JU?6!v^7(wezn`wJ-I<-fGA#(gY<<;g z@^zBGm(EY|@43R&7ks(Q>^9pVUDkIg7HU4}U{DX;E!@PeKX~{NFLP2iXti0paaZ?9 zD7hI%O2e451z~w5ja_dWGtj|XK~xogynQEvz^{s%r3P%oChi5RdlYZ%t+l+pZBO&X zm0Msr)ww{3nG4czCrb3RDh_pZzR#{@5ey-0yDA<#)o!c6xpWMY?hhIJ%zJYT~GvD_YFD%^`CZ>dM>eT0p?|;&4JnQzF_1bvw*?ar2E8 ztIgH|dvDHOVc*N;yKmTXo7!EvPWp7@CYY=Hq=!KxbhmLEyZ+wOL%hgH{h-sO-R7$9 zkx+1RjF5#fV{_c%QWm@35L3{@+d)+0e|`GGgTSxx8`UOk#wH#FEBgsv-(Tx^`$JFj z`K3o-G1Hkqh^Y&*a3@Ojtj3RZb+*s1MIMYHbXen0oa#1Pz$6IPcGwp!ZfKZYSNDRz%8Qj|lBA<-X`+0dz zqP1`mJj1?|kPwXXs|RP;R~*^4ZD^h+i z#(Mch>H3D2mX;thjEr=FDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaozEwNPs zx)kDt+yY-;xWReFdSDOfCFkerS0onb8|oS8=jMX^1y)^L5|oN?23FO@A(aKG`a!A1 z`K3k4sX*n*FwMZQ!*3BtA<#8e{zaL65Qn3x({7+abe8@R#Dz^2#Gz`)YL*wn}s81ROMu0~EqCZ=xA zj!vc~M$YDj=8iDEo_WP3iFwJXFncqB_Coanb>Y!#(9` zB4E~F{QvLopWnZJ{`mgw>zB`;K7M%r?(Lh`uU@`*{_N?K$B!O9xPR~No!hr=-nf44 z>XplvE?zi)?(CVz2)%Hf~tIZta@Yt5&X9 zzHI4|#fug$m_KjsoY}Kx&X_)J>XgZoCQj(@>+R|8>g;H5Yi((6YHX;ltF5W7s;nq4 zD=jH5DlEv)%gxEo%FIYlOHD~mN=%54i;annii`*k3k?Yl3Jmb~^Y!ue^7L?bb9Hfc za&)k_v$e6dva~QaGc_?b0%l7+T^(&LO$~K5RTX6=MFn{|Ss7_5NeOW=Q4wJwK>>a~ zULI~PP7Zc9Ru*O^Mg|7OpDYX@paUX6B@Y9WbWi`v({K3~&*2YX);SyX>0N5LLf?aq MWv@=HVr8%f0C1t8U;qFB literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/button_16.gif b/php/pic_switch_demo/static/images/button_16.gif new file mode 100644 index 0000000000000000000000000000000000000000..ef6c265b70be8f4f4c0722eefa284ce54e67b415 GIT binary patch literal 1245 zcmZ?wbhEHbv|$ioXkcLY|NnpJs)|yBtNcQetFn_VQ=?Nk^)#sNw%$$BS=C4WT$g}QL2Keo`G(%fti7VnW3Jcv5C34 zxsHO7fuVuEfswwUk*=Y+m9dePfq?=PC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DRmzV36 z8|&p4rRy77T3Uk4Ff!5ws?aU2%qvN((9J7WhMC}!TAW;zSx}OhpQivaF)=B>w8T~k z=u(ImatnNY;Rfdw>w!I_mzVRWpPLKv7g%+1Nl+@n8CX>phg24%>IbD3 z=a&{GrvjBL!!!fK4!=bpg+SL>`4?pZBPB7%B|o_|H#M)s)5TT^D5IB>nPTN)Vd3az zYHsf4=HlvVWN7GUVq$FJVq$7+VQgt?Y~Thn1DjrRCld>2Lqiu=LpK*gLsuh9BMTR2 zM>9(!Cle0maxO|uEXgkl$G8yO;GeeeCv{0lv$RV;#QQOs{jsPt4u8Rn;Ke}nwT5AxS6^F zU2bS-Vc=o{^tYRlv$?C2sS(iM5WOkngqc3jG5Vmyfs|NaLckOVV#1R?kOR*=sd>O0 zQv}Q!jQ{`r{qy_R&mZ5vef{$J)5j0*-@SeF`qj%9&!0Vg^7zri2lwyYy>t84%^TOR zUA=Po(!~qs&z(JU`qar2$B!L7a`@1}1N-;w-Lrew&K=vgZQZhY)5ZeMTG_VdAT{+S(zE>X{jm6Nr?&Zaj`McQIQehVWAmo_rKzE=rmCW>q^KY-Co3Z@B`F~;CMqH&FX#K^#)_>+YJ1av?IsN`W_3hC)zdHOB?;yGJxb#LCb;5UB`n@7+&zLa7TPw*qC583sMS%nHAG7AJYP#w>{pzi` V8$=5qS^KTN{$|_nzZwh-)&NEbz=!|< literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/check.png b/php/pic_switch_demo/static/images/check.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb5174dd6ff020a3ca9d33de1b99720d04ada04 GIT binary patch literal 2922 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 U{I{tCrvLx|07*qoM6N<$f(=%ziU0rr literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/close_03.gif b/php/pic_switch_demo/static/images/close_03.gif new file mode 100644 index 0000000000000000000000000000000000000000..3160ff7b28f13678240b8de9d3f7eb3333fd407b GIT binary patch literal 1332 zcmZ?wbhEHb6k!lyIKsg2zsu(TkI(;qef!^P{J+Qkf1BC=FK_>MSpJ_8^8fvl{~w?K zUy$(s?Zf}C@BRPw;Xe?hF^~il|8qz91}L~BmLvjc8~cia#N_PM5{0DH^vpb4rT4q{ zD=B2A*eZpa`WpBaIHzW0dQ=sq23ProBv)l8Tc#-4+bP&oSXJZ}7b1P#bD+2=sC{P00R+N%v73AUuwF}6zRmvzSDX`MlFE20GD>v55 zFG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV640d( zFXR^Z`oay)E7k*hNG~}*SHB{$K;KZ$KtDGZMv>iKmOL5>Q4jB{Rj!#lphT&D7l7 z&CSKt)yUA$(Zs~q!o|eY*uvP-)Y!lcW(GFBMkcOiW{zftKz%NTK+@60(bdw-)X34) z%+STy(gmj1Gq1QLF)uk4W^X3YUZ`FJyn3yii&7Iy@{2<9^K)P+ARr^ZB)>Q#zd*q` z*i1nqJTosPzr0uz6g?2%x}+9mmZhe+73JqDfWy}+6N~*OE*7RH=Eg2=rmi6O8(J8+ zm;n9lX5?({>SSsJ^fyFr3OQk>4|I$^C~+Vq7MKt)1%jCHqz~l4Gf!$BFvk=Dvj*e; ze}Dh{{`K?6_itaneE#(D!~1t{-@JbH^2PIKPoF$~^zgy`dw1{LzIF4)^=ntJT)uSi z!ufM&&zwGW^2G6DM~@snbnw9beS7!p-nDbb_HA3YY~HkS!}@h=*Q{Q(a>epxOP4HO zv~a=vd2{E?o;7pE^l4M4OrA7xLVsUxPj^>mM|)dqOLJ3WLw#LsO?6deMR{3iNpVqO zL4ICtPIgviMtWLmN^(+SLVR3oOmtLaM0i+eNN`YKfWM!wkGGenhr64ri?frXgT0-t zjkT4fg}IrjiLntdTk7fRXlrR|sH>@}C@U!{$jiyfNJ~jdh>MAe2nz`c@bmHVaC32T zu(PqUFf%bSFev_H0hdQQAQDujF|YDU=0A1eb{~g literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/data_close.gif b/php/pic_switch_demo/static/images/data_close.gif new file mode 100644 index 0000000000000000000000000000000000000000..6c3d786350e424ff0d4bf3f92e0c57949fb6048d GIT binary patch literal 1343 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 z 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/11.jpg b/php/pic_switch_demo/static/images/home_page/11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c24f28e66242d82fdc408181d8a0964b9df6ba9 GIT binary patch literal 93623 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

      J-B|=ccu#neI_!{2aESFgfxolORL3 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 oCApl1he+ZEzU8i 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�^Yfk*efn=epn&RQ(GM6k(A;`C^O&x3?Z~P^$ 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 Q@LcAP9f6b7>p#E$2N=LESO5S3 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/12.jpg b/php/pic_switch_demo/static/images/home_page/12.jpg new file mode 100644 index 0000000000000000000000000000000000000000..379d2ccccd2455f98c7e6d1c9b6c0bc41138afb8 GIT binary patch literal 3066 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 U?0G;^+d@y!g7>jRsSk7PA5wt3vj6}9 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/Thumbs.db b/php/pic_switch_demo/static/images/home_page/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..802a3d94a9103449fa5d63b12d28f04388167964 GIT binary patch literal 178688 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/a.png b/php/pic_switch_demo/static/images/home_page/a.png new file mode 100644 index 0000000000000000000000000000000000000000..579ce1b31732c8a9812f5cffb53137f6f54de68e GIT binary patch literal 5011 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/banner_img_03.jpg b/php/pic_switch_demo/static/images/home_page/banner_img_03.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b9fcccf19a870d39dd90fabbc630055c1a1fcbf GIT binary patch literal 1200 zcmbVM&2F1O5MJUQqN=LGt;ZF;RWH^h#h8BL@}%u1QWk^sRbG z4t)RB;8XJ@`|W_E`9YkdQrc~yK0z-aUWY=V{4KY>VQ;q(Fs z;1M@R0Ms|VWKx!yr6_432N64=a>x>;3Ni)DNC7*$RThL(TEY{07N@rK`}36qWS$?Kq(=;0lRqb<+esPhOLDf%-=N$r}MVQA~8M72Nh`|Y)mA1q)y)7Zh z#^WXM+HNIDQ&;OW|#@*~F1y9wBzu#y!MmO=M$0FUD| zV)LSToZDIn&EpR=@^hBJw!2omhFwDjAs!hbU(?#EO-FN0RW;0QjSyd#7O~O)bWGvN zD9vd6H7cEn&tIc12cI97t3y-1FF9X~`WJZGjys61`2q^{5AX>H50{OV^p>&+-w*_T z%fIEtLzVg(h?`&w=siIM8=}w?h58G4!xLNmJ6i4W9Shj{*9VAqEcJKrq$hCXo(Oiq L)yE~OP=EUaxd<+} literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/banner_img_07.png b/php/pic_switch_demo/static/images/home_page/banner_img_07.png new file mode 100644 index 0000000000000000000000000000000000000000..976358086e76162156a4fe96e6e42550fc6928cc GIT binary patch literal 1136 zcmbVMO=#3u98ayCigs*W_M$!PBQBz@Gx?mR2^~v1FJni|Sf&H*Nj4vE+O$nxOkSO7 zSPf_d^dc%M>_KFy`!b#B?xA=vki7SQ@BjP# zzjJx4d?LO3z;1?N(xp*YN!H}um7?G1_4-eA*-wl~GLCDcZbgXEU2G#z@~tUUL6*C4 z?k_aNFrBVfog|ayY0bfY)=G4;4L_u4h8Y@egqAal2(ZzV7v$M@4<53>bMx#(&g9Lo zfTq3C#R!crmaEReet-u9LROGuMNy6ckr#N57db)92#O|&8qb5)!%}OJThl7A*s?{XJUdND zsBv7qUeDI0ERLo)K~>d+LliSqBNHzK#A;-M_+Xm>qS%SNka#!%38Q7>d6H+Tr<)=8 zp=oXr2XQM=G-X`F3OOOmbH1O%)zpqj1^ws7w%T!ZAw*mS#dtn)Xgz8N+hCfzFB?h} zsW;l0$fHHE<{)w2yx$$~6GLoXOY&X5FQP~>H`Xh;eb3&jzs&9NPJ zpqLwkBTABfLl6u}hpMd0s;)p)*TtgR#+HJZSb>Auc0Fphh2_79)d~@^2#%^4&$T;X zY#I|BPva02#&cl83tU`}lj3Z~3Q^>pM{Y5~K4@lF^R}@r@d|_n9N>$R)QnoyrGhGo ziaIDkSd`fo*8Q4{anu4hrbJM07CTygl@u4%PJ%)T@nW z_CKFL4|jgk*KPNMtKIf-u(4zH%FiG9zTsbv*q3JPrK9({?ON*e``%x#bbjan8|f$O zU8}X8OOJBkY}Z}=_t7-C*0s6<%$q$oI!+zBeXG>52F&N*&)6yN)5+^MF95T*^z`qY zH(tq?SIQUV{EnC7aOVEr-+oyC*4ndrez3B$Q#Rfd%KQHGdY6~o$7?Ty!|4>$kz)4r VAKmrc9}JuP14>32-WmCE>0bgxW<~%2 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/banner_img_09.png b/php/pic_switch_demo/static/images/home_page/banner_img_09.png new file mode 100644 index 0000000000000000000000000000000000000000..d33f88cd6efbbc5449778e75164e88f4d32174dd GIT binary patch literal 1100 zcmbVLOGp%993LNSA{lBDWdy?*J;0skuH#HjI?khAa81?)4LUSC^XU#c^G!3K?kZCD zAh1iFf-VLTog#vw4!zDDx>R(CE{V4YuR(!*v+i04@zB7`_n80h_xnFr#zxPywRX1> z1kskw==pe!-HS$im~7CKXMUN>u6_@q!JgaVmi%H=X$7HAkw zGn^zzF$d2lu|+ak@R3zX`cY4vK?ji?x&d;bPsWT^5zZln!k%u0;03wdHnAVo5`|O7 zRIGsEXqNH3IIgO7g!1688#`J@g@phxc@V+5(8l$c>ZyZq?sgZ74Y4=!+0eyBv1WB> z&w0Q{SzV#Kr&a1#xc}nqcH`s2_UHf~&r660qj-|;#zS=}tE+{|m*UUO&B3P5JBhWs zLrWWj&955Q=7wf(Jlc0o>uSIJ^VX5y4QmI;DeZIDuY3LMo(HQPnHG*^zb1<9xxG(7 zW9PS{CF07+?PG@%AC{Hux>P){*xbpD*hu7AxuQv6rc4k(N-^@3^dG?}1 c`O(mPkU0N|diq|Tx8wQF8l(E-;R{#)02Z=X-~a#s literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/button_left_03.gif b/php/pic_switch_demo/static/images/home_page/button_left_03.gif new file mode 100644 index 0000000000000000000000000000000000000000..0cfa1e3582dcbdef23a0070a57c7feaf40f42139 GIT binary patch literal 1552 zcmZ?wbhEHbRAo?QxXQrr|Ns9}r%wI)_3PEES4WNDj)0`_`>nw`|$+@#DvR z`}R$lGUfR3c-mj#PnPRIH zZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(;w+TacStlBiITo0C^;Rbi`?n3A8A zY6WD2g!Ppaz)DK8ZIv8B5(*$Yo%4%Q6-@OEbdwFt3>3@^^$d+o%+1Yp6pRcE4fG9+ z^bL)44b82LjjRj|6rex}Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M(T(8_%FTW^V-_X+1 z5@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}><76{9OHt!~%UoJp=vRT#&!Os*6j4QW4I;s=7F&vLIDID784hv?w_hs9YJQ z85nl>EdnV7y2i@CC=(bdi8(I$$)&lec_p4Mwn{)5y_C!pE3?EDbBmP3RNZ8=G)rAG zLz84(3(K@5UGuaQOS43aWQ)WkQzTyTbH(<`tJD<|U`X?9K$*4b^LaSFe?GQEFmIeo;t%ehw@Z1Z3owHM z;rzL?XHK6wdE)r7qel)OI(T6JzP)>P@7lRz`?jrHHgDRvVg0(bYgVsXxnlXUrArns zTDV~Tyt#8`&zd=7`n0K2CQq6;p}()Ur@O1OqrI)QrMaoGp}wxRrn;)KqP(oMq`0WC zAU`iRCp#-MBRwrOB{?ZEAwDiPCORrIB0MZKBseHAz~9f;$J@)(!`;o*#o5Wx!QRf+ z#@fo#!raW%#MlU!IrVgPw6!!f)YVi~l$8_}O9o?|xU-H3=k}#B z$@6QewoEMH5);+Z(wJSW&MCccq1=*m9!6QEl?yr7q_GQaS}C$MRX~tiZ71KJG)WoW zO~OagRiqRbDxXf*p00II|`2YX_ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/button_left_06.gif b/php/pic_switch_demo/static/images/home_page/button_left_06.gif new file mode 100644 index 0000000000000000000000000000000000000000..758f4e19f9d2f94e9f0c31a2be12f8ae9240ffbd GIT binary patch literal 1590 zcmbVMXVGpH34JeNe8+HcSV0X6JfnC5efh-|J zypIGARD?t_6(s@D+BDM$6qHQ7vg8O6@xr%R1nPr7KlFZ>d5{19`9II|KF>QnL{F$F zU&t4#hM?98+p}V*t;nsppm#@mV@G?#{ey0ex$>s`35~h3x~&5mcT4NDCqFsd>**1f z`ka2Ph3>#11J|=aQyC~52I@0GeFmuT0S+msX24}TsO4_#@Bo)>plSiATMVuygNxCi z#2s8)1v(yq zM?1I_0~(Hk+d0>F^nFm|){x@|gmDadKD>d)+|b#umf|VlA2`)+p$st$4@WW!jb=5{ ze7qEajkFq>qX76*C?bI zrjrvgxlSLXR1m>Ry;O(wa6`;io-!MlZf&EW-Nlu?luK$jhT>T+f@Nd7t6+9C%d^&K z)>774RIRnPzQP=LJ2FSIcn5c!t(8j$*75Yo<3|tM zAGF>EKK$VQ_vX)=JLlbZBErMoo;_=3=v!~T5i(=CUZ>Rr2ThwgMI9JGst8=E zkjtb(bBaa&lP68|n=syYoDbp+j~z4m^-*4)BS#D$Hgw3~K?7fVbwGcQetrAA;@-QL zo2v^1c|Ypa`P}$Bzs{Eva&MeA#>G*Q6$e0lN?bK9j(G=a^5eH8`Hj?6mBAM_ zoxgKvz6kA4oLcU4VgHrphb1RQSo#kSaOabfQ{r9R^{%ODDXw}leN6(nI%`ARx`51$ zS(~?ROW&TeX6LT7+&wA#@{;lk)~-)SCKG|4yNgmsP8c5;s4U)+ih9XQOGll|PLO#I z8RsY+eKvWLq|!0AI%((_Tu}?xCHqelSNhyc86lFE4!@h?J7^d-_+Fvyz~lI*9qMOo zL-uCC{woRw=7rhwDwpe^mOgVK=w$ZFMKI*IEW7;l5*IIcSr|0Ub-Z7=S4d&z^np;o EKW}`2TmS$7 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/button_right_06.gif b/php/pic_switch_demo/static/images/home_page/button_right_06.gif new file mode 100644 index 0000000000000000000000000000000000000000..501424b0fb70feec649a88ba2f94db7c9bd45964 GIT binary patch literal 1597 zcmbVMSy&TS6rKPgiq>60D-MIWl4NGGOfnEPCPZnATEx1wl_42S3dzLDKmyc?Eznw_ zE~vOGs8|&%Qa2P7#ab#_YzqpCR@~dNXhCtq+X)ie2R|QrA7<|I|K~sF+;i@vFr7k4 z1ww&PH3YSk*T|lc6nKJi3Am93no2?G08qaI)Gq^N0iYZQ)ik*50JZGRTyJpM4yxvXx`p6cD!6C_ z#h&2$QqcYc9CHJYZ-eWZx3+nM8Vjfx2hN9rlfIyC5qNMGv|a>d{@`g7cvuTg4hAh% zpuG)TiUkcvz@3~Mx!oQWx;NyE0{l1%y&V3)dsg@~SW9sf{|_1Ouu}S1nuDY1`6i1B zX+CxWflUS#GE)|ghFdkX(KI=UrKcxNiPR^>>Xim${5UwoK|0Jl$xL6gUb{@b^O%21+uuOys^{5<$<(LSQNC|=nf^if>#V9Vua3MyJ z5}ZU)xN{)98f%ClBec3sEqOj0JXDq@tO4PKEHEz6`-^4G({1*kTiP1SHZkX0d~^iZKx?Hk+Ms zb)aor1pTiYuSMG;6Ros3g0?a7te)oK0WLD1yEh9tfxI{5RMx~_3Kgei^zmle!i8y7 z2!A3nm<*(xG7t&_MGN)v7^P5-N%ca7GA3F`#2A!vN}*R!(K45v*YTwj2~3CTa6%)) zF)UQ7)XKGLOd-K>Tq{w_aThntV&f=_o_1-QcXsO|9`&!Cp84T)*{PGICytjCA3Iuf#X0KVjDr@D6<;%Xw%vk#MlCQo@PfPvc^TjEPK3n){a#Etho)FL3*acR`VvdXb z#AKWwLmTwbRMfnWKl*U)oY}KxelR0)dc^zFrcMce@7;I8CQs6ZYBdwp6UL8Ig#?pI z1tFJ7B{<)lB4NV0)O=Y literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/erweima.jpg b/php/pic_switch_demo/static/images/home_page/erweima.jpg new file mode 100644 index 0000000000000000000000000000000000000000..185e935b04911207cd705ecb20806cd4e0145906 GIT binary patch literal 36110 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/icon_03.gif b/php/pic_switch_demo/static/images/home_page/icon_03.gif new file mode 100644 index 0000000000000000000000000000000000000000..340de15f1488d00f883600869979ed4d921bae05 GIT binary patch literal 1166 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

      6~28Bo1rX+}=u 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/info_05.gif b/php/pic_switch_demo/static/images/home_page/info_05.gif new file mode 100644 index 0000000000000000000000000000000000000000..cea18509d5cd1f1a76c7b96d909eae743637e3c1 GIT binary patch literal 13535 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/info_10.gif b/php/pic_switch_demo/static/images/home_page/info_10.gif new file mode 100644 index 0000000000000000000000000000000000000000..bf0f81f2f5d9e2c654934edb1a27890387988a1f GIT binary patch literal 30761 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/info_14.gif b/php/pic_switch_demo/static/images/home_page/info_14.gif new file mode 100644 index 0000000000000000000000000000000000000000..7ef903088d5a65e338a19e506c0653314060ba62 GIT binary patch literal 1355 zcmZ?wbhEHb6k!lyIKsg2|J8y2M??SbGW-8*`~TG(|Ns5|ze(=@TE73E@BBZR@PCWS z|67y)ujcx{)A;|3J^$AU{r~>_|I7XVKV16%=llOF4gW9K{|AB<47h;ef9?q100o!C zl0+bFV_#8_n4FzjqL7rDo|$K>^nUk#C56lsTcvPQUjyF)=hTc$kE){7;3~h6MhI|Z8xtBTx$+|-gpg^Jvqyke^gTcyO5{G?PXAR8pCucQE0Qj%?}|N*N_31y=g{<>lpi<;HsXMd|v6mX?+vGmMOMfhu&1EAvVcD|GXUm0>2h zq!uR^WfqiV=I1GZOiWD5FD#PU%0_}#d=^5=_Tjq>Q^Kd=o{)8=;!8w z`~_BBToROua0XV@#UYgisro^w#rdU0$*Dl)$}r8qu)}W=NFmTQR{lkqz(`5Vami0E z%}vcK@pQ3O0?O#6WTse|C8n5Lq$H;5CYz;M>Y5pvBKeN z0gwaFN2z(h%u@u+C5-?7{r&U%*Uul{zkU7k`P0V_ z@87+B^ZM1x7tfzPee(Fx!w2{8-Mw@B*3BE&uU)-z`O?J;=g*xzbNbZD6UUDoJ#zTa z!2|pE?cK9`*UlZ=w{6|BdDF%X>({MavwGFa70Z_`U9x!5!Ugl^&7CuQ*322xr%jzQ zdD6rQ{e8VX-Cdm>?QN|s%}tFB^>wv1)m4=h1nAc$w`R` z@o}*+(NU2R;bEa6!9jrm{(inb-d>&_?ryFw&Q6XF_I9>5)>f7l=4PfQ#zw##s;8@? zt);1EF>tv&&SKd&Be*V&c@2Z%*4pRp!kyoTng!c zNKo;{z#6+iwNJTpZid&Sv{!MfZ|r+zwV08CWrZ)ZlEZqJ-3+>igg4H(&71E!omI*= zaP{&orr)a~#O_SF9+c6dpDg(3pl`oY&#Kub3L?+7k1v$&_T)*btrcL3Y-$qbtWZ&8 Gum%9J7WF9r literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/info_18.gif b/php/pic_switch_demo/static/images/home_page/info_18.gif new file mode 100644 index 0000000000000000000000000000000000000000..dcd9cad235c94160489ce80119205617252671f9 GIT binary patch literal 15423 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�TEHnh6sz>z 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/info_24.gif b/php/pic_switch_demo/static/images/home_page/info_24.gif new file mode 100644 index 0000000000000000000000000000000000000000..de0808cd2484067f75fdc3e21235271fd2f5be3f GIT binary patch literal 1347 zcmZ?wbhEHbRAo?Q*v!E2|NsAAzka=Y_wLoJSEo*$x_b5Mkt0Wb{``6G-o1kd5B~l8 zmjM+h{^ySH4N!1NEJ*~?Hue<-iOJciB??KY>6v-9O7C~?S5nAKu~iB;^)>JFRfC7_I6N@j|cSz?O0MM`3-Zn9aLrLLKwNwThmWm=N1 zd0L94S)xU%$H8C)=(6vZ0G1g5quuRl7Pf0UN zN={BqPD(abg6dBpH|X?%j?xFE6Qpzl69Ohi5EGsYfE;)}O3edio+4l_Vf_E^@1Nhl ze*XCW?dzA%pFVzg|L*OZ*RNi_c>e6^lgE!9KDdAH?w#AWZr-?l?dp}wmo8p7f9~v= z)2B|JIDYKtk;8`$9@xKc@1EVecJA1|ZR?iJn>KD(zi#cC)vH#nSiWrOlEsS_E|@=W z?wr}PX3m&CZR(WClO|5+@9XX9?&|DlZ)23N;8gFPM|DYF)O0zzG+boZQXqj=bgX z`9&w^pWuqb+Elj>76=KflBP1-E_cG1+%{PWsw6Hj*)N9v~4-;JpV%UkOI zHlQZ>{1f-X89H?y%^?kqTCL8UY)&2OZmc%_>JCiCQ!EvfRWtMq6h*{jmMj&QQ(zEe Gum%7!C+U~~ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/info_26.gif b/php/pic_switch_demo/static/images/home_page/info_26.gif new file mode 100644 index 0000000000000000000000000000000000000000..86d5298503b28bb9cfa56da60dce675978c82f8b GIT binary patch literal 1563 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%0AqDiR{t*SorpyuR-k9ZbIh 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 CbNAW+ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/info_detail_13.gif b/php/pic_switch_demo/static/images/home_page/info_detail_13.gif new file mode 100644 index 0000000000000000000000000000000000000000..e24fb3e864185b7e18527ecfe2e2cd4d326f9344 GIT binary patch literal 9348 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 RcWOfaxqNkjs!dV8@o%(V%BKJT literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/left_nav_06.png b/php/pic_switch_demo/static/images/home_page/left_nav_06.png new file mode 100644 index 0000000000000000000000000000000000000000..d940147d4d4f6cea0aa6eb380c17fe5af221bcc5 GIT binary patch literal 1882 zcmdT_drT8|9Ir58QY*^@L}YRt%*U|3yFRWDDA*U+urdXdN2cLuuMcf|^?I}gd z?&D#vf+Rw;P5>kJ5( zbW*TLpn)|u1#UF0s3P%#s=PvN)dsCt2WDjg87>J;V8JO2a9PY&yTm00CwV3GIV6Ta zU{ZzJAO)W}RjgSFC+3`*Rt zB~3QUL|B0kBUVmSP*RZg^jQcNn@01T*lM3j6rD22h1np4149-|D6UCuJC%?B!DAX2GhBFxuK9E?TzFe(nJ>pGb;&gg$1`#YNZsUzi@OWokYY_ z!a_NMz%nkZ;vtA!#utgQd9XkvQpn^eJk9YUtV$%3!9rBQpV5LmVSHS`yj~j|x#zo~KE-c_@t5m28m4j1Q z-G9j$L^}h8n&V&1GA*JzFm!z0`t;@b@ZeT@Vn}*49-g}PJw0*tYNf2ubtN!_5Ff6J zi70cmGUswWc=PPOUEN)?MHTM7@mm#j2?s9KoWH!+*pmd@@-`=V&r$mFd(j=GO3wC} z*x1p?5%JBeH$B|GTDK6&jJ~9Fl+of@SnNFL;Pv zql4GH0bgbE&9J`u=EbDdYxY&9+>GkmVVNOzj*j})G-#IRoOjolBdTUjfMITduE5I- zq}}z!HTKD>FSzT?uU|=f5EkqKkChk+Uz(?AO;*Y>p*P$esk`s}xw9MS+UBmmGwU+z zguqOA+7GprRVy8l%|dsPZjZMTtIl>XHyh1&J?)31Yu}i0S^CH6&LcqGwyX0Tseag7 zqRmmvnb{ocQ2K4&+(2oY<22Jz=x^{YH5d%Tmd=!vy4tI8=@Qa7s_C4!b+&!seDMwA z@NakSSUyeYx`p!-x)0{H6xR(I`KKD!ThRmWF0R`5N^s)hI+cF(?5gdlxnAnnkG(Y+ zPs@)EHm$wh6Sv83zc21YE|NZ;-<;$19fB*jc`SbJV&%b^9 z#()YG|8qz91}L~BmLvjc8~cia#N_PM5{0DH^vpb4rT4q{D=B2A*eZpa`WpBaIHzW0 zdQ=sq23ProBv)l8Tc#-4+bP&oSXJZ}7b1P#b zD+2=sC{P00R+N%v73AUuwF}6zRmvzSDX`MlFE20GD>v55FG|-pw6wGYnPFt43sj+7 zT$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV640d(FXR^Z`oay)E7k*hNG~}* zSHB{$K;KZ$KtDGZMv>iKmOL5>Q4jB{Rj!!q~;Y+{w_;z|qLS)!5L`$~k6tV1qSVBa{GyQj{2W*c2*}7U$uG{xFHmp}HdD|D&&*57FE7>v zMGwTcE~!PCWvMA{Mftf3;PAD|#A3gpfs3Q1iK~IBxv>$*-;PFRP8LQ6rY3H#u4b-g zPD)U{DddEiKF~4xpu~ZcSYSfH6bNF%lRl6G&pfGlz#LNq%o>dU|NZ^*``6DO-@kqR z^7+%p5AWZ-ee?R&%NNg|J$>@{(ZdJ#@7=v~`_|1H*RNf@a{1E53+K6ZM9qnzcEzM1h4fS=kHPuy>73F26CB;RB1^IcoIoVm68R==M zDalER3Gs2UG0{A;Cd`0selzKHgrQ9`0_gF3wJl4)%7oHr7^_7UpKACdNj< zY^kTKqphW>p{}N?qO7E-ATK8?BP}H^r?i&G&Kn{Pjq3h1^{fswzU8N literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/line_06.gif b/php/pic_switch_demo/static/images/home_page/line_06.gif new file mode 100644 index 0000000000000000000000000000000000000000..f7663862cda8ce755a8c5e641ad806088811747d GIT binary patch literal 1175 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 z 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 wstF+<pG#HogAo_>so0$6d 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 uc0GP!NVt$T{JoDI zbp3m=yiDTB8iSr|ggcK8>4+!IY0qP)1SODJIkiZ_vOH=yb5c?r%Ru}^w*?fq232it zhVHS_gaI~kQ^gyoj>oIHJbSWe0vms`T(tRj$8wJ05JTb$&}H^a8Io(bBl9;)`Rh4l z%WP##bWu%D%z@y#EkPHQ?)P>TsJ4*wHl&#s;a(?d$~N@9d#Cy1o?^>%FH#bO!s zV2hT`VH0BrYYLsL_vWl0K*3)SSxcNekiV)T(@^Vb3YAx$wVoW1vUzM+nR75_N8$T* zSGmb+=D2x2H?6@3)2VVPv@9pU8u|Anz~a&KZ(wXsgd*&Dff$0`rkI_$^BbPIw~ zrJmkLVV2kr{3cQWG~HUaSqOl8K+;VP0(+{FkV^(-sJ;L~hY2NQYZIG!U6cw2n9v(2 zwTZGx9nchNXHwu~YR~1fYJKl5A@Y>}h_$C8 z&2ZP!Q{^YA4onA{M9j^%l&Il#Et;jK8Eb2Aeh7{_^z!Gc@NoL|i!fxV$H7ZZ9K6nu zuU$LFABh|cAbDfE-$9&QYk>&5N=-AcHtCd6n^7F8pFC*H%OD(QNGU~f)?ztnEg?2a zGAT0&uMY*tRr_|6-ycg#0Cqqyuu72vNCj*eUz)UrkiB$7Gl2Ijxj>2A zxOT6oJNhAKErA|5#Ch$;l(XVj)G%_L~#Tn zdO+_gEYIXBT(K!Q@qt(Z#= zzq&?PiCV{*sV0LQvc7{gkqhH(4jrCQ!IajYou^{?BT*L8JZQ;i{M9v#_&e}&yv+$K$^UpUmG{2`EI{kWVCsZh>gSAKj? z;oRpR{N!Nm#mNn^mZ#dQcYVh-9-G3sPKO0;qMn4h&x2L=B#{gf4DZ2Y81Z(?hvoY=Q--f(~1RD?6IsxA(xEJ)Q4N-fSWElN%WDp!VS28JDe zi$Ds2uCekj$^=GAVvb9Ga%paAUWuoRtrAd1FC{a@%Gkuv#K^_f(b?6|)YaI~(89>T z#L~^x*c`}pc5^a@nSo8Old-X*sfmlBu@Ok8tFfi2lZAz=i?Oq@tD&Qjiz7_0XI^nh zVqS78%-&3(y->Xdc=cL27o{eau$h8JcxGNoetEGb zD0(2ibxAGCEK5ysE6UGR0Ee$tCKme*4P6{9OIxnujbty?y4+PGo;y0vRouUffc`Ld-;7B5=3VE(+hb7s$)Ib-^? zsZ%CTnmD1queYbWtFxoMt+l1Osj;EHuC}JSsEZKEj1-M zDKQ~FE;c4QDl#HGEHorIC@{d^&)3J>%hSW%&DF)($8K zwIoBilny6@M47`pT^nUSzIaLBN>QPz!oq?;HYN^#W+vt^b|#kiGEv_=9#+=wBL7~F ziA+q~%T`VnWLvwAiFe&vfhb9Hd0`PnO*6mBpv4opSh$!DADzs{a{4s?u`{P9N9r(3 z=nG4+h+7uS>+tJcxoq;pCzBWi*CD9yl~Ha*Mez7#uioNn6C?jLVS)hgdQhbr_6O3m)!N zTY5yYK_G*hL&U;JhDkw@kxL-&nw6)6ffG~O(KcQ02QD`|-FSP{rcQgx+$i~vAwq)D z>8Ml!FUzVgS`Q9R<`7_0Pe|_y6JuvqOPJuO)Y!%;oEG)t>5(TZn9oTWI6swiU^~j8hT!C(ia8GCt zToU3|7|3A3F6s2+N3w*?v5k)=#K>s2c6pRN@ydKUHArXS(`hkfk`4k4 F)&M;&`sn}w literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_07.png b/php/pic_switch_demo/static/images/home_page/shop_index_07.png new file mode 100644 index 0000000000000000000000000000000000000000..0130981d3be1b3c97dcf8dcf63a5808c99189450 GIT binary patch literal 6087 zcmWkxWk3{L7#$kv?nO#E1wlHNTFI4KO1irwB&9>T*F~heLsGg!x=REEq*D-h`+nSe zXMW7g{m%K$xo4s^)s^sZXm9`kz=tTyzeTR?$ia$@iJSu)&f<~FGgoDO4*CGgPx|8Qvb>Eb5mbLWG+a zV*rqwM2@WX;=yNvplV`5IKGL%gy-Np<`a{-`S#<^WVx#h0Bm^%PCat-)zbuvV+K1t z=Dj#Zw|$43>va=rT}LR>2;}ZB>s`41kB!3D#FnL{onOBe-}K2DnvLiMJlgb_bm=`f z{tcA)cXPGb`I9B&rE!Q7`t4@V*rjSA-DL8!F!R;j1f_q?xKIB;GfaID^A;E<**28K zEnYr5?&4)3Q?y(%NB@iIC(EB3-1lfw8?S&GdnuF;NjxRS7HHQhY(y~6uAesmaNg$9 zJ3=|OA&kk1X_tdXU??55)G!ldiQ zSnbCBXDS>f$I{m$MVn!vq_`6B_UL>gkaQ)y zGsDj5W^WI9hAumVO=`xt9ED;Y17nWIrpyYzW$ac)Cy8ZY7>*)?GN~lJQWkg{qs^eB z3_6!|M-`1UQfy5U9|B%}{1?%#B#;_X2bG+~YXrBHh|q*7=HdRZ^c2WWpvZ;)aBrZI zj1&I4_oLjFa5+H=Jjmbmn+i*?&yk;ZpjWQ;HTSa=i_u!93cT_Gni|~-w6^Fgi^*DV zbdnH-u4lsN-f|3P^s>q@RhassatQ++ixBbhGm&R#VbC5nrj!zu2G&;MzkO8ZF9jlD z%G}KJBnhN^L?5ESeIhI*(cqVCEs3a*+5+uql4-?h=eNxJ+@)|KWg6y`;blvQIxNvt zZU(NQ@Lz~uy}ty1(f(pQH^f1h%eWQXYW-w?J7WKadWUF7Xb00O^QEj#e)ik7lCRpt zuM!O8D!(?pt%gRHkP3Nai;jm9JSNfgt z8|~5?4?luDbTG<>of=MsMP)i(?C8eCMzSWirRtNarRra zmLiTKaaD2E!SS*2yz%+0S8z#zg_nEqJ@^8AquJEJ$AG)3r0JU#r0$nNk^XU0yK}gK zsD2?#$H2H=u@X`FV!o}it(dsDMLk8mJZIjfx8|&AxT&<6x@Kn)bET@usVTtB#+=fo zxxcFSIHe;cpf%vrgCrJyrM?km7~Y4y+Az{CeYg-|m zg^%ryBUitS34P(n(HHdi(K`g*gzij9<9yl#dzu1@gI}Q7phbts zh8UvW-}?D8evg+HTd}&XTRM`B%WaV*mreLs`EjSalF@ePPhutG&0gk2(u5sBxMtw* z`5#zjyJoSyfp~1;k>Pp~(($fQFq$cWj91=Mt6+}}`8)Y^`E|IBfQD!_&zo1AQf0jM z63Zg3LaovRyw>_-b1(!9;;2F=%F9_L?CjXN@$cv&@+aaa?)C@DOuivwSKqG_J(uCd z6s5c*++yi6s!{5%Q%_}yI7=wvUYwJ9zlg{2?E&@JF!4`jM4H zkfr2z2OO?092slC`1Cg#&F&%)v{K~JF;!$Mlo{kfi|ngD zJG7B5Bj2-DQyWUl`&uj~t*5Q`ch`Ax3<=W9GIlcvobi{I8}K)D8;-876;}8%#@Sce zLYu%X`QIhJwObVrPmGI8YZqu=YTs!KA5X6}nl0QqPaV^KXulTvGq+;ce)AwT+_|EI zqN6rvJ!f?fxv#&Gu8J<(zfHe)GOkp2ayuGCn?`%UVkT%>XqlY@O-pLOO_=98R3aFB z-uZ|)@#eu7#@G4udEh6rtGw^8{hMbSH}v>o%kSepRBU0*Jbw?e0rA<(WuIp&!nLyR z4b2T(HO8c-<`35W{wb|IC;TiVq3`?VLVMV5dH>@~ip}|C93l-75Xk#?)pRAV>BFAI z#D+bg%SkJd=hn2sQ|z92yZD6B`8Ut=x|JPLy>EKi)nX=22c8EKk0~=6gKeMNva4E* z99oY3IvPJ%-|W-oh)k?qcKDuAJk8JLh)S+?T===%^xs@(H9apw% zw3}SY9LX+$*COYn4Ift*PgaBMyS#HRrdE}1FvCM9ACs;U2*DT$SqY;N_z{OWucbsq ze@eSQ?EfnUPg+j0=1@N7J&smUQt$=d&K)jHOl3}e%{b3U`R?Rj_;Ap5NL{@$&@({a zIqV}S@a|Ig{;1n~)f;q@zd@++%by{L{mJ%k?UmM#;`qZ zoXjyS5IqL2upMoE#8Gvu{=E)=W-sN(q`e!!lHoZH@ zE%w`%wUO zPAZ~{a?|Z4IPzWdCCa)Q&L$IucA|f3icxA39ddph{fwODIZ3Ulkd@Y^*Ke;jr!GBW zaTaq~>fsQFI_jMLi?a#Rxy8qyV*d*LaNn!IYpf>VuzOn!`#>>Db@PuYna&|D&jn7! zE?d_qHb)`6oUA+BYiuS8J{F{YVr?jZ2hHp0?H39VSLxabX{nBjx~p#Fzo`wENBHMt#%QVp(N z`G#tu=zcoLR{kTPk~Bj-AT~|VB*Gzv`Z+~MEH2x`rlJkutV)A)%yGH#>&LS_*wejz z>c3k%^gcg8X0)?fQ_zc-Q~9wZc;V}U6J2m~ufiBi*onULX_qeb$*9ZWMw&3;E76m) zRJ?Y&tx(MO`4jnl4foA2TCwnehu5n$gybpbP)J2S>N_NN0vMe!i%@lUx1naNhmHWB z!)9{W*^eH>I%}U%Bwnd&X`zy%Xh1OLjC*RzYJuOnpqG^R`-LiF0jvGaYX5nliLrXQlMN;5P^h}r&F;~7-(K()D6 z0H`NNjWEAC%6nnMtae zI0QCoz4iH7J@OrV)}DLgn;?<(>0J*i`PctJZIRax1^Ajxs3~WiA2v47xnsB_rFO2{ z)Cr-71wHhTS5TJK29Nb12~22WCN>fe!Z6%z&jS2UuAFDbxvleSTO$@8+~!Wx`fw-( zwr4|vSb?X%tr|6k%R-69zIXWC4D~h0=UE+iR&4UGBClvGT>xMrD1b(#NHP+`lH$#f zqkm%|b%3Nujq&BrgO<@}8};4X^}ttUf!^3?JN{fZYotyJ(Yuzk;eb|P34ZoLmC5>bK zc;7%?IXKTEM{9Q5bG*S>(zY(=)+F{U=EoT`@nYyYg7DgzI^@ zzOksKz9K(W*utTLwKc1w@JiT7W;autZh?!P9rZi<9Gas(f?yaxDbOof2n@cbrx7^) z-$CCdlj?QqUsRTO&YjkAhZ3PSuYl^;O!@hJl0h0);d$&sV`G-dO6gYL)|@f3^Vmak zG+0PN2Di;BQ3u^1hBR{6$Sxb)mSrJ<*m9J3LT@0mY2b7#S2`>?Y;;*uE7iV->-z_e zUiI;lo8qD^E#H}8$oZxKS>0#9veEI*!2j9$skAH07FT$0M56%ha{Fu@DVT+q8~B0@0Ki5^&3+lX{W>ZyDlRTAY(&v2lL0$>kg#xTdsK_es^_G6X5W%w z<^}!f?Uj15hoy%dW@xANfziJs#99TZ_@evO$|&*#Z8faxPd|t2>}N(cFF6W;)D@sa z*yyl=G?wVUWQn%~4gmp@J~@#Kho3?qP_jiwVNBXI9?Vdbu*A%B_CF0^T7pRGRRslw zM3!iU>+UKWe*DP`|7oca`8Ai={$!wu#<|jqHO0<{MoQJ4g^P*)8@12xcD-$p10>5CK2t)o92R4 zy&?t3aO_4Bk?tnL&~^ENpUQG)>fA2p^LzLGzsNl(C-u*6G_oJ8 zMMTzcd(hJ$XwTNp>XDHkVo)=Rw5`|n+>v%@q@ZMN2HI;_sf(;Pcy_uEZ07@Pz9yg> z?3XuxHHK{aFd`ob`mo+Ds-?X6KibzwbE{s!{W3XdnPgx+^;<(L!``Q~V9QrZv8m)$ zJNGCNdWeoL=N{|9BimsEYbfHq!JukyxykOeWCxxk$XMFa^xe7naKql|9U6g8xZaWq zlkpJ<#;2YCNB8}%`uynuw!~~Mv`z{bFUJa%9e2cY;+U<`(%c?ZQP73*NE_j6)GK6V zWpPhR&t83M+?bw5ZClH6k0`3CA;QPUwpHzHCVX09;v4$eNGLE z<_2Ay9@wFrg-RIE!u?op(Rpif@>`ASYsUdzrGV?M3Tpr$||oDsR_JDwgH zk1NkajE;)p)3F}bB6LY3K~FgP)=n)WGwL1*XAf&amMSZZn?l%^o19wE@&A}miO9G&6QsP!6-}OY1ItR?cRry@Qpkr2RXc?p zI*%sm!#xoy9^#60DSr)SFd7ssBeMx)UOheSh*u6b+$Xo~n)Y9Y!~WLm)tKM)5K~Jw z*`I%AY;1p2FF#Jm_)-^<5rx5PPM@|m>|y8m6x92?S6ZG*d}hOL?!j&LbpIwpWb~Ww z{~7CS>eL{}UKg3Tn&%MRi1y1MP(!ZlmLi=x_p(K>Bs*7 D!6&8{ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_09.gif b/php/pic_switch_demo/static/images/home_page/shop_index_09.gif new file mode 100644 index 0000000000000000000000000000000000000000..60a9d20d3c86041acc310eea8c44c83f40f32dcd GIT binary patch literal 1703 zcmdT^S$Gpw6rLu9mVMv1=@gNr$!uAg&`{FM1gaKlse-%HWT3H4CQha_)C~}Ks0yOh zq9Tjb1u1GWVnUIKrfSeusS>n>2AYNGjyE^P1R?16b_)W}HwF*42;#Qq;IRPTd|D8?T0|CqFna8CTr|91 ze<0vXoITso(JpkyTKxQ(Xt>$$^?5uzzyI)lKGrR?$Aq@H5ajt#XQCq(J0p@u;+;(g z!)9MMbtgI#iC{~l$>$N`(G#t$U7el2KnVE1jf@L}mK79&1jSL}KPT7i zq%37L2bRz)Yz_ky_Z@&ho7DgR;$ed zF$6_m1cOmbfokY8OwCJ9h1dC^Pbs@=7j7GnhwTYKP zl@pAm!cIH5e8K>UJ4&m~s>fBR3L{9PiA2>Tj-uHZqSBd3Tq~L;a~_`LxDqxGS8GVM zio`JqN#Z(nUUoJ~;3k|zjTm7}V)Gp?j&fM&q^?cW?ZXmR#p+EgO>qoc%rNE23MedP zIL1}VI6>1A4LEbD&0%FKU9+U?xs)wIv$mDA)yy(>u=jlRwkznPC}Gs8NJOo@6oC=b z1 zMFPx0=vKc4A29qWvCoH`k4KXJUR^@s0|g^zysZOf5wzHV;%>dV8S zFFyaQG5F~xhdvG*{OCZ#e!uU-eIM{%&-?GaySIMNJG&-XncD=rH$M$WnZGH8X zm$%fu^kU5m&u@Ni)5d3?dAfST`lp_J;_=5GePrFkYuBuP=)ni>zprYQyK-d(=VI@5 zG7fur**&(>70YR>rG&cst~>9z{kB_gS+?}%n~Ikd-B`GIQNaz@Uzfjdfte&sdB*v< z^9(t2^}1}WMycRmhQV1fd96&AHn3(GUYk;1KdJ^))YaF@GioNM)a~3NA3C9W`qaIA+O!%V zy?;Z490~!cW46?f)>Nmau20{SGNdguXT1FAfLvr-PXG2jbwnmGvN6`)Fa?{vYiFV% rb$TIiXtauJD%`wv&B^fYWy34Z)vYW^ADA&{?5Wj-+tc>V2j*S`8w_#y literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_100.gif b/php/pic_switch_demo/static/images/home_page/shop_index_100.gif new file mode 100644 index 0000000000000000000000000000000000000000..732c649dfdf52a2e384206437ce3f1a6ff6d8fa8 GIT binary patch literal 6042 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 Lnbwm?zz_ce%&`k# literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_102.gif b/php/pic_switch_demo/static/images/home_page/shop_index_102.gif new file mode 100644 index 0000000000000000000000000000000000000000..3653d9f8a8dc74b967e5284e6e65ce72117aa322 GIT binary patch literal 6346 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 RwFxe^Kw_Y$3{hS=t+lP* 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_11.gif b/php/pic_switch_demo/static/images/home_page/shop_index_11.gif new file mode 100644 index 0000000000000000000000000000000000000000..745baa73e836b159c3af12985e9a55886670c2d5 GIT binary patch literal 2194 zcmeHIdstF;7^ZTKRj#G&Vr%Po+Qpgz2Sfz3M8L9THFe8cyAYg`B^(B)Y3^p*tlis6 zGf|JEHA3w&%EU`1RAyx&VhbUeR!dYgZfEzc9W2}a=;_(BzjyvP=XZJE@BO~-_kF*! zI5{bnEes`vkbWYO{C+=<;|_-d!!VD>qt$9lOG|OT-)^_}^z^7ys?N?%0%9_mYHMq8 z+*_hj`FuWtW3$<;R;y=p&^zMP)*dg#um)X~Mx*t(oJ~g$s#GObYmc$3_gI}?x4-g? z#ew@h4fV&0O4TDngAMidY7BF`-8k;oXf!zPX}9(_*B$nF{WUcQdan-l+q!G3_Nps1 z#`f+b_070%)Yy2azNz_ilMchwZKsS@OZ!E0tKaJ`D=Y2lGFvQ`fl*(x@oZUf(b)?Y zmk)RJ+OG__9395ao<3)P_kgXVN~_h^)$8l@g#`t>ib_TXuN4*+j`;9$47=1nc-=Yd z#qqr*#g)}fX0y4hq(rN0P?zt)Dr#KUY#LpY-gp74+;_xivf1r6yRG%S`Q-6q!$U(S z^oLwNzsKimH#BLgYAV#_#=4ry;=*!ux#RmjgW*)C$y8lcHR{E^!vjS{Dz6V8u$zaj z^_*xic6Xi|8g^Z_+glCIXDyDhqJj~RuehYFy1K@FdE==5AZxcjkJ%-qbsAx}&?d*I~0?K3RX*>2j0)fBszt!f#H^NLdN+ zg{YADE?AT!7m7B*D6kIRAd$s`HyTfXfJ7V*u41OpQsg{1Q?evi0jK3IPZ#BG6tTtN zqJ_YM98Qi@E`?DckR#2KDLFaupiqpggE_=FuuKJkF$lUb9^?i#fPf|sQNRF`LW>g7 zVrW1NM1dI5EEX#gpwl24l}4vR^eBkMVbD1=8gTmo2{nayJtvi)bX$v<#eKduYAUQmHYr3f z0iQcgCUSRgp#YHZhOd2-+(ZU5M!;m!8T0^Cz+f{IV`Bw;29F_txO6^uoSQ6DqC%Mn z9@mu+y0^K|J-Hm70v4i(A{{}p#w%cDCW0c$OhgXw(qe#!RT7yP$yUw_9M7$2`LIIr z7A#IuAW~o~zZ}V3^dX4PWk(BWOx7(Axb&DrB6enUl0Xn6h)D!*bH)E9XH>!&YM?m& zQ7q$2Lr6?@d>SXpU_s(5$NuEK(yJHGyE`7z^m5Mjzh)kNb@eN7lhV`&mv`+Z?Yp=et_T@FJGgiIyVtQKY z3oBPFPg(Z-(&QzJlLUNTA~#{t!uSPo9Cj=#h8fME6KzR}ihOSVyohI?dHSijU^p=6 z$tPw%J}d08M<023W@yNaho(OmJZrH#CoG=x zX$=Y`SV%$l#m12g?g_%YrE9Xtt6N~h#JJ!cll#@0eAB|O&gK2y26jBPe4(%1dL{FX zGc-l3iyP73I&0R~6T>s&gdcO`J%K1AP}xwF*UrcMV_igxA3wZYeUwu@}`BXh-B{$z7kY0dsRkb zDM$`}a{Kh$?&OdJ!AE3r*yq;h*SC?kzw=12z9p&4ct59NNf=5?*a@beN}uj=9hotG RZhphfpRYbUxi^m#_ZL|VX?y?x literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_18.gif b/php/pic_switch_demo/static/images/home_page/shop_index_18.gif new file mode 100644 index 0000000000000000000000000000000000000000..84c0db1ce790f7262f3a3ef968674bae10b51146 GIT binary patch literal 1664 zcmZ?wbhEHbOkhx8xXQpVlOe62A)$>SYAQoY9D{u*vsE^O`()hEmIhrf|)Hd z7+iyx%_lJ=^)kdoG1zo4L^Ux-bTP+uGsiVDM=($iDE{Y;@C{IKNi0bO(l+)L1&PVo zsU-?Ysp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&Psj#ZZ zEyztRNmQuF&B-gas<2f`Ovz75wF0t1!um=IU?nBlwn~m52?day&iO^D3Z{Any2%D+ z1`1||dWOa(=H}))3PuKo2Koj@`i4fjhUQkrMpgy}3Q(W~w5=#5%__*n4QdyVXRDM^ zQc_^0uU}qXu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY z0?5R~r2NtnTP2`NAzsKW@b!fooL8&|_K;q3ey)B+Vu8M)o`HUDF34YC)x{-2sR(Ca zRb3oXS&*t9lvylcOS(cjOR+OKs01jWPOf2>r8oD@I znz$O6nnPURXk_LD^t-8vo2#pttC^D$RBsA7VWtmsj6NuFASD)<5HJOTnDC?z-^T+pZU%!0*^zp;{cW>Xke)aOj^Jh<=Jbv`>!To!8@7%t1 z^TzdSSFc>Ybn(LZb7#+-K6UcM@nc7i96ogL!2W%E_w3%abI0~=Teoc9v~k1wb!*qG zUbS+?@?}exEMBy5!Tfo1=ggipbH?;(Q>RRxG;umQ)5GYU2RQu zRb@qaS!qdeQDH%TUT#iyR%S+eT53viQer}UTx?8qRAfYWSZGLaP+)++pRbR%m#2rj zo2!enlcR&Zovn?vm8FHbnW>4f5inco>FQ`}X=K5j3aLe-Y@o==YcXW1j z_w@GlPw3_0#Kr_c%-Ye|-3lFzH6%%{IzER1g^S4IS zoeF_u=RO6-DieuKDSIbM`K~f)FIwt7?WfwlIhyNK&(3DZc{FEb@$%EQ^Xx*Ic%zCm z0w=ij=lQJKqI7u~|9mH3jnb^+Gk))ie7d7=0gJGTnv8_^wlz05XIx$tdwSd2Tb!zH K9xDV`7_0$&heB=u literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_19.gif b/php/pic_switch_demo/static/images/home_page/shop_index_19.gif new file mode 100644 index 0000000000000000000000000000000000000000..ade851abf752634c069617af5191a953e6669d53 GIT binary patch literal 1253 zcmZ?wbhEHbjAu|_XkcJ4Hnnwi_f!1O9pM|G;F4I92&8T7D+&^mvr|hHl2X$%^K6yg z@7}MZkeOnu6mIHk;9KCFnvv;IRg@ZBB zbrg&Y3=Q-RjPwnSbPdg|jE$@e3>2V1320kUN}5%WiyPD~AkS7Qqokz3N?*Ucyj-u` zSTDaQUEk2s(h_8bk&!M?g>G?WUP)qwZeFo6%mkOz;^d;tf|AVqJOz-6iAnjTCALaH zmqNUdTj1*pH#o0Y59}emIIAz^b}9q_QAYKPa_0 zzqBYh6{uVprWqJ^_$>k{1iHq`zbF$JDTz5Q`N^fZsd*)yF1AWQ8NHOu6f0vBLlYwx zS4U@8LsM5{LqiKA0~1R(S7UP^*V)a<7-j}Gy-vpFrY`2jM#e@Uovy}~rcM?Xt}e#T z#;%5rMlOypy`Fi+C5d^-sW5vpf%Zc68sgP!1N{AbeZ0LqJ>1<~U7Vd99qjFF zZLF;fMdwOcHnT%4_bAjUDr?Aq3EV_!jLgns}5f#?t}54>)lnMjNt=; z=k52r{hue^CGRTODpmA-0QB`e3W8vbycK|pBT8`$ARqwMDgfS9%qqBUS)eG>3CpUL z*TRZrP!+jMF=3hlJ-wB(tQ0ku$ZPv`GeQ0`dxj)*H9-#XSvp%zYXyDhxUCJ0?;cdf zi%MK2dv_2$6`^934b7E_icvBhp^_l0!3D_sYKkPPE^aYFCjG3$Q`tR4+Ojo*57Qxq zj?zSw2{T+I7K?QeEX~jq%~A{-VqyZv3N%gBh=kc}b)V2LW@@>hlpt$OjgF3nN4cUk0|G@5jR1?N>^Jj%Gqoq@Ve77 z48O0cx8wF}Yh|qK?F^2UHL728tPxw$pnFFh3}<)eM7|@eMtI!T;iJeU(NabX&2;<3 z1PLu+RaXTr!bDh6N~R@-mpF#$X6Z;gBXKb(rZXw79%DUhii`1LjEi!tkCeDLpX%Umw5(En1NIaw*K!J0nMe;riHC=D zQ?*8&NBrkm?N-!m{eY%sY|9|3^A+@U@-vK>j7KDzkF8daWTPqAJ0HnNQdEkj$QoAt zKQp6XF_ga?|5}#13T~j!HdY@BjpNZwcri9S4ew`gUv=SudKR7_;#~#@0dn_*t`XLt z8XQFsXoX+HaJP(i7T`h90$MNx2PlqUIO3fHMZd7M-v{KHgBzg+`;QJo15GUe31GgZ z?%sq2?%9B#!RA)5seKEKiGsj}x)HXG0t|mp4lqv)zjTabTfJ|D>5qS% zj&EQ1?TeRZQ-`Ow6n36?>>V6EnkzLihZbkh3)hz>)1ll->t{!U%k#f)erQ{kKYwKI zg+HI{v0hoeVLY(#!Hl!?$%`fMw#=OT>n$`fvHSL7%k`}X-#9#*qyCiY23GyLgelhZ$Zw5#xZ=bK-?hpxQFk@ri(x6W@o jGH_dIOSWA(e&*A!a_v{X?P|{7nBQ?K^L|G==Y9PTSw*L& literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_30.jpg b/php/pic_switch_demo/static/images/home_page/shop_index_30.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2c5a3fbb40147f71a1ba0717e21586512cee0c8 GIT binary patch literal 1284 zcmbVMO=#3m5PsS1KSkVAy$B(_Xzk{A{}Q^^-AxvI*jm~`d-0GauWe|P7m{o@ttf(m z=+PehKk7+oJ$VqchYE_G^q{p+EFyx4;>Bxx+3t_XQi=nC_h#msZ)V<1f)BwiIHLH* zEC3@T1E32uCHM|va#>qg1_WrsY8`-JH;U#x&z2a*a%ojZGmzGh$@r?xa5T$+p<&-v zwFT&rGjPtZveeI~&neQ-v(!|w#Fp#=oHtIdIB;TRbW&Sc&_taYK1mMwl5g53^igwLUxp~$L>w~(cBAuBmu8Y2tHfn<_q;~JY{$rML(LL!|`50X5~u?)*I z93SV>lE6zWOV)(KY>qxFjmyOv7rtewT2Ylsg{}xRa^@IL6vZ$G&&RPx++DUj)sI_l ze?5W>UCl9U&p;L#MpS1|*~?Nm)4dW*yHsifZrLr<4C|_TyWTi#rqR;dom{pdGY(x; zb~K3H`|DubyZwnmN1Tmx#xd}tsEabv$|khD5jjg?3#}WvBqX>5FDto%!X*`f<1##( z5Q~bC#@9kIFVthS!sZ20Nho4Q;6tP$h{=2=qsT%*P`Df~=jzxI%k@-CgLPg5^VYEG zeX&x(fvSg`NrV>b6EHT9Jmk(Jn=DME$YWE6rK5^_Jba$LYGvpcOHeO5$Rw-%m5dhr z94F_*gu*6k8RYm>9@m~s6cr_CZ#hQj%tl%T)jS`q98Uw>1 z{lvL&^TGMfPgjlI8}E&eEqU_ZS-zA@^1UfTl(wzR(bRK?bydIMvC%gW5=d*KX_u0jBgCEvj?OY1B{s4SITh;&o literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_34.gif b/php/pic_switch_demo/static/images/home_page/shop_index_34.gif new file mode 100644 index 0000000000000000000000000000000000000000..502052b730ebbffc7a384c3a83af9267dd9ee444 GIT binary patch literal 3866 zcmbVNdpy(a`~R4;sT_t;G$YT*X`ACB+iXJ7%pr6fo1A8gVU%KP8X=QHkwX+xA>m1B z4)stvhl!1L6!ATJi+ znPwgyC+mF(*pae<5)b%tp+Prq-edyX6MGW8@tEi~x``3kqxo=sPhvEV9Nm%6k>{rp)$CZ_pFO#3=K8gea!C}Dv zn`o|;f8{uY%2f?oSzh@(`k^`LvUo+@5MO#Hy{0@Mv)KK_8QfvMK`2)zC>IqUD@9IT zzi*(arz5BSdffT>nQxZgZ=9%I}^uiFnsPn(ve} z*!HY8v1sAze6-AtmE|Az^P4XEq_aW34~p+RI^UY-l=P&!<8|i?hMfD$mZul@pFF0v zHxclw49czw5uCP({WkSw=FRlX+fQ%$hO?2ZrTOnI$10cR7b|vW_LQ|Q%+4=-`L^(7 zesT8O^vGn#sT(gEA0Ckj5Q~3IJ|DXhmOD2k`ub_Mgv>vrxTC^1b44tU1HA9@ukumh zH`%2_o&6tvAHN=2@ZtA~r)3?zmpdC+rA_e{@1$MLu#dW%eoZW1sSPivV-yv+b5GmF z7JH`VVUvoyxQC?!GV~*}tyno$v2S{ZC;EokvTNG~^&D-=Mg-ea z;Z9p&4r~mY&ZN^=6d0Qx85M(JJHjbcMi31nnXfKez+r#7up%7cxYZ5VDyK6eng+8r zw=@g3w6TQQAkC3zD_dJzQy9t;X=!1JvOuEDkhT~!3S(&r`}>1S*rKT+7&5`-Z!U@D z2oGhkm>3HSiMY+<(dLZkgBD18d;8TGD3qDR!z?BtibY|YMa3BWj6k5p1V@K4Sz(MQ z*lI*d5F?i52$y8~R|#~chsQsGqhieeEXX{VLAPL2m=;KLOA9)EwXQ$CV_0O`|EKY< z-Z4H2OqvCm7Q={*4yH-m4Ss?pXZPQURvjhTV0K1_NiKyFNnixW(rHmFH-aNvvSUsS zqhiojNGlY9h;t?)t%+zP(hg;5W$!{n+e%Dl7d-lBjDN%8(e^|uqP;U3wTdL7?XB^4 zc0>Z&8BIjuPz2mhtXotJixL$~`^g(7;r$zn|F2k#b2N>@Vnq8e7?D2}Kni8B7%`y? zCd}E}28P%b7DZ*m#~80(&tKINXwhMDG^$H9gAV)id@*7F!jD7}aQ0S2OKaP|GQgp1 z@RHiCtz3vi8=?&!{x_ETznqzcBpHiUar}o^elAHAxH|nu`V!-x=AlJNIwo4u8dBnw zAInSM7Z>KgeVzLg68;zrT3i-}kKd>66Eg zdLBOL?)vTiz0QvIHsRgYJGWbI{o35rc(dU~eO>MKYgcQoR997AzEn|uv8=SD_(D

      hj_vMluG?IQ1ZO-B>$KI;VGG9I&eq1- z3XPJqrMa2uW)ow?FGiaT4dD8)je5Ep*6V0PwKO##>T0Sg>(;JO1}iBl$jiyfNQ0yR zKz~t2GKv9H$&&-DzPW&c7!V+!uGt52xeDqgdn#+aMs74 zDTY{TyVaL>pGJ6Ns%Pse9_CpFKWKoWDjtDt=q^?5(U+bSW4Vbn1u^BEs3cN37Fm8u zTR<$BnlNstetrd=cFBioL_DosV?w~^jqkgz?+h8~?>=qvqKP?9?oU_asmQ_ir7(?5 zInpY6>}CHPqUx(g$2TVXHsoG&Gk}^VBOvtQruDY{*0tDAIx>cJcz5uCcsJrvbBXE zyaR&oLWZaqs|vVlwjwCUAsnETryk@#%G(e!Fq*2DsxZdaIlEAr20yEC#>;qlL1zA25C-Z3gxE=Ys1R3U85DwfY!~yxWJ=)z;oLZp)f_yqDurM z84y(`@`y&-M)})vj6({7Ily!2`{kUSD3cy0XB#MAMG8LJJT9$fa8+P*F8P9SWx??k z`%1nN;@OF{n+QIS&0s*Z5EX}=`%OxoAdd%quL0VX&MB*_nhd&WgqB{`N&iq<)mUw$ zj@TfE3Cwhola;}yP(an783k(B#~u;70frMW6GB`*X&|fG=HrLzrj2$%D-z zEP|g+m(H0g<2oi_bGN}#tRlNGfKUCPjUl1oM7`F6wn#vCpiF4e9R_3}KFu?oP`4cY zdk_atDOrd=5GkvP?o*Z(_WIe$>x6ZAZPN)A&IFg8#H$Hxw?F_8`b_xk6NCY#MCD&M zs0pMhPm2PI&wiaEpB5oEjz^kIVVx0rGeVB>Vx=%;-5%6ZU0Tq{5D&6b zH1vIFXQ8TKJt?`wMq_6K^4_$yt-?KZ?`809trmGF*+G?Oku77)2!(qZAZMzqZuYLv zGP-P0v!T*fQ6Elodqba>z7w>U>!j;&;C|rDh2dbWKrAA4qjqAOtcG7Lt{Jj?<0wz_ z*iw;NCEzsnDT}?I4bp^j(64ao68!Q(+QTKhzDI3`UR)X09RbQTkZpk>BBCaOB%L)N zRM^@K+-`0KkQIS1ER_qIu^1B>ggwmivp6w}(QNe|*Fr zZ&10*KR${J8o_H1keoM_M}gxrNF#E)nzxdrGQ-##2-Qulzm$&>_DqdQV_@LRzQ>^& zY@nDmhR24L(qScdC{v#2rKg7Xb|q+a9nd!+;lNhQLmK7G2M%Kq$~y-@8%qv!t~373 zc4y&?8XT)GrGnCL3B(f?Ce8*K&B+>BZYj&GHkRij8Bl=;A@9d#NNYgow2?CcCX+g#&DbW=v!_Z_5qC53y*qOG;pOCypx0Q@3$ukf zy2c&20q%gK6}BGX!j^}@P+3wNMrA>PGAd*eq)#!H5V>XI)tHUGS%0Kb2(L>#P%YyZ zK3O<6v45lf?Dn^%Q)~RN`{qWN@}^?E`P!J!5YKwyDSI4M<8}$5AFCqiaQu0VO#-dZ zgqN~ep~?rJMnboySu~`N;;mQ}#>Dsc`3Ck2fUH5j zt0`hE4Ptj==iAJHSIX?2g*p~#l-hPpzh6))g{9!#BkiD;?v}yVJ>E3hRYwcE%?B?60U|^gJsUgWt zI{Gt%&If1}M(Eoe)mNq>_KaO9k%Qhhzsm#ybtkY5gJknf2oh1>E(h4L{5GRogB&77 zU#X!YFQa^sC@-U-!ncx|;drz4J~$`!}EprK7cc>5U8R=x#P&SMg<6{uE@ z0QqS_LiEBKdsT5`shz^d3csp73uRpbUD8j%xsLRetc|U7^jLS0Y<0JCI;PsVhWk3KuEaiy_;L$lBAkA9ZP!qQZ_DT3+p^LP(j6m%Z4VECj9qb1 U{HO4Zo%)O2aqJaU6=2K%0T=3j?*IS* literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_36.png b/php/pic_switch_demo/static/images/home_page/shop_index_36.png new file mode 100644 index 0000000000000000000000000000000000000000..913eed429edc5e5439d46a2db6bf4ad0015225aa GIT binary patch literal 1537 zcmbVMeNYr-7~iB*M9E^r^i18>l$i1M^FG+^F1(LDyczDmgAN#yTyGcHf!p2NTe?FT zzefctC^Qwz)D(4^bdo{wBN0V`z8ukV!W4(8L1!G1EX_h|4>{`($3NPc-S>Uo_xb&v z@2$@EWF#hN69526bj@>k)fHA>UHoYEdtO(tMO~&SbiR@!7As*!<^U@zF5*B}fGOd; z9K%)yyErod#1-?o`AWV!lk$rJn2GAZk$|M40l=Idkr;m&r+|yN5?-)C1IJn+kY_DW zp23Z}B|BHj&s!{WIg35H{>5c}l7-S=2h9;mB?xc|14aVnLWqi3pkZE0-A9iR2pm>X z$}G?$r}Ev|pk0(X&;X-4KWaolBL-uH-efY(0dW*V5fn!-T!)z`0;fkc zUWaqUmMU4GQbmy{1PO=3aF~Eaxdg#Tl8kcTxK7p3g(?MwiRgsT%ou}%3;AVUQg~4S zqm0ZVu|lyxs;7@a2uN=CV`3pRk|;H0NQ99P3`UVaAR5=Oc1ZDZ|GM!+?NDx|#35cT zBv#0NwI0PYV_-FRPd5}*RK20HWL_-_Q|=J`6#-6ATn-DQ-oPx+QiLAU;||(tr!fOf zU|1TC>PaU}m{ig3v=K3mCt+=b4Kt9WiNK>snjj6fv^3g5*a;f5;tp#J>k>i=Blx+P zU0$_oBS>0Llg_7NDZ9)uiYVubVtK3svP(rp43&x!XwNZ%ujcUrD~3a<(egZs*1^gA z+Z^kZ#Q->*Uy6T%eGGG0Nj;4kM!dJ;Mw=SDLGPq#BW<)nBUtwTdH7y-5Ht3UfKExsjfWTfQvInLl}L?~?d6Nn>GO4faK& zzci`)dShYdE8b~_t(qNO+v}IDsD~3)_U-iSggo8*j^2MEbBDiKyU}(`vs)Sbb4l0K zma#5D_@<+B+3oQzq2-+AUe%0_iUq%ZUD$Es_X~_Pik&-YPG^6?^Bc>w3tt=p3a=4+ zyZU=4g8k&TW=>0d@7|Gz@#|L2Iu~v|Ip((ZcwFzvUNFgXGAUj2VH;Q1 zc%F?jYml}}^Edr5z9rt*HboogJ~d04a2)t+>9T~x>`nI#y+GbC&zwz$>*%^Mhpkr* zoVYvA)UtLvUd#_{{k+rCbh_qFeLA3Ns7jCrsmztb^&heReLGF*`F=)0Y~oc<16L<94Oo)G~vcGu_Rr7xB7!^u@C-024yw?FzBn7ckrjK89}eDz4p z8uO@gR7%02{=}BJ=k(QiZQuG?SGF&fzRNQoIy*``sh#DMSC3kZ3|ca11o?vbN~PV literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_40.png b/php/pic_switch_demo/static/images/home_page/shop_index_40.png new file mode 100644 index 0000000000000000000000000000000000000000..ee663fb7236748ffd4c2cfadb6143bd89c3727fc GIT binary patch literal 1117 zcmbVL$!pY598TRGEiMPOD*B8ID$Zn^r3oE%GRfFcr`DN4=OD#2dF_NYd1>lOiIB_25f8Q$3U(3?y&K@B6;rdaAu`M`LJt zh@z;*Y^#zdDaTAZuyeFb_3jpzj`Rp{VIy zX0e1zx!sbEtcVuaM10F3Xo_mt<~y3+12O1?-KL$SzYgA}foUY^{jnUIbJDPEwpLwO zsJ0dLYL6}&^tP>_#g_R~&F4lZPJacXd*auC;YA$=%dKfg$lm+T)s} zC|a+A^nMH4IIARS@+V@Lh9pF}D6gogw93U)f#aHaHY#RRAwiDmj4aeSCd0~t%*8}e z7We?E3SvxdZdMf`EvQ_IS5kFs*7mSw>#(kC65Sd$H6>O`yHLZ(Eh5xg?|}9)!pJKl z2c!#euyMa>8>r%K3d%DctpZ*15HvC_vcOn=C36yej#E-%RApm{aSu{_Tqd!{q8U|< zt8tmGVU7RE8AF_5g68yyL8@IaePj7vsi!Lp7V8LKl{B~|oa+$vh3 zJ7CU(XMHyw<2Q+wGv1AuCw>(^4j0a=&F4DGqf34){<*y)@nO-)p}n(4Doc-ye*g09 z?%dW(O+%p#{mdnosE?>KQU46KC=BZHr#In!p zXO^l*moz>aUUA?_!|yBkVq?rk4#}!Xmi`HwmMM!77!g!0rD!m!i4b-Pd_>AMkEQU>sX&9BH zj3@+1O_ZYPt}aa#6;XpJK}|KVS;r^3W1xnvMRn^~?Vng#@sLiiSHyU<(E+_>Ot4?Z zE>QYnpku&tOkDLlgYwKrt0K=DM`p&uHkiw=Y%QV>p_-B+8Xt|%dyo=hX&QSplF_u7 z7E7~rtoc7VVj?OXG@mV6a_ieR^0J9^}x8@#tvWKKvn=*YjC5Rjj?dcj>^Y zDbS*{zq$5$AO3i2^}0v$jdK^d?n?vP^Fx*PhaJ=D$m!=pSI1_5ef{+1{pP3LR|MgB z+o4TUO>H_n)6_Y0d97I9ks+PF54Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?{&CLn2Bde0{8v^Ko2Tt~skz|cV7z)0WFNY~KZ%Gk)tz(4^Clz_GsrKDK}xwt{?0`hE?GD=Dctn~HE z%ggo3jrH=2()A53EiFN27#ZmTRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdpzyaD(%Tp#cR9GX09g0)0b01O41wkiWpHi%Wu15zfG>x;Uh=AXPso zwK%`DC>aHCFybnZQU%%yG$2F3nBNEAe!(RRYTBrDUd98JifI z7`eDQI=dR0x*8iAS{NCaSh~3yn*+JdZcfH9GqCA(GIlj^Gc|NIHUjB%HMTT$vaoP< zF?Kd~HFPv`afIph%quQQ%u7y%*_#Qp7pm6vMGwTcE~!PCWvMA{Mftf3;PAD|#A3gpp^KxXiK~IBIm88y zMrKYxznhx4xw@LUnmH*!^`?*$X8J(K=z|gmQeuG#0aGA|2~YY!4m|Uu<^gj|5io0< z{mhifz`!Kw>EaktaqG&=)7q?oGRNz`t6Z9zGhvUscVX%K)O1bl%2ZY9KrZgEe@xnD zQ7v_kZc6y}R?w*!cMw%k(i^h3LLYhVlnoGR?IG3b*^87-!o3OLmaVV9{M5C!%I)$3CT@ zBl|w@4YuqA;W^FML%PBn$}aF`ovi=ibi2j5Zbbs?oPXOY)Lt+&FKDbY-|D13gYEQ# zo541ozkA!|KWn_0%zJczsjT>N}=;u6KX?8-M>ji#Js`sQFywIE0Ktx5eQ`d8651`IPz?p?cv2hF0PD Ud+Q=xH-HLXPgg&ebxsLQ0R6-!oB#j- literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_65.png b/php/pic_switch_demo/static/images/home_page/shop_index_65.png new file mode 100644 index 0000000000000000000000000000000000000000..9942bb268c2d7e8001137491c7da0e6c50a066ec GIT binary patch literal 1088 zcmbVL%TE(Q7+-=xX#y$H1K`1N2?P_{ef6~~rF6Sn+Gr6=6S&ECcS={-on?2h1us5g z)B`c`#KD6cj5i}^WAs3b9t>CFN&W&n8BK^d+Xs3e9Nfdq_sxF4-}inpJvG@A7z|Jp z)sxRDMRNOc;7k`e*ZG}y`gr43YuAa7|4un09{b@?+Kqo~e`S(?Lh zg=>;A}YsvPcdXjGNN<{Xb85%T9@M4l~1~pfh1{vf+5Dl{-osF>| z#)UZ{5|76(1D@qrhUFQK4{>ox;3bv?t&b+&T%#ftm2Arw(UNo(V@G0`TCEnY31Q?e zFq|lgJ_pZ-h(*X-wXs$Y+1^l_L4ls`nhrLR4SYtej8<@xCXqH%u$)5Sh}ia8g(4+m z>YBrFVV1EhKd*+hhl}uU7{^+BrBw$qMd+awS10|b47I_eb|*XX4M{Z8b=M?K(UugX zuUOE=c_m4cKVic(Bq72@ctuTTR4%Ft9GBqPh?rG{I8ifMS!i<{hm|9Ok|9We_mQd~ zM&(38RfLS7a%o;kx3PKK!=>PcvHuy5?eRgI}JnQmc? z|EU>6f?@pO_-9z!PhJ)cKbq{z*%!`6p8wdpapu{b?Z?9(UTz+|`qa@IoTt|J&vz$lx5&0r NR9>A@Ud!|M{{U&WQwab7 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_67.png b/php/pic_switch_demo/static/images/home_page/shop_index_67.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5f24975d8e0fb204b9808b7860a31ac709b431 GIT binary patch literal 1066 zcmbVLJ8aWH7`6x`C{hPhh86}6cL9mSue@x2s{GHTnS1 zV-B9r5Q|LM^RO9Zyl`gBpu^A#93MN#12Lo7LR(m-NuxQBkT;32kuEeuBv0?~CqG}aY7;_wjRdXdn6-7?qW27O7d9_qB zbU_mgPT_TBjIDYhHa!cD{W`?2niF(Q(T~SUS^!Oqf(Akx;|W;mAdJEe@`1Ko0GC!A z&qm$wa@?L_wmJ-)ThOiq$OVJ?O3o4fIZju^oWbUc!{`;hppxA4xr$*FjDkv!u=fAd zj3L1=@o@YzEaN9Kfw6cv`b0Tg9_W#c3CL{#8>^_s(!HYN{qL+YAot6)YUtG0AO}XE&u=k literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_73.gif b/php/pic_switch_demo/static/images/home_page/shop_index_73.gif new file mode 100644 index 0000000000000000000000000000000000000000..bfc6fa23ab496f0843b012c31924105e32f77757 GIT binary patch literal 2329 zcmbVNXYkPx{fK#(JVoMIpW0}>#~oAix}yC3}Z!_J5Ioq3*_`OnNV z^E~_ZXJD|T)sR(?83?3ABq|n(0RZrNy?(#n=l26XKcCO{`v6b^R|NtA$hEe%`T*eZ z#DvcW*laeR&#%>L1KVDJS5%}@sr8!1*^ZUI*fl#3_c|D%`<_@hw+0*(s0Tm9pf$5VW~_mDkX8cvvdI@tld%-op54%01-Jq_ zi%#W|pat|i1_xJ=3L{aNIaD0T2bSS5=u;K$=~Ng#umKHVrZd@8Xi@?qo{UIFK$DRP z$V7BXN=h6Qg+LYq=0{Wa_AR3$UF77ZP<2e>6rNVN#Tow)v&(F_K z$WKgQvQNU1SS&W+1BHqQHR3tv8C+69JcAQ6?}0$&kl8dAm&Rm310G2^%(L877#QiZ z6zHt1tQU?MoP?(dC6JkPcmat8M zP(5be7_8l|0|gYpXmD?^Y2cxd@(4`wSvr-$-A_n`fjbEl8U>e#Mxs#!B0imnOd=*C zkr)&Ljm;n?rhsC4Mq1*$kC)k|p)tfXEH)_-6|f{GVw2J^7$PAtJ&}mSqX_tU+x-j< zm&71b=W%Hu?sHr8uiE0$*;Epj$g(L_X2%CiXYsN^&-_at-%k(f+OPJ=zSrTjlN zgM-1q1I_V2%`(3Pc3^;g(fXk9VtA+waAMftXaohG5RZFqcE&aRWNOm+cw*dP9~-qj z8hJQ8G&s=T_n^0@+uGF$Ue9fo)|O^-)4j%q`nuY?rW&K6x=LTE(`wYJit;jLsX{K3 zf;UP@u}}cMEIggzW?iY-`@D<>#weVdF_k8T>bpBPp@45 z8)dbeDmlZ zexH5h@S%fm9LW0JZ-28tb6*CLke-I$yJvUmuAMk6CM7uuJYsMx6XN4`yuLkl+iP35 z#K1N~H*MSyz5dm8QES(%j$E~J#qwpZER9$a9=3SV!qAZ51wjzV=D83^fZ_t5z?%zM z?1zL#L_zmL@fUAySzh*}(tLeuNW_}BOjaKxIEqcXb&|f}_SzNO!qG*AVGEDf8O~tD z&}+Be4vpOyE$&|eL+4ncIcIJ~Bexm}8_=283nSlK#fDT!i47sTKsj`t1`8niLcvxCw7$xEX zaY3Vt`00rybqOCVL+pq3WqfiaUmbPgCb48;)E4~x6Sp_R!@@Bin!g%d6n61iT5Uyq zlxZoX@YJhrd2qidc-<=A%Gjc<5s>S&?U%p!-WbJzbpO5$=N9LDwjiXl@9Or{UF>~P$D_Z#vNr4P zp=BF-5l0}QpL-ZHBCv$>d~UZbbEM KA_fIPcK!mkDVc-- literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_76.gif b/php/pic_switch_demo/static/images/home_page/shop_index_76.gif new file mode 100644 index 0000000000000000000000000000000000000000..d989ef52a914287647681d46ac9205e79c690e37 GIT binary patch literal 2256 zcmdT_Yg|+384qZcd1_2AN(Hpjb+a0iQ;C|KG>L+&-9Xk+ z-MXz#H@n`T7i+6_+IGE|b54Q~V@@s-?xCPS2uUOmVn`t5a(05^_Q792?AzWC?|I($ z{r{iad7k%urnESpC0s>HA)Uo%^*L%kM# zs|LAjR;$%*S1}EWwrOA;ih4XAlgZ?93>Yq>!7x7V=(oG4uG#E?xtQH_KL$X7QyiWtI_S7oeG4z+s&;O z8;ZiVp3W|;4UYSdd)>nZ%xJUO!cjaL4F`QLOs5S+@nQRzem-b?&OaFlYhh%3s0Tyg z;P`N-(}!V3x7&@h=sUW4@JO)lh6_RUp<6EBxMLy^LC_W$Ma^b&IEL%AXe2m=!mz!^ zgti*2{Ubz$;jvKXu)EJ@!^45^ExJf})@C)|=r)*oM|_?!Eev-Jj@fK|zS*eB(&=$IF${C` zcLx1a)^;;yG(eloPtqgDinp$7MJ^`-81bR>=>JxK@hFeKJ1-|1Uw_8|MQWC zFW*sC4)BF4A@MEPR3jIP_Jb;554cw%_sX#6*o5o<~<>h4pbSjNXq0%WddKN8@&7iZXRN&4a6V?>sm)Mp3;ybp8 z6^C4rC4po> zT%&LgbWp`16Q140$PrML8IlBBzJSl*F$AO_EL1>w6{LccRgfIuZOsKTwo7DU zs9L!p{(Ejm%Lf&bL!h`=0ZD=R{IVtYuur4$i&#tnH7D=32SxN;E)jbUvsfU=736Zs zcevvJC1(`E8A`l3{;OCPwulOhi+4+(Sln$MP)2l&f@qBdJQj_F=R&hH!N9ctmT$^C zIpG<<>2^8C9HaJ;;h`JX2M50IxApb*ba!=jSlh2z%qHUDxT?RRYiqsSLfnoBtiJT! zx8HpIudlxR;^KvWet!Pk+0Q;b^U3LtKl<>4=BD@Gd-t8U|MAwTzyIyziN79y^Dlq? z(;I*M!?B~UH~#*$-!&Ymulwz9UVY`)wTEk}4;@q~6)(#nne@Q^eUhrZFM(pw9^vj? zFYf%+FJJh@j_p5xe%sc{it;Vbl|B2j&7~#J6btw~Zc*W;r#S^rv03?fxj9S*ooLJK ztjs4jZpe7z@%8J{$!Wma$A0?gBR~1^n$(ol4?pzas^kamU%6uWvL7WaU2@;zMTrR{ zQd(&7{0*5IpW|;XDG4VfB&m{{NS|yG%cE(@yX&-#%a@(2=y10jElQ^v0AMJse&r?Z zr^mE)^$GWH+1*U*@)a(rNO^%-C_G*K5T|Yhu;%za?Gft66<=NCrPoHfm8M6=b4R>Dq%=SIwfVN zJSnx1l=@=9(N$bbzcKTbwd{;`(F)2VZlBwxRI3lMCF>K+Vu&fddAydud8yLJwz&BlU#6Sx*0gjdKB|~@lL3B^`fIH&s)=p z36HHaonKPk&|K7zx8cFAGGXTh@4JaA=D_Psg$?JBSC?XLUDdIVGfVgBm&%(qpC(_t zP}jNvn)rrv-)>J+>Ebh^Z|>YxJ~dpDysQ8?k|okDZAt$;qUEhU)v`L7^whrrqX+~j literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_79.gif b/php/pic_switch_demo/static/images/home_page/shop_index_79.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b9f35e7ca51c03a5a234eaedd5e026595841348 GIT binary patch literal 2240 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 ZrQAC`|N8>d3XAZX>Orh_W17LX{2QV&Ku!Pv literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_98.gif b/php/pic_switch_demo/static/images/home_page/shop_index_98.gif new file mode 100644 index 0000000000000000000000000000000000000000..893432383fd7e1311d870c1a7f1ae51b5120738a GIT binary patch literal 3938 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/shop_index_ceshi_03.gif b/php/pic_switch_demo/static/images/home_page/shop_index_ceshi_03.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9c4ea320fc8e35f2241bd6b38ba00ec909a134b GIT binary patch literal 3723 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/toLeft.png b/php/pic_switch_demo/static/images/home_page/toLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..07c64b648af523cc47cc5f8aaec8cf780c84c328 GIT binary patch literal 1314 zcmeAS@N?(olHy`uVBq!ia0vp^@(c`&aU5(wR_)y*El+yB8yf2x8d(`wS{a%uK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EV zetCJhUb(Seeo?xG?WUP)qwZeFo6%mkOz;^d;tf|AVqJOz-6 ziAnjTCALaHmqNUdTL3pUuNWFkzyQ;)NG#Ad)H48i38v837r)ZnT)67ulAu(Cd$Af^ z98y`3svneEoL^d$42-xmWsp?`R?bDKi6!|(A^G_^uuu%h$S=t+&d4uNaCTPE2+zz* z$uBR~1S|LTwerj>E=kNwPW5!LRRS8ImzkMj<>G8&VrF1qX>4lYYG~+c>}2L_;ArIP zXkc#Y;^<;#0n_V}pIn-onpXnTn}X2mh*K{pCFB+WZFWg5$}CGwaVyHtRRH_gDigO` z%yF6r)tiFbEfzTS>H{644~kc$c!mi96Ay?9Pqjb}Jl&_}0TX)>FjX%WcAE#xUei5Y z978H@y}9b^b=X0I?Lo}C@E2ZM98M*ddjpoP+v5=SQtS4;BgQ+XJv!7nMaU`p^K!|I ztHM44^BM&N5V{ zf7X5U(X#@J8lKmxtA5tl?O*r0>bvQhhjDJk{+GYJs<6p(F1WpIe&n>fu7>l^rcF;= z?ObrZ^lR4Es*bd{X-{8k?$GRdWSDh+^{OiFhqd?1Uw{3jnRR~o<(Eh6_Sf6*J#hZI z`|HXAdA7Xrvh$z+*kzsn?^ko#B=pN>+Y(!!e`%X5%eMWVPknzO0?KaP&+QD%4EH&f V?bGzw?*=NhJYD@<);T3K0RUaP^ojrg literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/home_page/toRight.png b/php/pic_switch_demo/static/images/home_page/toRight.png new file mode 100644 index 0000000000000000000000000000000000000000..78a6a5a0e74cd625cbc9f4dfb0a65b8f2b4c018e GIT binary patch literal 1319 zcmeAS@N?(olHy`uVBq!ia0vp^@(c`&aU5(wR_)y*El+yB8yf2x8d(`wS{a%uK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EV zetCJhUb(Seeo?xG?WUP)qwZeFo6%mkOz;^d;tf|AVqJOz-6 ziAnjTCALaHmqNUdTL3pUuNWFkzyQ;)NG#Ad)H48i38v837r)ZnT)67ulAu(Cd$Af^ z98y`3svneEoL^d$42-xmWsp?`R?bDKi6!|(A^G_^uuu%h$S=t+&d4uNaCTPE2+zz* z$uBR~1S|LTwerj>E=kNwPW5!LRRS8ImzkMj}Y6a;pXV# zZ02HQX6k0<0@Le~pIn-onpXnTn}X15gi|jlCFB+WZFWg5$}CGwaVyHtRRH_gDifz$ zT-|V*2i2Q`+bsq-_38s1qYsK#q(d)2-2-}00b>T0(lsKG9Ciey`UAM;}{OqdR_l_9vnD*$9tA=XJH5Fe| z!RELForlCZ6jy(LR{Qz9%jchethyGR{J{24e(i_yj}z4lq8@r4nPXY}?95E#^mEi@ z{I~ynHtlnTh0G@tU;XCU=DxxE%Kbw_Z>xCfHOb$_i!Xvzx}R4g0?Q z^2(ReH{O3=fBEGXos4tWUw?JJ?r_^YVA@mf3v<4&et+!$&R>f(<~2XHIlXE3!M*o? zHve8fTVJeu_T!H~z7-#5KV2Dn-8Fv4?{{r$fb4nC{r|2=-+XiG=DW32_83Y?{k(7Z bUm$@&k9XO=tP62EprXsu)z4*}Q$iB}`fvR- literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/landing_03.gif b/php/pic_switch_demo/static/images/landing_03.gif new file mode 100644 index 0000000000000000000000000000000000000000..510918a78a7049406492116681c780b60aa9e0ce GIT binary patch literal 2387 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/listbg.jpg b/php/pic_switch_demo/static/images/listbg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f42b5c034359f3ba1aa91ab04bff0bdf560f9fc7 GIT binary patch literal 425 zcmex=KdsYGy$Odj|JCo2TZPo7yjgY`3+ z6}MmSlQ=Aq!mU^@0aSP1Au6|i-?hT*(8X5gwm$lsxiLFaJSMS;VXBq`%aW8f|NE+T L-tRZc|Gx^ zSx$SFlBQUenwk~3Aex!PVp%iRI8fQWfApLCyZ8I!oNsyF_j%v>ja7vBhr6IQdRowHpl$-UGI(})p$G`z(Fd{TAi<`zRt<7>}q9pm(Mdd|tHvIh4mUEqOpscQXtjnS=2 z7cP>gs15XWDPfnC=`BXaj-%%c1L)gLL5hvRij9Xl`%ZWFMF`_qTpoeN-%$M=QL0XS zX~@xsK?-dd*cwtI;_&hWz)jMquwoHS%)pVx2&$Uu_Sl0)?)rh#&nBHn+ zgP?D1Z-H?D&*VoIl;D*byt0MO25Gf#!q41DscS#h^=_BeEO^iiDjW89n5kiFSBqrS zCp}WNX=zQ5JHSuUnD%MSNiPjP2hSz9n!Tcc?9P6CmF~Ch4@~tt&&NHPZ6^A@eCz{V zT8ohk@HeOp`(AzEwDd>tMZ)?nzm5y7{4EZ0&tU-sB0YOkIAO|dOkEIC`fW-&p zP$tOXiAXTR?RzjNk4=KDzy+WJBovU#^GT9|AxVLutRy~*z=kbd0`*8BCI}@$P!2#7 zgaVO_m_UL7Y%vogTISYmBn0a+1!tk~C@3C{Kx19q+}svH zF(@<&iNYY!7&zLEh{X_5DCoBVv#?3oF+>K{`x}>KMS^kVatRTMR45b(1r{Nea*${O zfnfE4!N4sDxGYg52NK{S+3X{d3{04chzEl#-a)My<*hDf7O-6fp;|Ojj6b*|;d*R7wcLL4L8%x1^ z5xi+bK7M3Nz`3Ex?(P_rD;a}E)35|Ql}f{sQDlO*w>t)n8nX2j$>e~D1rG7@EWF=r z(f?>mq)0(PE|!Lh#eyLP1aZZ3v5YI0Kq(xm7y(*{;bpQ!nZ8Gw+<+>^o!Ke7{dnt`uu6& z&p$qX=zssN&ulUp-s*eb^t|qV)zzu%(6+a=wrJEZUp#Mq*3{VWw7#zP$>W+w535yG zl@BV)?<>nn@7*oAbNklK8`rO0{k{0g<)TZ47Yi<&KX>-b=~MY9Pvqqu|Lxe(BZm(i zJg|S?-kd$VckSGfowYr4TgKM(Et}I)H>GUc@N4q=q{IZpx_G%v8YdBpgaUpnkIRVx z*(@dy9kq5%WW?%KD_4Yvg@!PKgO&#d(Ea^lP67_Fy3k0SjRCAqet1>jkFzMGkh2X zGV6~KU%p3+tWWD77h*pMv9X`-QT3vE}yL2 zIc{q5!IYwWRqEvFDUqrxryd?au?pou?fErnb3Cfls^T+Gj(d=H-S7>~9hvKsvtZ5P zP)hI#$Af;y{I2#?j9e~Wt*O3xp}qiLk~zbF-OtTA;M4PKrkM(SuSq&G<0BY_n%j)m zu=0o3#mh_VK98RHXhM;fGGii#IzRRP7KiE7Nn!MxnDVq)Gu7I7Ze5xa6~6tnz=>+- z9Fdg|n{v*^{^Cj2I6T*LTW-wVaOcrB)eyn+Qj^OZ`RK^s1q>#S+0~&izLGf1Ep0!W zUX0%Zy^-oPhqki2?U~=8VRvBD4d*gQh3Ohy`N3$cbQ!}=+e?`EYwhJ~iYoEbVE9y5 z#|gW-^8#kGqFG~Le+}z~hS-If=wrcxU`N+2oBP|+oo1GA9(zp!*dcP_xG;wO#izCl z;I6Z%+vYu}3h|mp-}4a9b|1fGft-EC7iLh+*ZJG{wpA|7lcXtsTCFywx-7dx8SAq1 z4oneCk0jh>G4oTH&TaG?np zr9G!s893vvZGTtZG!ih%5mDN{!*)s}ta`@!3JFHvBB`7{J1d~ z=9oPHky8alWy6aWWJ4Fuma&6JoITOyvfK3}9bJXcL;4;Lvzrv%d)ampKXa<4?fjc! z$kAfIQH$-P^;er?BFMk^x;qF9{pSy_m{#Ew{q|<}35RmrzJvkc+40nr(mOT{d_&2{ z(K%VS4Krg`dVO9pfb<&nhG_J(eU((?IcobY3B+;hpOW&7K)UJ3l&CE5fy+2mTqS1Y I2*~2U0l&j_DgXcg literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/logo_03.gif b/php/pic_switch_demo/static/images/logo_03.gif new file mode 100644 index 0000000000000000000000000000000000000000..06ba841ff4cc2b0ee77ca7468bad9220b8df9233 GIT binary patch literal 4519 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/picviews.png b/php/pic_switch_demo/static/images/picviews.png new file mode 100644 index 0000000000000000000000000000000000000000..7cdff9dd633d4044a13e3c3bfa7b88d87eb4ab6f GIT binary patch literal 1384 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/right.gif b/php/pic_switch_demo/static/images/right.gif new file mode 100644 index 0000000000000000000000000000000000000000..61c79b88f416be0ee7cd9e56fa71d818de89515d GIT binary patch literal 1471 zcmZ?wbhEHb6ky#juCX`cEu8XZT4?tb1_HpMo#Dx`9@dD9k! z*>|N6yvpDFG_ZNQ+}wML#hvb-e?M9K*!A4I3H7TrC*5Mp%#WLLn8?t&$^1LIGr_bAC~(f~lT?ZnA-yfr6Q# zo}sacxw*NHf{}rtfxdx}zM+w>p}Cc@k(Ggg0u(3#Z7WJivkG!?gW3h;*(zm}loVL$ z>z9|8>y;bp(3-T9Ob#X~hD#969RTqa; z7NqJ2r55Lx7A2YGUWa#K-YH4m@;A(7W=xF9-XkqDU?q=+4=4k2W3Nr(nUJEm4Q)f3vHv<a}t%N=+=uFAB-e&w-_Y zfQBj{OXcglv$RV;#QQOs{jsNt4u7myEwWTx;hy+ zxtSTbfPC%b>Sko&>||kNU}@}R=4_z^)tf?2i0K0zqYp|NNJ#}I1WbP*COqK-Iq>U%h}$> z=IY|?ddC? LZs_IX$Y2csQ=11_ literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/state_14.png b/php/pic_switch_demo/static/images/state_14.png new file mode 100644 index 0000000000000000000000000000000000000000..96b40787f627d1c17e090706b50e72a2e5ca50fb GIT binary patch literal 1174 zcmbVMUufKP98WoCM|YKN>|q-de`aMU^e*`&mtGQj_O6%29(Y~3-e~b<=91s_LYw?z z@~f9t*xG_Psk+J#eeppUuENw8K|x0a|KM4Oh$Xdeb+MIrm8?NuMj9?V02 zfAal&zTeOHPhJ}veYUsfXb;0My_FHIM%QHDv-eT@enYr%g)T>kK1s%LleEnMF(n%} z5U9B36sjT9o_p~s8f2JM)2UCA$?9{eh25-~*kmKur)Y*59EyC?nnnaP(3Im9*!3^g zSm4+Nc0#K1Rlkf{&d7X##^*=t*8H@k*zC|VU@%fCfs2RKG{F00Ak>XDohz2Lmt*#auq0?*{@8d5#x2C}dz>6$O>&!S=&aZ-L!Z zYnrj`i=GN>ix6MsxOTgpZHrkPOmR?Al!QYNGSngy&UwU)GG2JR!=Rzi3LKv}*aHcp z*}$`;z|u&!B)ERHx><{G4hmkcSNHw;bJ1qe&IoG5EK zNt8uJ5_zM;u^ZMXJ_Ca}k06aC}cs6c_PbcNsQmdiBc?sD@fL*YeU)9;gzXW9| zmlrid(rM&W1+V3(ZbK;N^g2E5AV~l`mUmt>e0`Qf8uy3wfE3E`n0>I7iX?9T~mvnfAZ5tT-yKYfs6ZBSC=j< zzyIFpmA4izEFZXh`|r=<^b@z@?jO@{7r%Y{b^YbT#S?#?s+*0biHcok&xrglYj@YV zl|R0Er0@B@i$~z0MP?-3*Ii51R)4tu_4f<=iod7dJ$x>84ZQNs+L?{><9q6V^^cg> zmoLTf(y=!mD>i_#a`Z$?zWHTz@BD9fFU9GzF~0!M^&U)J?Yeo){N~`V&9T(UC%fh1 bLKpMVom00yxYECo{3$B>sP^&j3ri0GQ=Wob literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/state_15.png b/php/pic_switch_demo/static/images/state_15.png new file mode 100644 index 0000000000000000000000000000000000000000..6e94707e2fb6e64d17ed6596ca1022b64247ac5e GIT binary patch literal 1206 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/user_07.jpg b/php/pic_switch_demo/static/images/user_07.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7862b44464320109c8d5f66f3bdd3146e2cff331 GIT binary patch literal 3828 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/wating.gif b/php/pic_switch_demo/static/images/wating.gif new file mode 100644 index 0000000000000000000000000000000000000000..15184eb58dcbc781854bcbccd2ba7fa034398e1a GIT binary patch literal 6255 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 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/images/wrong.gif b/php/pic_switch_demo/static/images/wrong.gif new file mode 100644 index 0000000000000000000000000000000000000000..d80644c46296d29344164b45e6047b56ce84c63d GIT binary patch literal 1330 zcmZ?wbhEHb6ky=d`sAnF=V zP)=g%OxxI{Cebw^Nej%QpYum<(TF%N6kHmWyhA1YxJ1YSxv;$oVY`&Wk4c6W#HIAQ z$8XY%U;qQf|J)J20SYdOC5b@V#=fE;F*!T6L?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp z&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dgxv3?I3Kh9IdBs*0wn~X9`AMl(KsHEN zUr7P1q$Jx`$q^)>0J76LzbI9~RL?*+*}%*|!OT$4(AdP>++0V&$iUD*-@r)U&`8(N z+{)O<%D_MY3Y37h6{VzE1-ZCE?E>;_l`=|73as??%gf94%8m8%i_-NCEiElUW*8ai z0#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*nV6WAUs__T1av9H3%LcpzHo!{iuJ%A z(o4?I)vrh_&^OdG(9g{U`3tPNxFjeQ;S8**i$f|4QuTvUi}Op1l2d`om0_BJVTa!$ zkV2qqto(~IfsvA!qnnePtC@k5vyp+Lk+Fp#Os{8N zaY}YRmZE0?5Y^blRt*Nf6tSB!lEh#Q4EXdEx&B@Nn%t%j5 zO-W8lOo)$*jfswmj0g`44G9hk4Dk2!_3`%d^l*1`b#Zobbg;LxwXwFcv@ka_H8C~< zW=cI>9c?X54RtkD6=fww1$jAH8EGj=32`w|5n&-g0e(JS9&Rp94t6$H7G@?!1_s5S zEZ|Z`2SkEOGzQkd1cfdSQ=VDLJ#X3=3u;tyK8O_Zc`I*xaiEQZiA9W~(NnM^fkCNh yMG04Mz`V + + +My97DatePicker + + + + + + + + \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/My97DatePicker/WdatePicker.js b/php/pic_switch_demo/static/js/My97DatePicker/WdatePicker.js new file mode 100644 index 0000000..14161ef --- /dev/null +++ b/php/pic_switch_demo/static/js/My97DatePicker/WdatePicker.js @@ -0,0 +1,34 @@ +/* + * My97 DatePicker 4.2 + * SITE: http://dp.my97.net + * BLOG: http://my97.cnblogs.com + * MAIL: smallcarrot@163.com + */ +var $dp,WdatePicker;(function(){var $={ + +$wdate:true, +$crossFrame:false, +$dpPath:"", +position:{}, +lang:"auto", +skin:"default", +dateFmt:"yyyy-MM-dd", +realDateFmt:"yyyy-MM-dd", +realTimeFmt:"HH:mm:ss", +realFullFmt:"%Date %Time", +minDate:"1900-01-01 00:00:00", +maxDate:"2099-12-31 23:59:59", +startDate:"", +alwaysUseStartDate:false, +yearOffset:1911, +isShowWeek:false, +highLineWeekDay:true, +isShowClear:true, +isShowToday:true, +isShowOthers:true, +readOnly:false, +errDealMode:0, +autoPickDate:null, +qsEnabled:true, + +disabledDates:null,disabledDays:null,opposite:false,onpicking:null,onpicked:null,onclearing:null,oncleared:null,eCont:null,vel:null,errMsg:"",quickSel:[],has:{}};WdatePicker=S;var V=window,N="document",H="documentElement",A="getElementsByTagName",T,_,R,G,Z;switch(navigator.appName){case"Microsoft Internet Explorer":R=true;break;case"Opera":Z=true;break;default:G=true;break}T=V;if($.$crossFrame){try{while(T.parent[N]!=T[N]&&T.parent[N][A]("frameset").length==0)T=T.parent}catch(P){}}_=J();if($.$wdate)K(_+"skin/WdatePicker.css");var L;if(T.$dp){try{L=(T.$dp.$("MY")=="lIkEmY97")}catch(P){L=P.number==-2146823277?true:false}}if(!T.$dp||L){$dp=Q({ff:G,ie:R,opera:Z,el:null,win:V,status:L?2:0,defMinDate:$.minDate,defMaxDate:$.maxDate,$:function(_){try{this.win[N]}catch($){return"lIkEmY97"}return(typeof _=="string")?this.win[N].getElementById(_):_},$D:function($,_){return this.$DV(this.$($).value,_)},$DV:function(_,$){if(_!=""){this.dt=$dp.cal.splitDate(_,$dp.cal.dateFmt);if($)for(var A in $){if(this.dt[A]===undefined)this.errMsg="invalid property:"+A;this.dt[A]+=$[A]}if(this.dt.refresh())return this.dt}return""},show:function(){if(this.dd)this.dd.style.display="block"},hide:function(){if(this.dd)this.dd.style.display="none"},attachEvent:C});if(!L)X(T,function(){S(null,true)})}else $dp=T.$dp;if(!V[N].docMD){C(V[N],"onmousedown",B);V[N].docMD=true}if(!T[N].docMD){C(T[N],"onmousedown",B);T[N].docMD=true}C(V,"onunload",function(){$dp.hide()});function Q(_){T.$dp=T.$dp||{};for(var $ in _)T.$dp[$]=_[$];return T.$dp}function C(A,$,_){if(R)A.attachEvent($,_);else{var B=$.replace(/on/,"");_._ieEmuEventHandler=function($){return _($)};A.addEventListener(B,_._ieEmuEventHandler,false)}}function J(){var _,A,$=document.getElementsByTagName("script");for(var B=0;B<$.length;B++){_=$[B].src.substring(0,$[B].src.toLowerCase().indexOf("wdatepicker.js"));A=_.lastIndexOf("/");if(A>0)_=_.substring(0,A+1);if(_)break}return _}function D(F){var E,C;if(F.substring(0,1)!="/"&&F.indexOf("://")==-1){E=T.location.href;C=location.href;if(E.indexOf("?")>-1)E=E.substring(0,E.indexOf("?"));if(C.indexOf("?")>-1)C=C.substring(0,C.indexOf("?"));var _="",D="",A="",H,G,B="";for(H=0;H_.scrollLeft||A.scrollLeft>_.scrollLeft))?A:_;return{"top":B.scrollTop,"left":B.scrollLeft}}function B(_){src=_?(_.srcElement||_.target):null;if($dp&&$dp.dd&&$dp.dd.style.display=="block"&&src!=$dp.el){var A=$dp.el,B=$dp.cal,$=$dp.el[$dp.elProp];if($!=null){$dp.$w.hideSel();if($!=""&&!$dp.readOnly)B.date.loadFromDate(B.splitDate($,B.dateFmt));if($==""||(B.isDate(B.date)&&B.isTime(B.date)&&B.checkValid(B.date))){B.mark(true);if($!="")B.update();else B.setRealValue("");$dp.hide()}else B.mark(false)}else $dp.hide()}}var O=[];function W(){$dp.status=2;F()}function F(){if(O.length>0){var $=O.shift();$.el={innerHTML:""};$.eCont=$dp.$($.eCont);$.autoPickDate=true;$.qsEnabled=false;I($)}}function S(C,$){$dp.win=V;C=C||{};if($){$dp.status=1;I({el:{innerHTML:""}},true)}else if(C.eCont){O.push(C);if($dp.status==2)F()}else{if($dp.status==0)$dp.status=1;if($dp.status!=2)return;var B,A=_();if(A){B=A.srcElement||A.target;A.cancelBubble=true}C.el=$dp.$(C.el||B);if(!C.el||C.el&&C.el.disabled||(C.el==$dp.el&&$dp.dd.style.display!="none"&&$dp.dd.style.left!="-1970px"))return;I(C)}function _(){if(G){func=_.caller;while(func!=null){var $=func.arguments[0];if($&&($+"").indexOf("Event")>=0)return $;func=func.caller}return null}return event}}function I(G,A){for(var F in $)if(F.substring(0,1)!="$")$dp[F]=$[F];for(F in G)if($dp[F]===undefined)$dp.errMsg="invalid property:"+F;else $dp[F]=G[F];$dp.elProp=$dp.el&&$dp.el.nodeName=="INPUT"?"value":"innerHTML";if($dp.el[$dp.elProp]==null)return;if($dp.lang=="auto")$dp.lang=R?navigator.browserLanguage.toLowerCase():navigator.language.toLowerCase();if(!$dp.dd||$dp.eCont||($dp.lang&&$dp.realLang&&$dp.realLang.name!=$dp.lang)){if($dp.dd&&!$dp.eCont)T[N].body.removeChild($dp.dd);if($.$dpPath=="")D(_);var B="";if($dp.eCont){$dp.eCont.innerHTML=B;X($dp.eCont.childNodes[0],W)}else{$dp.dd=T[N].createElement("DIV");$dp.dd.style.cssText="position:absolute;z-index:19700";$dp.dd.innerHTML=B;T[N].body.appendChild($dp.dd);X($dp.dd.childNodes[0],W);if(A)$dp.dd.style.left=$dp.dd.style.top="-1970px";else{$dp.show();C()}}}else if($dp.cal){$dp.show();$dp.cal.init();C()}function C(){var F=$dp.position.left,B=$dp.position.top,G=U($dp.el),$=E(V),C=M(T),A=Y(T),D=$dp.dd.offsetHeight,_=$dp.dd.offsetWidth;if(isNaN(B)){if(B=="above"||(B!="under"&&(($.topM+G.bottom+D>C.height)&&($.topM+G.top-D>0))))B=A.top+$.topM+G.top-D-3;else B=A.top+$.topM+G.bottom;B+=R?-1:1}else B+=A.top+$.topM;if(isNaN(F))F=A.left+Math.min($.leftM+G.left,C.width-_-5)-(R?2:0);else F+=A.left+$.leftM;$dp.dd.style.top=B+"px";$dp.dd.style.left=F+"px"}}})() \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/My97DatePicker/calendar.js b/php/pic_switch_demo/static/js/My97DatePicker/calendar.js new file mode 100644 index 0000000..937f0dc --- /dev/null +++ b/php/pic_switch_demo/static/js/My97DatePicker/calendar.js @@ -0,0 +1,7 @@ +/* + * My97 DatePicker 4.2 + * SITE: http://dp.my97.net + * BLOG: http://my97.cnblogs.com + * MAIL: smallcarrot@163.com + */ +var $c;if($FF){Event.prototype.__defineSetter__("returnValue",function($){if(!$)this.preventDefault();return $});Event.prototype.__defineGetter__("srcElement",function(){var $=this.target;while($.nodeType!=1)$=$.parentNode;return $});HTMLElement.prototype.attachEvent=function($,_){var A=$.replace(/on/,"");_._ieEmuEventHandler=function($){window.event=$;return _()};this.addEventListener(A,_._ieEmuEventHandler,false)}}function My97DP(){$c=this;$dp.$w=window;$dt=this.date=new DPDate();this.QS=[];$d=document.createElement("div");$d.className="WdateDiv";$d.onmousedown=hideSel;$d.innerHTML="

       
      ";attachTabEvent($d,function(){hideSel()});_();this.init();$();$d.MI.attachEvent("onkeydown",A);$d.yI.attachEvent("onkeydown",A);$d.MI.onfocus=function($){this.className="yminputfocus";this.value=getA(this,"realValue");this.select();$c._fM();showB($d.MD)};$d.MI.onblur=function(){var $;if($lastInput==this){$dt.M=pIntDef(this.value,$dt.M);$=true}c_M($dt.M,$);this.className="yminput";hide($d.MD)};$d.yI.onfocus=function(){this.className="yminputfocus";this.select();$c._fy();showB($d.yD)};$d.yI.onblur=function(){var $;if($lastInput==this){$dt.y=pIntDef(this.value,$dt.y);$=true}c_y($dt.y,$);this.className="yminput";hide($d.yD)};$d.HI.onfocus=function(){$c.currFocus=this;this.select();$c._fH();showB($d.HD)};$d.HI.onblur=function(){var $;if($lastInput==this){$dt.H=pIntDef(this.value,$dt.H);$=true}c_H($dt.H,$);hide($d.HD)};$d.mI.onfocus=function(){$c.currFocus=this;this.select();$c._fm();showB($d.mD)};$d.mI.onblur=function(){var $;if($lastInput==this){$dt.m=pIntDef(this.value,$dt.m);$=true}c_m($dt.m,$);hide($d.mD)};$d.sI.onfocus=function(){$c.currFocus=this;this.select();$c._fs();showB($d.sD)};$d.sI.onblur=function(){var $;if($lastInput==this){$dt.s=pIntDef(this.value,$dt.s);$=true}c_s($dt.s,$);hide($d.sD)};$d.HI.attachEvent("onkeydown",A);$d.mI.attachEvent("onkeydown",A);$d.sI.attachEvent("onkeydown",A);$d.upButton.onclick=function(){updownEvent(1)};$d.downButton.onmousedown=function(){updownEvent(-1)};$d.qsDiv.onclick=function(){if($d.qsDivSel.style.display!="block"){$c._fillQS();showB($d.qsDivSel)}else hide($d.qsDivSel)};attachTabEvent($d.okI,function(){$d.MI.focus();event.returnValue=false});document.body.appendChild($d);function _(){var A=$d.getElementsByTagName("div"),$=$d.getElementsByTagName("input"),B=$d.getElementsByTagName("button"),_=$d.getElementsByTagName("span");$d.navLeftImg=A[1];$d.leftImg=A[2];$d.rightImg=A[8];$d.navRightImg=A[7];$d.MI=$[0];$d.yI=$[1];$d.titleDiv=A[0];$d.MD=A[4];$d.yD=A[6];$d.qsDivSel=A[9];$d.dDiv=A[10];$d.tDiv=A[11];$d.HD=A[12];$d.mD=A[13];$d.sD=A[14];$d.qsDiv=A[15];$d.bDiv=A[16];$d.HI=$[2];$d.mI=$[4];$d.sI=$[6];$d.clearI=$[7];$d.todayI=$[8];$d.okI=$[9];$d.upButton=B[0];$d.downButton=B[1];$d.timeSpan=_[0]}function $(){$d.navLeftImg.onclick=function(){$ny=$ny<=0?$ny-1:-1;if($ny%5==0)$d.yI.focus();c_y($dt.y-1)};$d.leftImg.onclick=function(){var $=$dt.M;if($>1)$-=1;else{$=12;$dt.y-=1}s_y($dt.y);c_M($)};$d.rightImg.onclick=function(){var $=$dt.M;if($<12)$+=1;else{$=1;$dt.y+=1}s_y($dt.y);c_M($)};$d.navRightImg.onclick=function(){$ny=$ny>=0?$ny+1:1;if($ny%5==0)$d.yI.focus();c_y($dt.y+1)}}function A(){var $=event,_=($.which==undefined)?$.keyCode:$.which;if(!$OPERA&&!((_>=48&&_<=57)||(_>=96&&_<=105)||_==8||_==46||_==37||_==39||_==9))$.returnValue=false;$lastInput=$.srcElement}}My97DP.prototype={init:function(){$ny=0;$dp.cal=this;if($dp.readOnly&&$dp.el.readOnly!=null){$dp.el.readOnly=true;$dp.el.blur()}$();this.dateFmt=$dp.dateFmt;this._dealFmt();this.autoPickDate=$dp.autoPickDate||(($dp.has.st)?false:true);$tdt=this.tdate=new DPDate();this.ddateRe=this._initRe("disabledDates");this.ddayRe=this._initRe("disabledDays");this.loadDate();this.minDate=this.doCustomDate($dp.minDate,$dp.minDate!=$dp.defMinDate?$dp.realFmt:$dp.realFullFmt,$dp.defMinDate);this.maxDate=this.doCustomDate($dp.maxDate,$dp.maxDate!=$dp.defMaxDate?$dp.realFmt:$dp.realFullFmt,$dp.defMaxDate);if(this.minDate.compareWith(this.maxDate)>0)$dp.errMsg=$lang.err_1;this._makeDateInRange();$sdt=this.sdate=new DPDate($dt.y,$dt.M,$dt.d,$dt.H,$dt.m,$dt.s);if(!$dp.alwaysUseStartDate&&$dp.el[$dp.elProp]!="")this.update();this.oldValue=$dp.el[$dp.elProp];setA($d.MI,"realValue",$dt.M);$d.MI.value=$lang.aMonStr[$dt.M-1];$d.yI.value=$dt.y;$d.HI.value=$dt.H;$d.mI.value=$dt.m;$d.sI.value=$dt.s;$d.timeSpan.innerHTML=$lang.timeStr;$d.clearI.value=$lang.clearStr;$d.todayI.value=$lang.todayStr;$d.okI.value=$lang.okStr;this.initShowAndHide();this.initBtn();if($dp.errMsg)alert($dp.errMsg);this.redraw();hideSel();if($dp.el.nodeType==1)$dp.attachEvent($dp.el,"onkeydown",function($){if($dp.dd.style.display!="none"){k=($.which==undefined)?$.keyCode:$.which;if(k==9){if($dp.el[$dp.elProp]!="")$c.update();hide($dp.dd)}}});function $(){var _,$;for(_=0;($=document.getElementsByTagName("link")[_]);_++)if(getA($,"rel").indexOf("style")!=-1&&getA($,"title")){$.disabled=true;if(getA($,"title")==$dp.skin)$.disabled=false}}},splitDate:function(J,C,O,E,B,G,F,K,L){var $;if(J&&J.loadDate)$=J;else{$=new DPDate();C=C||$dp.dateFmt;var H,N=0,A=/yyyy|yyy|yy|y|MM|M|dd|d|HH|H|mm|m|ss|s/g,M=J.split(/\W+/),_=C.match(A);A.lastIndex=0;if(!L&&M.length!=_.length){var D=0,K="^";while((M=A.exec(C))!==null){D=M.index-D;K+=(D==0)?"":(".{"+D+"}");D=A.lastIndex;switch(M[0]){case"yyyy":K+="(\\d{4})";break;case"yyy":K+="(\\d{3})";break;default:K+="(\\d\\d?)";break}}K+=".*$";M=new RegExp(K).exec(J);N=1}if(M)for(H=0;H<_.length;H++){var I=M[H+N];if(I)switch(_[H]){case"y":case"yy":I=pIntDef(I,0);if(I<50)I+=2000;else I+=1900;$.y=I;break;case"yyy":$.y=pIntDef(I,0)+$dp.yearOffset;break;default:$[_[H].slice(-1)]=I;break}}}$.coverDate(O,E,B,G,F,K);return $},_initRe:function(_){var B,$=$dp[_],A="(?:";if($){for(B=0;B<$.length;B++){A+=this.doExp($[B]);if(B!=$.length-1)A+="|"}A=new RegExp(A+")")}else A=null;return A},update:function(){$dp.el[$dp.elProp]=this.getDateStr();this.setRealValue()},setRealValue:function($){var _=$dp.$($dp.vel),$=rtn($,this.getDateStr($dp.realFmt));if(_)_.value=$;setA($dp.el,"realValue",$)},doExp:function(s){var ps="yMdHms",arr,tmpEval,re=/#\{(.*?)\}/;s=s+"";for(var i=0;i=0){A=A.replace(/%ld/g,"0");$.d=0;$.M=pInt($.M)+1}$.refresh()}return $},loadDate:function(){var _,$;if($dp.alwaysUseStartDate||($dp.startDate!=""&&$dp.el[$dp.elProp]=="")){_=this.doExp($dp.startDate);$=$dp.realFmt}else{_=$dp.el[$dp.elProp];$=this.dateFmt}$dt.loadFromDate(this.splitDate(_,$));if($dp.has.sd&&!this.isDate($dt)){$dt.y=$tdt.y;$dt.M=$tdt.M;$dt.d=$tdt.d}if($dp.has.st&&!this.isTime($dt)){$dt.H=$tdt.H;$dt.m=$tdt.m;$dt.s=$tdt.s}},isDate:function($){if($.y!=null)$=doStr($.y,4)+"-"+$.M+"-"+$.d;return $.match(/^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$/)},isTime:function($){if($.H!=null)$=$.H+":"+$.m+":"+$.s;return $.match(/^([0-9]|([0-1][0-9])|([2][0-3])):([0-9]|([0-5][0-9])):([0-9]|([0-5][0-9]))$/)},_makeDateInRange:function(){var _=this.checkRange(),A=true;if(_!=0){A=false;var $;if(_>0)$=this.maxDate;else $=this.minDate;if($dp.has.sd){$dt.y=$.y;$dt.M=$.M;$dt.d=$.d}if($dp.has.st){$dt.H=$.H;$dt.m=$.m;$dt.s=$.s}}return A},checkRange:function(A,$){$=$||$dt;var _=$.compareWith(this.minDate,A);if(_>0){_=$.compareWith(this.maxDate,A);if(_<0)_=0}return _},checkValid:function($,A,B){A=A||$dp.has.minUnit;var _=this.checkRange(A,$);if(_==0){if(A=="d"&&B==null)B=new Date($.y,$.M-1,$.d).getDay();_=!this.testDay(B)&&!this.testDate($)}else _=false;return _},_fd:function(){var F,D,E,L,H=new sb(),G,A,I,C,K="",$="",_=new DPDate($dt.y,$dt.M,$dt.d,0,0,0),J=_.y,B=_.M;G=new Date(J,B-1,1).getDay();A=1-G;I=new Date(J,B,0).getDay();C=new Date(J,B,0).getDate();H.a("");H.a("");F=$dp.isShowWeek?0:1;while(F<8)H.a("");H.a("");for(F=1,D=A;F<7;F++){H.a("");for(E=0;E<7;E++){_.loadDate(J,B,D++);_.refresh();if(_.M==B){L=true;if(_.compareWith($sdt,"d")==0)K="Wselday";else if(_.compareWith($tdt,"d")==0)K="Wtoday";else K=(($dp.highLineWeekDay&&(E==0||E==6))?"Wwday":"Wday");$=(($dp.highLineWeekDay&&(E==0||E==6))?"WwdayOn":"WdayOn")}else if($dp.isShowOthers){L=true;K="WotherDay";$="WotherDayOn"}else L=false;if($dp.isShowWeek&&E==0&&(F<4||L))H.a("");H.a("")}else H.a(">")}H.a("")}H.a("
      "+$lang.aWeekStr[F++]+"
      "+getWeek(_)+""+_.d+"
      ");return H.j()},testDate:function(_){var $=this.ddateRe&&this.ddateRe.test(this.getDateStr($dp.realFmt,_));if($dp.disabledDates&&$dp.opposite)$=!$;return $},testDay:function(_){var $=this.ddayRe&&this.ddayRe.test(_);if($dp.disabledDays&&$dp.opposite)$=!$;return $},_f:function(p,c,r,e){var s=new sb();bak=$dt[p];s.a("");for(var j=0;j"+(p=="M"?$lang.aMonStr[$dt[p]-1]:$dt[p])+"")}s.a("")}s.a("
      ");$dt[p]=bak;return s.j()},_fM:function(){$d.MD.innerHTML=this._f("M",2,6,"i+j*6+1")},_fy:function(_){var B,A=$dt.y,$=new sb();_=rtn(_,A-5);$.a(this._f("y",2,5,_+"+i+j*5"));$.a("
      \u2190_+10?"class='menu' onmouseover=\"this.className='menuOn'\" onmouseout=\"this.className='menu'\" onmousedown='if(event.preventDefault)event.preventDefault();event.cancelBubble=true;$c._fy("+(_+10)+")';":"class='invalidMenu'");$.a(">\u2192
      ");$d.yD.innerHTML=$.j()},_fHMS:function(A,_,$){$d[A+"D"].innerHTML=this._f(A,6,_,$)},_fH:function(){this._fHMS("H",4,"i * 6 + j")},_fm:function(){this._fHMS("m",2,"i * 30 + j * 5")},_fs:function(){this._fHMS("s",1,"j * 10")},_fillQS:function(A){this.initQS();var _=$d.qsDivSel,C=_.style,$=new sb();$.a("");$.a("");for(var B=0;B")}else $.a("");$.a("
      "+$lang.quickStr+"
      ");if(!A)$.a("
      \xd7
      ");$.a("
      ");_.innerHTML=$.j()},_dealFmt:function(){$(/yyyy|yyy|yy|y/);$(/MM|M/);$(/dd|d/);$(/HH|H/);$(/mm|m/);$(/ss|s/);$dp.has.sd=($dp.has.y||$dp.has.M||$dp.has.d)?true:false;$dp.has.st=($dp.has.H||$dp.has.m||$dp.has.s)?true:false;$dp.realFullFmt=$dp.realFullFmt.replace(/%Date/,$dp.realDateFmt).replace(/%Time/,$dp.realTimeFmt);if($dp.has.sd){if($dp.has.st)$dp.realFmt=$dp.realFullFmt;else $dp.realFmt=$dp.realDateFmt}else $dp.realFmt=$dp.realTimeFmt;function $(_){var $=(_+"").slice(1,2);$dp.has[$]=_.exec($dp.dateFmt)?($dp.has.minUnit=$,true):false}},initShowAndHide:function(){var $=false;$dp.has.y?($=true,show($d.yI,$d.navLeftImg,$d.navRightImg)):hide($d.yI,$d.navLeftImg,$d.navRightImg);$dp.has.M?($=true,show($d.MI,$d.leftImg,$d.rightImg)):hide($d.MI,$d.leftImg,$d.rightImg);$?show($d.titleDiv):hide($d.titleDiv);if($dp.has.st){show($d.tDiv);disHMS($d.HI,$dp.has.H);disHMS($d.mI,$dp.has.m);disHMS($d.sI,$dp.has.s)}else hide($d.tDiv);shorH($d.clearI,$dp.isShowClear);shorH($d.todayI,$dp.isShowToday);shorH($d.qsDiv,($dp.has.d&&$dp.qsEnabled));if($dp.eCont)hide($d.bDiv)},mark:function(B){if($cMark){$cMark=false;return}var A=$dp.el,_=$FF?"class":"className";if(B)C(A);else switch($dp.errDealMode){case 0:$cMark=true;if(confirm($lang.errAlertMsg)){A[$dp.elProp]=this.oldValue;C(A)}else $(A);break;case 1:A[$dp.elProp]=this.oldValue;C(A);break;case 2:$(A);break}function C(A){var $=A.className.replace(/WdateFmtErr/g,"");if(A.className!=$)setA(A,_,$)}function $($){setA($,_,$.className+" WdateFmtErr")}},getP:function(C,_,$){$=$||$dt;var E,B,D,A;switch(C.charAt(0)){case"w":A=getDay($);break;case"D":B=[C];A=$lang.aWeekStr[getDay($)+1];break;case"W":A=getWeek($);break;case"y":B=["yyyy","yyy","yy","y"];break;default:break}B=B||[C+C,C];_=_||B[0];for(E=0;E=0)_=_.replace(D,doStr((C=="y"&&D.length<4)?(D.length<3?$.y%100:($.y+2000-$dp.yearOffset)%1000):A,D.length))}return _},getDateStr:function(_,$){$=$||$dt;_=_||this.dateFmt;var A="yMdHmswWD";for(var B=0;B0)$dt.d--;if(!$dp.eCont){this.update();if(this.checkValid($dt)){$c.mark(true);hide($dp.dd)}else $c.mark(false)}if($dp.onpicked)$dp.onpicked.call($dp.el,$dp);else if(this.oldValue!=$dp.el[$dp.elProp]&&$dp.el.onchange)fireEvent($dp.el,"change")},initBtn:function(){$d.clearI.onclick=function(){var $;if($dp.onclearing)$=$dp.onclearing.call($dp.el,$dp);if(!$){$dp.el[$dp.elProp]="";$c.setRealValue("");hide($dp.dd);if($dp.oncleared)$dp.oncleared.call($dp.el,$dp);else if($c.oldValue!=$dp.el[$dp.elProp]&&$dp.el.onchange)fireEvent($dp.el,"change")}};$d.okI.onclick=function(){day_Click()};if($dp.el[$dp.elProp]=="")$d.okI.value=$lang.okStr;else $d.okI.value=$lang.updateStr;if(this.checkValid($tdt)){$d.todayI.disabled=false;$d.todayI.onclick=function(){var $=$c.tdate;day_Click($.y,$.M,$.d,$.H,$.m,$.s)}}else $d.todayI.disabled=true},initQS:function(){var H,G,A,F,C=[],$=5,E=$dp.quickSel.length,_=$dp.has.minUnit;if(E>$)E=$;else if(_=="m"||_=="s")C=[0,15,30,45,59,-60,-45,-30,-15,-1];else for(H=0;H<$*2;H++)C[H]=$dt[_]-$+1+H;for(H=G=0;H0)_setAll($c.maxDate);function _setAll($){s_y($.y);s_M($.M);s_d($.d);if($dp.has.st){s_H($.H);s_m($.m);s_s($.s)}}}function s_y($){$dt.y=$d.yI.value=$}function s_M($){$dt.M=$;setA($d.MI,"realValue",$);$d.MI.value=$lang.aMonStr[$-1]}function s_d($){$sdt.d=$dt.d=$}function s_H($){$dt.H=$d.HI.value=$}function s_m($){$dt.m=$d.mI.value=$}function s_s($){$dt.s=$d.sI.value=$}function setA(A,_,$){if(A.setAttribute)A.setAttribute(_,$)}function getA(_,$){return _.getAttribute($)}function makeInRange(_,$,A){if(_<$)_=$;else if(_>A)_=A;return _}function attachTabEvent($,_){$.attachEvent("onkeydown",function(){var $=event,A=($.which==undefined)?$.keyCode:$.which;if(A==9)_()})}function doStr($,_){$=$+"";while($.length<_)$="0"+$;return $}function hideSel(){hide($d.yD,$d.MD,$d.HD,$d.mD,$d.sD)}function updownEvent($){if($c.currFocus==undefined)$c.currFocus=$d.mI;switch($c.currFocus){case $d.HI:c_H($dt.H+$);break;case $d.mI:c_m($dt.m+$);break;case $d.sI:c_s($dt.s+$);break}}function DPDate(D,A,$,C,B,_){this.loadDate=function(E,B,_,D,C,A){var $=new Date();this.y=pIntDef(E,$.getFullYear());this.M=pIntDef(B,$.getMonth()+1);this.d=pIntDef(_,$.getDate());this.H=pIntDef(D,$.getHours());this.m=pIntDef(C,$.getMinutes());this.s=pIntDef(A,$.getSeconds())};this.loadFromDate=function($){if($==null)return;this.loadDate($.y,$.M,$.d,$.H,$.m,$.s)};this.coverDate=function(E,B,_,D,C,A){var $=new Date();this.y=pIntDef(this.y,rtn(E,$.getFullYear()));this.M=pIntDef(this.M,rtn(B,$.getMonth()+1));this.d=$dp.has.d?pIntDef(this.d,rtn(_,$.getDate())):1;this.H=pIntDef(this.H,rtn(D,$.getHours()));this.m=pIntDef(this.m,rtn(C,$.getMinutes()));this.s=pIntDef(this.s,rtn(A,$.getSeconds()))};this.compareWith=function($,C){var A="yMdHms",_,B;C=A.indexOf(C);C=C>=0?C:5;for(var D=0;D<=C;D++){B=A.charAt(D);_=this[B]-$[B];if(_>0)return 1;else if(_<0)return-1}return 0};this.refresh=function(){var $=new Date(this.y,this.M-1,this.d,this.H,this.m,this.s);this.y=$.getFullYear();this.M=$.getMonth()+1;this.d=$.getDate();this.H=$.getHours();this.m=$.getMinutes();this.s=$.getSeconds();return!isNaN(this.y)};this.loadDate(D,A,$,C,B,_)}function pInt($){return parseInt($,10)}function pIntDef(_,$){_=pInt(_);if(isNaN(_))_=$;return _}function rtn($,_){return $==null?_:$}function fireEvent(A,$){if($IE)A.fireEvent("on"+$);else{var _=document.createEvent("HTMLEvents");_.initEvent($,true,true);A.dispatchEvent(_)}} \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/My97DatePicker/config.js b/php/pic_switch_demo/static/js/My97DatePicker/config.js new file mode 100644 index 0000000..a3625fb --- /dev/null +++ b/php/pic_switch_demo/static/js/My97DatePicker/config.js @@ -0,0 +1,12 @@ +var langList = +[ + {name:'en', charset:'UTF-8'}, + {name:'zh-cn', charset:'gb2312'}, + {name:'zh-tw', charset:'GBK'} +]; + +var skinList = +[ + {name:'default', charset:'gb2312'}, + {name:'whyGreen', charset:'gb2312'} +]; \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/My97DatePicker/lang/en.js b/php/pic_switch_demo/static/js/My97DatePicker/lang/en.js new file mode 100644 index 0000000..43928d4 --- /dev/null +++ b/php/pic_switch_demo/static/js/My97DatePicker/lang/en.js @@ -0,0 +1,12 @@ +var $lang={ +errAlertMsg: "Invalid date or the date out of range,redo or not?", +aWeekStr: ["wk", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], +aMonStr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], +clearStr: "Clear", +todayStr: "Today", +okStr: "OK", +updateStr: "OK", +timeStr: "Time", +quickStr: "Quick Selection", +err_1: 'MinDate Cannot be bigger than MaxDate!' +} \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/My97DatePicker/lang/zh-cn.js b/php/pic_switch_demo/static/js/My97DatePicker/lang/zh-cn.js new file mode 100644 index 0000000..dfabd92 --- /dev/null +++ b/php/pic_switch_demo/static/js/My97DatePicker/lang/zh-cn.js @@ -0,0 +1,12 @@ +var $lang={ +errAlertMsg: "Ϸڸʽڳ޶Χ,Ҫ?", +aWeekStr: ["","","һ","","","","",""], +aMonStr: ["һ","","","","","","","","","ʮ","ʮһ","ʮ"], +clearStr: "", +todayStr: "", +okStr: "ȷ", +updateStr: "ȷ", +timeStr: "ʱ", +quickStr: "ѡ", +err_1: 'Сڲܴ!' +} \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/My97DatePicker/lang/zh-tw.js b/php/pic_switch_demo/static/js/My97DatePicker/lang/zh-tw.js new file mode 100644 index 0000000..dd8859b --- /dev/null +++ b/php/pic_switch_demo/static/js/My97DatePicker/lang/zh-tw.js @@ -0,0 +1,12 @@ +var $lang={ +errAlertMsg: "Ϸڸʽڳ޶,ҪN?", +aWeekStr: ["","","һ","","","","",""], +aMonStr: ["һ","","","","","","","","","ʮ","ʮһ","ʮ"], +clearStr: "", +todayStr: "", +okStr: "_", +updateStr: "_", +timeStr: "rg", +quickStr: "x", +err_1: 'Сڲܴ!' +} \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/My97DatePicker/skin/WdatePicker.css b/php/pic_switch_demo/static/js/My97DatePicker/skin/WdatePicker.css new file mode 100644 index 0000000..8d447b5 --- /dev/null +++ b/php/pic_switch_demo/static/js/My97DatePicker/skin/WdatePicker.css @@ -0,0 +1,10 @@ +.Wdate{ + border:#999 1px solid; + height:20px; + background:#fff url(datePicker.gif) no-repeat right; +} + +.WdateFmtErr{ + font-weight:bold; + color:red; +} \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/My97DatePicker/skin/datePicker.gif b/php/pic_switch_demo/static/js/My97DatePicker/skin/datePicker.gif new file mode 100644 index 0000000000000000000000000000000000000000..d6bf40c9f290161c87230787a1056d977d36c821 GIT binary patch literal 1043 zcmd_p?QatW0LSs$R_K_-G(2dKnG6Nuloy5QzR9KEUo-T(>!P_I?XFKgvWtyr!WO4UlCn14~uDIk;oTK<^AT9>DEW?Q;pCx%I$O#N5 zF>!(7;)FBL?Y2>G#rVB@JJbtu9J~xNLUPnSUmhJPocq3fC#2n zf`T_#pxG40CJ;6a(?x<#)R9FWBOz>(W+;^9Jhbd%GBC47(G=xRz)Xgu8JJFcnCB3k z@%ssgmJo`6N-16{1yh`x7M3Z+cUmh9yt+9ezELo|GlGq&y6dm!P^77 zPxRDwnT=eC+BI(eaA zI@!?n@xITu?I(aA-qe2m>HYp*Ct=)U(OjDOa0{Y6er~AynCY7C-e-;9YJLGubiCfY z-F!#~Ha30Gckz2A(6j&ITSo^hZ7n9PzT@zN^LON3>zCUv7|#s8^X2uC{2FFF`}1xc GaQqdg9U6)N literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/js/My97DatePicker/skin/default/datepicker.css b/php/pic_switch_demo/static/js/My97DatePicker/skin/default/datepicker.css new file mode 100644 index 0000000..41c9be2 --- /dev/null +++ b/php/pic_switch_demo/static/js/My97DatePicker/skin/default/datepicker.css @@ -0,0 +1,237 @@ +/* + * My97 DatePicker 4.1 + * Ƥ:default + * Ƥ:My97 + */ + +/* ѡ DIV */ +.WdateDiv{ + width:180px; + background-color:#FFFFFF; + border:#bbb 1px solid; + padding:2px; +} +.WdateDiv *{font-size:9pt;} + +/**************************** + * ͼ + ***************************/ +.WdateDiv .NavImg { + cursor:pointer; + width:16px; + height:16px; + margin-top:1px; +} +.WdateDiv .NavImgll { background:url(img.gif) no-repeat; } +.WdateDiv .NavImgl { background:url(img.gif) no-repeat -16px 0px; } +.WdateDiv .NavImgr { background:url(img.gif) no-repeat -32px 0px; } +.WdateDiv .NavImgrr { background:url(img.gif) no-repeat -48px 0px; } + +/**************************** + * · + ***************************/ +/* · DIV */ +.WdateDiv #dpTitle{ + height:24px; + margin-bottom:2px; + padding:1px; +} +/* · INPUT */ +.WdateDiv .yminput{ + margin-top:2px; + text-align:center; + border:0px; + height:16px; + width:50px; + cursor:pointer; +} +/* ·ýʱʽ INPUT */ +.WdateDiv .yminputfocus{ + margin-top:2px; + text-align:center; + font-weight:bold; + color:blue; + border:#ccc 1px solid; + height:16px; + width:50px; +} +/* ˵ѡ DIV */ +.WdateDiv .menuSel{ + position:absolute; + background-color:#FFFFFF; + border:#ccc 1px solid; + display:none; +} +/* ˵ʽ TD */ +.WdateDiv .menu{ + cursor:pointer; + background-color:#fff; +} +/* ˵mouseoverʽ TD */ +.WdateDiv .menuOn{ + cursor:pointer; + background-color:#BEEBEE; +} +/* ˵Чʱʽ TD */ +.WdateDiv .invalidMenu{ + color:#aaa; +} +/* ѡƫ DIV */ +.WdateDiv .YMenu{ + margin-top:16px; + +} +/* ѡƫ DIV */ +.WdateDiv .MMenu{ + margin-top:16px; + *width:62px; +} +/* ʱѡλ DIV */ +.WdateDiv .hhMenu{ + margin-top:-90px; + margin-left:26px; +} +/* ѡλ DIV */ +.WdateDiv .mmMenu{ + margin-top:-46px; + margin-left:26px; +} +/* ѡλ DIV */ +.WdateDiv .ssMenu{ + margin-top:-24px; + margin-left:26px; +} + +/**************************** + * + ***************************/ + .WdateDiv .Wweek { + text-align:center; + background:#DAF3F5; + border-right:#BDEBEE 1px solid; + } +/**************************** + * , + ***************************/ +/* TR */ +.WdateDiv .MTitle{ + background-color:#BDEBEE; +} +/* TABLE */ +.WdateDiv .WdayTable{ + line-height:20px; + border:#c5d9e8 1px solid; +} +/* ڸʽ TD */ +.WdateDiv .Wday{ + cursor:pointer; +} +/* ڸmouseoverʽ TD */ +.WdateDiv .WdayOn{ + cursor:pointer; + background-color:#C0EBEF; +} +/* ĩڸʽ TD */ +.WdateDiv .Wwday{ + cursor:pointer; + color:#FF2F2F; +} +/* ĩڸmouseoverʽ TD */ +.WdateDiv .WwdayOn{ + cursor:pointer; + color:#000; + background-color:#C0EBEF; +} +.WdateDiv .Wtoday{ + cursor:pointer; + color:blue; +} +.WdateDiv .Wselday{ + background-color:#A9E4E9; +} +/* ·ݵ */ +.WdateDiv .WotherDay{ + cursor:pointer; + color:#6A6AFF; +} +/* ·ݵmouseoverʽ */ +.WdateDiv .WotherDayOn{ + cursor:pointer; + background-color:#C0EBEF; +} +/* Чڵʽ,ڷΧڸʽ,ѡ */ +.WdateDiv .WinvalidDay{ + color:#aaa; +} + +/**************************** + * ʱ + ***************************/ +/* ʱ DIV */ +.WdateDiv #dpTime{ + float:left; + margin-top:3px; + margin-right:30px; +} +/* ʱ SPAN */ +.WdateDiv #dpTime #dpTimeStr{ + margin-left:1px; +} +/* ʱ INPUT */ +.WdateDiv #dpTime input{ + height:16px; + width:18px; + text-align:center; + border:#ccc 1px solid; +} +/* ʱ ʱ INPUT */ +.WdateDiv #dpTime .tB{ + border-right:0px; +} +/* ʱ ֺͼ ':' INPUT */ +.WdateDiv #dpTime .tE{ + border-left:0; + border-right:0; +} +/* ʱ INPUT */ +.WdateDiv #dpTime .tm{ + width:7px; + border-left:0; + border-right:0; +} +/* ʱұߵϰť BUTTON */ +.WdateDiv #dpTime #dpTimeUp{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -32px -16px; +} +/* ʱұߵ°ť BUTTON */ +.WdateDiv #dpTime #dpTimeDown{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -48px -16px; +} +/**************************** + * + ***************************/ + .WdateDiv #dpQS { + float:left; + margin-right:3px; + margin-top:3px; + background:url(img.gif) no-repeat 0px -16px; + width:20px; + height:20px; + cursor:pointer; + } +.WdateDiv #dpControl { + text-align:right; + margin-top:3px; +} +.WdateDiv .dpButton{ + height:20px; + width:45px; + border:#ccc 1px solid; + padding:2px; +} \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/My97DatePicker/skin/default/img.gif b/php/pic_switch_demo/static/js/My97DatePicker/skin/default/img.gif new file mode 100644 index 0000000000000000000000000000000000000000..053205d8201a3a59fb9870c6a4743fc3efd305fa GIT binary patch literal 1578 zcmeH`+f$MW0L8yg4A8uwQi_*?EFI0Au-(}$Yf8m?W;EG$nKo@ja+NL1Tea4jcp*!p z#xz<>P`7c+`wa^*R6tZzP(V!)H8t;$A?U37?Y7VRC+vARFX!bq=gjdB^gDF;iYKra z&;wtkQmNQ%c1R(COeQ~NGC!@X-L1IYFxXP4D45X9#Y#vG{O;&z3Z#Z4<8oSFA+x?V za{Tnn%#2>IZ&|L*t7Y8jifd|ntJ0009XO#-C~j&(iloKy>DgkjSTe29LF*P4Rz)>s zlR9lubIjD_(#1+*k9=rmZLzSbQZ@E*V{5&c-;ph)iRPts9Bz{4%o&bnk3?Qo|85>y zMIwzWCRiN`>GJZjNYwRAl_gh=>pw%8Y^n}|dKO1%w5(5CQ?kLa&MyMBe*G!`@#xgd zJhad%8%mfwUD?7RB_zwV-9n+TxcJZfD#rb>n2O#SVXyRsGKWe{k5&JiHju`7&x;;8 zX=mqRn${|1)AHbwV-H`x zWY%!VBNy&>$JYxurQC8-S!nN6-*1bd6|*Ju(cDTdpE7Z_rH{*QdZ*AU9yjDPi^cyi z|GV@5_8$%4)(t@fzyjR9W?w%6AR&NYWFJt?Y^5TtTrY{LS?!r9$Do3Mnj+tHLpYh# zWD(Jxy+9w6;6n2p`)^?{Gzp6(j7}kA52j9FckK z_pNGC_oRe{N_n`k2GUqo4!bS;JdZ}SXJWpEJ0%`;tcmOnfo~ZVB$@0wis7A)&MkWM zi*YID8j|kVk!5t)N%RVZt>u|lIMbyk;q*oOM#8Ggz|}RD(+*3UbrN{e+QSKMPF@3v zDP#4WQG>fSsFZ~d&gGDXaJhrW5q?=5zR9HK2Kv92L|Fi_6X_w) z3=Pz_Az@HIUwBEX>aLiJ}kGM#j_wVX#(Snb-z}VN@=1p54MEab$wzRB5iw+%tE;Dk0?L@ zv$zET51d@btHYeFN*gCB%_}aFXzq$FKxLJL`=i}s=>mrw;z5yPuqV?SbTmW(rq3r4 zj0k$d_6uYKheSrC(y}WR_1tYwhRL&8&;ZHAYXr91JTJH@D4IrLBe73-MzA#r((I7< zMjF_^iT80P&5jUlujaOj>=0Od2RaT}lmYt2HyiBPT|JH`94~m1k0}_Z^U?mLEWb97 zS literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/js/My97DatePicker/skin/whyGreen/bg.jpg b/php/pic_switch_demo/static/js/My97DatePicker/skin/whyGreen/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75516a6380f3a18d246e090d47999698e4193d6c GIT binary patch literal 307 zcma)%I}XA?3`ED-PeQVgH5(uz6x@S?0`WZ!4L6|Y8r*;uAv#(LJ`Fcn77CVOV!Xga(6BB4DrIK1H-OypPMC&9oX_}>}vF0mlTDi?z#<`+!ZctU# zVEEIggyJ}Enr3Nj+3#?t|AYS?{s>M`f&?)lCc)&-=mG*YNtFb@XTu9r1Cc8}Ah`8} kphyK!asc%NaohO^Ot2#sj4}3y?RB@F-shLmesl8oH`;+K5&!@I literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/js/My97DatePicker/skin/whyGreen/datepicker.css b/php/pic_switch_demo/static/js/My97DatePicker/skin/whyGreen/datepicker.css new file mode 100644 index 0000000..d9eb0c4 --- /dev/null +++ b/php/pic_switch_demo/static/js/My97DatePicker/skin/whyGreen/datepicker.css @@ -0,0 +1,243 @@ +/* + * My97 DatePicker 4.1 + * Ƥ:whyGreen + * Ƥ:why + */ + +/* ѡ DIV */ +.WdateDiv{ + width:180px; + background-color:#fff; + border:#C5E1E4 1px solid; + padding:2px; +} +.WdateDiv *{font-size:9pt;} + +/**************************** + * ͼ + ***************************/ +.WdateDiv .NavImg { + cursor:pointer; + width:16px; + height:16px; + margin-top:1px; +} +.WdateDiv .NavImgll { background:url(img.gif) no-repeat; } +.WdateDiv .NavImgl { background:url(img.gif) no-repeat -16px 0px; } +.WdateDiv .NavImgr { background:url(img.gif) no-repeat -32px 0px; } +.WdateDiv .NavImgrr { background:url(img.gif) no-repeat -48px 0px; } +/**************************** + * · + ***************************/ +/* · DIV */ +.WdateDiv #dpTitle{ + height:24px; + padding:1px; + border:#c5d9e8 1px solid; + background:url(bg.jpg); + margin-bottom:2px; +} +/* · INPUT */ +.WdateDiv .yminput{ + margin-top:2px; + text-align:center; + border:0px; + height:16px; + width:50px; + color:#034c50; + background-color:transparent; + cursor:pointer; +} +/* ·ýʱʽ INPUT */ +.WdateDiv .yminputfocus{ + margin-top:2px; + text-align:center; + border:#939393 1px solid; + font-weight:bold; + color:#034c50; + height:16px; + width:50px; +} +/* ˵ѡ DIV */ +.WdateDiv .menuSel{ + position:absolute; + background-color:#FFFFFF; + border:#A3C6C8 1px solid; + display:none; +} +/* ˵ʽ TD */ +.WdateDiv .menu{ + cursor:pointer; + background-color:#fff; + color:#11777C; +} +/* ˵mouseoverʽ TD */ +.WdateDiv .menuOn{ + cursor:pointer; + background-color:#BEEBEE; +} +/* ˵Чʱʽ TD */ +.WdateDiv .invalidMenu{ + color:#aaa; +} +/* ѡƫ DIV */ +.WdateDiv .YMenu{ + margin-top:16px; +} +/* ѡƫ DIV */ +.WdateDiv .MMenu{ + margin-top:16px; + *width:62px; +} +/* ʱѡλ DIV */ +.WdateDiv .hhMenu{ + margin-top:-90px; + margin-left:26px; +} +/* ѡλ DIV */ +.WdateDiv .mmMenu{ + margin-top:-46px; + margin-left:26px; +} +/* ѡλ DIV */ +.WdateDiv .ssMenu{ + margin-top:-24px; + margin-left:26px; +} + +/**************************** + * + ***************************/ + .WdateDiv .Wweek { + text-align:center; + background:#DAF3F5; + border-right:#BDEBEE 1px solid; + } +/**************************** + * , + ***************************/ + /* TR */ +.WdateDiv .MTitle{ + color:#13777e; + background-color:#bdebee; +} +/* TABLE */ +.WdateDiv .WdayTable{ + line-height:20px; + color:#13777e; + background-color:#edfbfb; + border:#BEE9F0 1px solid; +} +/* ڸʽ TD */ +.WdateDiv .Wday{ + cursor:pointer; +} +/* ڸmouseoverʽ TD */ +.WdateDiv .WdayOn{ + cursor:pointer; + background-color:#74d2d9 ; +} +/* ĩڸʽ TD */ +.WdateDiv .Wwday{ + cursor:pointer; + color:#ab1e1e; +} +/* ĩڸmouseoverʽ TD */ +.WdateDiv .WwdayOn{ + cursor:pointer; + background-color:#74d2d9; +} +.WdateDiv .Wtoday{ + cursor:pointer; + color:blue; +} +.WdateDiv .Wselday{ + background-color:#A7E2E7; +} +/* ·ݵ */ +.WdateDiv .WotherDay{ + cursor:pointer; + color:#0099CC; +} +/* ·ݵmouseoverʽ */ +.WdateDiv .WotherDayOn{ + cursor:pointer; + background-color:#C0EBEF; +} +/* Чڵʽ,ڷΧڸʽ,ѡ */ +.WdateDiv .WinvalidDay{ + color:#aaa; +} +/**************************** + * ʱ + ***************************/ +/* ʱ DIV */ +.WdateDiv #dpTime{ + +} +/* ʱ SPAN */ +.WdateDiv #dpTime #dpTimeStr{ + margin-left:1px; + color:#497F7F; +} +/* ʱ INPUT */ +.WdateDiv #dpTime input{ + height:16px; + width:18px; + text-align:center; + color:#333; + border:#61CAD0 1px solid; +} +/* ʱ ʱ INPUT */ +.WdateDiv #dpTime .tB{ + border-right:0px; +} +/* ʱ ֺͼ ':' INPUT */ +.WdateDiv #dpTime .tE{ + border-left:0; + border-right:0; +} +/* ʱ INPUT */ +.WdateDiv #dpTime .tm{ + width:7px; + border-left:0; + border-right:0; +} +/* ʱұߵϰť BUTTON */ +.WdateDiv #dpTime #dpTimeUp{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -32px -16px; +} +/* ʱұߵ°ť BUTTON */ +.WdateDiv #dpTime #dpTimeDown{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -48px -16px; +} +/**************************** + * + ***************************/ + .WdateDiv #dpQS { + float:left; + margin-right:3px; + margin-top:3px; + background:url(img.gif) no-repeat 0px -16px; + width:20px; + height:20px; + cursor:pointer; + } +.WdateDiv #dpControl { + text-align:right; + margin-top:3px; +} +.WdateDiv .dpButton{ + height:20px; + width:45px; + padding:2px; + border:#38B1B9 1px solid; + background-color:#CFEBEE; + color:#08575B; +} \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/My97DatePicker/skin/whyGreen/img.gif b/php/pic_switch_demo/static/js/My97DatePicker/skin/whyGreen/img.gif new file mode 100644 index 0000000000000000000000000000000000000000..4003f20fb1197edf0433ff99759cb6399d0f99f9 GIT binary patch literal 1679 zcmV;A25|XDNk%w1VL$*R0QUd@0000>z|tkRw@#l!oyCyW^wMhEO#o(Q*4EZ-x4K%c zP*b}=vCr2~x5%c%&Qh|zhqr?>W@b{St~9N+)b#(R%-5i?yE~z#=H}?2w6c`X)wSH? zVX(c6ot;9c!Mx1O#Pj)gylXe5w0^?DK(n}Qv9$m8|Ff^YsngM-(W7*QjZCCI*xcp! z_xGQ#u6)JRzV5Qk(A8vheD3bi_@$kld7x(9h-V@Bjq>_W%FS z@A`Vmb5y*=-QM7b(bSsVj&0D@RntqP*yeEWV(S0(H?y@ot+UeU@$mEf$@9gxx3`nh z;m6j|YQW7gw!8NK`OWn2e$CNL#m$n$k9Y7>EUvuF%*>asnXTcW(B;HqKl zS-;J=yvMh=y2ak!yYKu01pn9*~nwU#=F13gwuo(001$yx6s(zo73t=uf4Cdx@Oy1guu%}t+!pE zu;csxaL{Db^vmDl)k?I&IJU*r@aZnM$KBxRu-@Lr&e8Dx@7C}4c<@17vcJml#OMCx zwd3KH#J>Fg`K!CIuG8bc#>@Z@33=GmuD!(7?9wx@$(_vHwZ*k{;!%#YgNxGE01q8= zzPgg2pmN5@fy;D7sIGCn%Y?|uLbbim-QHTm$EVKS)Ysn4)!5(m+*i3mz1G&9%h6Fbx7R*o7! z!kxSJqTRcA^XlCj(L@VNmV}rvp=+=%S+eXX9s&l;42C}>&|rgv4G94vpn2LnkWH9Y zhpND;aO~JJf3<22G_iOvy+)0!1-p?X(3aaRax=Ve>JEr;jw)yo^x_2(A_FIc`Gzms zyE5G_T^iG%!9XEfgkYDI3PvP7dUEXl0`dt%(i(P+;5H0uD1yr0~QOP{bn2I%G6v14AN&u}B&^Xwbzk^AYjD0|T+b3oh?y zFhVXRaNy1=tgtemV0OS^1~VZ%5eOuru)snulB@#-dJFM^NI&lkGYlrlX!1ZjO*9eW zG+lIo2_|2BQG*0*WI2!>*cH$NDq=*!ju6zG@X9NnK(fguUTndT0R3cwg9GZ+Nkjws zxZ=t{e5BFEGd}nN007hQ(+p<<>9Peqf9x;{CpQR@MGX5u0ZBEV91%w!LNJ8H6}eQP z1UH?ugN!K;Ab|v*8YFW@EeT-%!hjr!OaKiu1KFSp6XqD81{aEWF@zL6)Z+yd)Q}Ow zCS))q3@Byz^TH!2;DCb>ZPZc6K>Cm}MIHf^a*iM*Owfcr`V16K5yf~z%O0bk;fE9% zs9*swF3f=e0)}9~5DD|VaEUZytfK0{s|r+#KZLBZN+<{)JWwFpFtSG!23)fO59M?q zLkBJ>;{q9Eh|=srZ7kso5%S0bam2|@FaZhWTEPd*iQdv^5DO?k03d*TAPx)n6urd^ zCiCUc5L+}7i2?&aki;BwL<0pn=Yc_uA&)7|&^>Q#!GtkROcG5jR(pZY5Nwly1*cv! z1jZYKsZtKru|VO47g_ggaRdgs#Jv!9x^7WPFI2=J>=26WdjuJ`39ir}E!?sO7$&eo zOd%{(LIwsH^brRJw@oNHLfWOCIs$!QfyEIqkTHYmr=zZV>MhtX!|pS*kX`DvA2itT Z!{27S@w5kD(DBS4ugmktD_>AR06TP*k#+z8 literal 0 HcmV?d00001 diff --git a/php/pic_switch_demo/static/js/changeRowColor.js b/php/pic_switch_demo/static/js/changeRowColor.js new file mode 100644 index 0000000..03f2365 --- /dev/null +++ b/php/pic_switch_demo/static/js/changeRowColor.js @@ -0,0 +1,32 @@ +/*jquery实现隔行换色 + * *author:hanshaobo + * *date:2013.12.05 + * *入参: + * *integer:是奇数偶数,奇数:odd;偶数:even + * *tableId:隔行换色所在的table的id + * *trClass:隔行换色所在的table下tr的class名 + * */ +function getColor(integer,tableId,trClass){ + //奇数行换色 + if(integer=='odd'){ + //判断奇数行是否有class,如果没有添加class + var len = $("#"+tableId+" tr:odd").hasClass(trClass); + if(len == false){ + $("#"+tableId+" tr:odd").addClass(trClass); + }else{ + return false; + } + //偶数行换色 + }else if(integer='even'){ + //判断偶数行是否有class,如果没有添加class + var len = $("#"+tableId+" tr:even").hasClass('class'); + if(len == false){ + $("#"+tableId+" tr:even").attr('class',trClass); + $("#"+tableId+" tr:first").attr('class',''); + }else{ + return false; + } + } + +} + diff --git a/php/pic_switch_demo/static/js/common.js b/php/pic_switch_demo/static/js/common.js new file mode 100644 index 0000000..051a837 --- /dev/null +++ b/php/pic_switch_demo/static/js/common.js @@ -0,0 +1,131 @@ +/* + * js公共函数 + * 注意:在使用本文件中函数的时候需要在加载本文件之前先加载jquery库文件 + * + * @author:Liangxifeng + * @date:2014-02-03 + */ + +/* +* 表单中默认值的处理 +* +* @author -- Liangxifeng +* @date -- 2014-02-03 +* @param -- sureValue:input框中必填值,比如:必填 +* optionValue:input框中选添值,比如:选填 +* inputClass:input输入正确内容的class值,比如:xnInputColor +* @return -- none +* @example -- defaultValue('必填','选填','xnInoputColor') +*/ +function defaultValue(sureValue,optionValue,inputClass) +{ + var flag = 1; + $(":text,textarea").bind({ + focus:function(){ + if($(this).val() == sureValue || $(this).val() == optionValue) + { + flag = $(this).val() == optionValue ? 0 : 1; + $(this).val('').removeClass(inputClass); + } + }, + blur:function(){ + var value = 0==flag ? optionValue : sureValue; + if($(this).val() == '') $(this).val(value).addClass(inputClass); + } + }); +} + +/*jquery实现隔行换色 + * + * @author -- hanshaobo + * @date -- 2013.12.05 + * #param -- integer:是奇数偶数,奇数:odd;偶数:even + * tableId:隔行换色所在的table的id + * trClass:隔行换色所在的table下tr的class名 +*/ +function getColor(integer,tableId,trClass){ + //奇数行换色 + if(integer=='odd'){ + //判断奇数行是否有class,如果没有添加class + var len = $("#"+tableId+" tr:odd").hasClass(trClass); + if(len == false){ + $("#"+tableId+" tr:odd").addClass(trClass); + }else{ + return false; + } + //偶数行换色 + }else if(integer='even'){ + //判断偶数行是否有class,如果没有添加class + var len = $("#"+tableId+" tr:even").hasClass('class'); + if(len == false){ + $("#"+tableId+" tr:even").attr('class',trClass); + $("#"+tableId+" tr:first").attr('class',''); + }else{ + return false; + } + } + +} + +/*JS实现验证金额格式,最大:七位整数,两位小数,小数点不算位数;整数前不可加0,如:002.22,是不行的 + * + * @author -- 张欢 + * @date -- 2014.6.18 + * + * #param -- inputId:针对input框的ID +*/ +function regPrice(inputId) +{ //判断是否有值,无值的话,返回False + var price = document.getElementById(inputId).value; + if(price > 0) + { //判断金额格式 + teseprice = /^(0|[1-9][0-9]{0,6})(\.[0-9]{1,2})?$/; + return teseprice.test(price); + } + return false; +} + +/*javascript实现验证字符长度 + * + * @author -- zhanghuan + * @date -- 2014.6.18 + * #param -- inputId:针对input框的ID + * number:字符个数 +*/ +function stringLength(inputId,number) +{ + var inputValue = document.getElementById(inputId).value; + var returnValue = inputValue.length > number ? false : true; + return returnValue; +} + +/*javascript实现列表页跳页功能 + * + * @author -- zhanghuan + * @data -- 2014.07.08 + * @param -- jumpid: jumpid针对跳页input框 + * @param -- urlone: 组成跳转链接的第一部分,例如:index.php/data/ceshi/index/goodsname=&goodsstatus= + * @param -- totalpage: 获取分页的总页数 例如:totalpage为25页 + * @param -- per_page: + */ +function jumpGo(jumpId,urlone,totalpage,per_page) +{ + var jumpval = parseInt($('#'+jumpId+'').val()); + reg = /^\d+$/; + //获取总页数 + var totalpage = parseInt(totalpage); + //当输入页码格式正确,输入页码大于0同时满足 输入页码小于最大页码 + if(reg.test(jumpval) && jumpval > 0 ) + { + var offerset = 0; + if(jumpval <= totalpage) + { + offerset = (jumpval-1)*10; + } + else + { + offerset = (totalpage-1)*10; + } + window.location.href=""+urlone+"&"+per_page+"="+offerset+"&go="+jumpval; + } +} \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/home_page/DD_belatedPNG_0.0.8a-min.js b/php/pic_switch_demo/static/js/home_page/DD_belatedPNG_0.0.8a-min.js new file mode 100644 index 0000000..6062fb3 --- /dev/null +++ b/php/pic_switch_demo/static/js/home_page/DD_belatedPNG_0.0.8a-min.js @@ -0,0 +1,13 @@ +/** +* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML . +* Author: Drew Diller +* Email: drew.diller@gmail.com +* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/ +* Version: 0.0.8a +* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license +* +* Example usage: +* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector +* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement +**/ +var DD_belatedPNG={ns:"DD_belatedPNG",imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")}},createVmlStyleSheet:function(){var b,a;b=document.createElement("style");b.setAttribute("media","screen");document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);if(b.styleSheet){b=b.styleSheet;b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");b.addRule(this.ns+"\\:shape","position:absolute;");b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");this.screenStyleSheet=b;a=document.createElement("style");a.setAttribute("media","print");document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule(this.ns+"\\:*","{display: none !important;}");a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")}},readPropertyChange:function(){var b,c,a;b=event.srcElement;if(!b.vmlInitiated){return}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1){DD_belatedPNG.applyVML(b)}if(event.propertyName=="style.display"){c=(b.currentStyle.display=="none")?"none":"block";for(a in b.vml){if(b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}}if(event.propertyName.search("filter")!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity:function(b){if(b.currentStyle.filter.search("lpha")!=-1){var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover:function(a){setTimeout(function(){DD_belatedPNG.applyVML(a)},1)},fix:function(a){if(this.screenStyleSheet){var c,b;c=a.split(",");for(b=0;bn.H){i.B=n.H}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"}else{d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f=="X");switch(a){case"left":case"top":d[f]=0;break;case"center":d[f]=0.5;break;case"right":case"bottom":d[f]=1;break;default:if(a.search("%")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior="none";var g,b,f,a,d;if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR"){return}c.isImg=false;if(c.nodeName=="IMG"){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility="hidden"}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+":"+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor="none";c.vml.image.fill.type="tile";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand("BackgroundImageCache",false,true)}catch(r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet(); \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/home_page/iepng.js b/php/pic_switch_demo/static/js/home_page/iepng.js new file mode 100644 index 0000000..222fb18 --- /dev/null +++ b/php/pic_switch_demo/static/js/home_page/iepng.js @@ -0,0 +1,3 @@ +var DD_belatedPNG={ns:"DD_belatedPNG",imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")}},createVmlStyleSheet:function(){var b,a;b=document.createElement("style");b.setAttribute("media","screen");document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);if(b.styleSheet){b=b.styleSheet;b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");b.addRule(this.ns+"\\:shape","position:absolute;");b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");this.screenStyleSheet=b;a=document.createElement("style");a.setAttribute("media","print");document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule(this.ns+"\\:*","{display: none !important;}");a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")}},readPropertyChange:function(){var b,c,a;b=event.srcElement;if(!b.vmlInitiated){return}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1){DD_belatedPNG.applyVML(b)}if(event.propertyName=="style.display"){c=(b.currentStyle.display=="none")?"none":"block";for(a in b.vml){if(b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}}if(event.propertyName.search("filter")!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity:function(b){if(b.currentStyle.filter.search("lpha")!=-1){var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover:function(a){setTimeout(function(){DD_belatedPNG.applyVML(a)},1)},fix:function(a){if(this.screenStyleSheet){var c,b;c=a.split(",");for(b=0;bn.H){i.B=n.H}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"}else{d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f=="X");switch(a){case"left":case"top":d[f]=0;break;case"center":d[f]=0.5;break;case"right":case"bottom":d[f]=1;break;default:if(a.search("%")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior="none";var g,b,f,a,d;if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR"){return}c.isImg=false;if(c.nodeName=="IMG"){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility="hidden"}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+":"+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor="none";c.vml.image.fill.type="tile";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand("BackgroundImageCache",false,true)}catch(r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet(); + +DD_belatedPNG.fix('*'); \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/home_page/jquery-1.7.2.min.js b/php/pic_switch_demo/static/js/home_page/jquery-1.7.2.min.js new file mode 100644 index 0000000..16ad06c --- /dev/null +++ b/php/pic_switch_demo/static/js/home_page/jquery-1.7.2.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.2 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
      a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="
      "+""+"
      ",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
      t
      ",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
      ",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
      ","
      "]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
      ").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/home_page/jquery.lazyload.js b/php/pic_switch_demo/static/js/home_page/jquery.lazyload.js new file mode 100644 index 0000000..0b6bdeb --- /dev/null +++ b/php/pic_switch_demo/static/js/home_page/jquery.lazyload.js @@ -0,0 +1,164 @@ +/* + * Lazy Load - jQuery plugin for lazy loading images + * + * Copyright (c) 2007-2009 Mika Tuupola + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Project home: + * http://www.appelsiini.net/projects/lazyload + * + * Version: 1.5.0 + * + */ +(function($) { + + $.fn.lazyload = function(options) { + var settings = { + threshold : 0, + failurelimit : 0, + event : "scroll", + effect : "show", + container : window + }; + + if(options) { + $.extend(settings, options); + } + + /* Fire one scroll event per scroll. Not one scroll event per image. */ + var elements = this; + if ("scroll" == settings.event) { + $(settings.container).bind("scroll", function(event) { + + var counter = 0; + elements.each(function() { + if ($.abovethetop(this, settings) || + $.leftofbegin(this, settings)) { + /* Nothing. */ + } else if (!$.belowthefold(this, settings) && + !$.rightoffold(this, settings)) { + $(this).trigger("appear"); + } else { + if (counter++ > settings.failurelimit) { + return false; + } + } + }); + /* Remove image from array so it is not looped next time. */ + var temp = $.grep(elements, function(element) { + return !element.loaded; + }); + elements = $(temp); + }); + } + + this.each(function() { + var self = this; + + /* Save original only if it is not defined in HTML. */ + if (undefined == $(self).attr("original")) { + $(self).attr("original", $(self).attr("original")); + } + + if ("scroll" != settings.event || + undefined == $(self).attr("src") || + settings.placeholder == $(self).attr("src") || + ($.abovethetop(self, settings) || + $.leftofbegin(self, settings) || + $.belowthefold(self, settings) || + $.rightoffold(self, settings) )) { + + if (settings.placeholder) { + $(self).attr("src", settings.placeholder); + } else { + $(self).removeAttr("src"); + } + self.loaded = false; + } else { + self.loaded = true; + } + + /* When appear is triggered load original image. */ + $(self).one("appear", function() { + if (!this.loaded) { + $("") + .bind("load", function() { + $(self) + .hide() + .attr("src", $(self).attr("original")) + [settings.effect](settings.effectspeed); + self.loaded = true; + }) + .attr("src", $(self).attr("original")); + }; + }); + + /* When wanted event is triggered load original image */ + /* by triggering appear. */ + if ("scroll" != settings.event) { + $(self).bind(settings.event, function(event) { + if (!self.loaded) { + $(self).trigger("appear"); + } + }); + } + }); + + /* Force initial check if images should appear. */ + $(settings.container).trigger(settings.event); + + return this; + + }; + + /* Convenience methods in jQuery namespace. */ + /* Use as $.belowthefold(element, {threshold : 100, container : window}) */ + + $.belowthefold = function(element, settings) { + if (settings.container === undefined || settings.container === window) { + var fold = $(window).height() + $(window).scrollTop(); + } else { + var fold = $(settings.container).offset().top + $(settings.container).height(); + } + return fold <= $(element).offset().top - settings.threshold; + }; + + $.rightoffold = function(element, settings) { + if (settings.container === undefined || settings.container === window) { + var fold = $(window).width() + $(window).scrollLeft(); + } else { + var fold = $(settings.container).offset().left + $(settings.container).width(); + } + return fold <= $(element).offset().left - settings.threshold; + }; + + $.abovethetop = function(element, settings) { + if (settings.container === undefined || settings.container === window) { + var fold = $(window).scrollTop(); + } else { + var fold = $(settings.container).offset().top; + } + return fold >= $(element).offset().top + settings.threshold + $(element).height(); + }; + + $.leftofbegin = function(element, settings) { + if (settings.container === undefined || settings.container === window) { + var fold = $(window).scrollLeft(); + } else { + var fold = $(settings.container).offset().left; + } + return fold >= $(element).offset().left + settings.threshold + $(element).width(); + }; + /* Custom selectors for your convenience. */ + /* Use as $("img:below-the-fold").something() */ + + $.extend($.expr[':'], { + "below-the-fold" : "$.belowthefold(a, {threshold : 0, container: window})", + "above-the-fold" : "!$.belowthefold(a, {threshold : 0, container: window})", + "right-of-fold" : "$.rightoffold(a, {threshold : 0, container: window})", + "left-of-fold" : "!$.rightoffold(a, {threshold : 0, container: window})" + }); + +})(jQuery); \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/home_page/ljlj_script.js b/php/pic_switch_demo/static/js/home_page/ljlj_script.js new file mode 100644 index 0000000..be9d4ab --- /dev/null +++ b/php/pic_switch_demo/static/js/home_page/ljlj_script.js @@ -0,0 +1,241 @@ +// JavaScript Document + +$(function(){ + /*nav*/ + $(".ljljHeaderNavClassify > a:not(:first)").click(function(){ + $(this).addClass("curState").siblings().removeClass("curState"); + }) +}) + + +/*left nav logo*/ +var sum=23; +function showBg(id) +{ + var url_bath = $('#url_bath').val(); + var bg=document.getElementById("logo"+id); + for(var i=1;i<=sum;i++){ + if(i==id){ + bg.style.background="url("+url_bath+"/static/images/home_page/left_nav_06.png) no-repeat"; + } + } +} +function leaveBg(id) +{ + var url_bath = $('#url_bath').val(); + var bg=document.getElementById("logo"+id); + for(var i=1;i<=sum;i++){ + if(1<=id && id<=5){ + bg.style.background="url("+url_bath+"/static/images/home_page/left_nav_03.png)"; + }else if(6<=id && id<=9){ + bg.style.background="none"; + }else if(10<=id && id<=14){ + bg.style.background="url("+url_bath+"/static/images/home_page/left_nav_03.png)"; + }else if(15<=id && id<=18){ + bg.style.background="none"; + }else if(19<=id && id<=23){ + bg.style.background="url("+url_bath+"/static/images/home_page/left_nav_03.png)"; + } + } +} +/*left nav*/ + +function showNav(id){ + + var nav=document.getElementById("nav"+id); + var hide=document.getElementById("hide"+id); + nav.style.borderLeft="#990066 solid 3px"; + $(hide).show(); +} + +function hideNav(id){ + + var nav=document.getElementById("nav"+id); + if(id%2!=0){ + nav.style.borderLeft="#fff solid 3px"; + }else + { + nav.style.borderLeft="#EBEBEB solid 3px"; + } + $('#hide'+id).hide(); +} +/*吸顶*/ +$(window).scroll(function(){ + var top=$(document).scrollTop(); + if(top >=150){ + $(".ContentBannerContentLeft").addClass("autoTop"); + }else{ + $(".ContentBannerContentLeft").removeClass("autoTop") + } + +}) +/*名品家具处的幻灯片*/ +var show1=document.getElementById("showSmallImg"); +var point=$(show1).find("ul:last").find("li").length; +function showSmall(id){ + var url_bath = $('#url_bath').val(); + for(i=0;if*)1B2p!?g-xi1((Eh+i z#(Mch>H3D2mX;thjEr=FDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaozEwNPs zx)kDt+yc0Ixnujbty?y4+PGo;y0vRouUffc`Ld-;7B5=3VE(+hb7s$)Ib-^? zsZ%CTnmD1queYbWtFxoMt+l1Osj;EHuC}JSsEZKEj1-M zDKQ~FE;c4QDl#HGEHorIC@{d^&)3J>%hSW%&DF)($").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
      a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="
      "+""+"
      ",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
      t
      ",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
      ",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
      ","
      "]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
      ").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/jquery-1.8.1.min.js b/php/pic_switch_demo/static/js/jquery-1.8.1.min.js new file mode 100644 index 0000000..f6cb2a6 --- /dev/null +++ b/php/pic_switch_demo/static/js/jquery-1.8.1.min.js @@ -0,0 +1,9301 @@ +/*! + * jQuery JavaScript Library v1.8.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: Thu Aug 30 2012 17:17:22 GMT-0400 (Eastern Daylight Time) + */ +(function( window, undefined ) { +var + // A central reference to the root jQuery(document) + rootjQuery, + + // The deferred used on DOM ready + readyList, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + location = window.location, + navigator = window.navigator, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Save a reference to some core methods + core_push = Array.prototype.push, + core_slice = Array.prototype.slice, + core_indexOf = Array.prototype.indexOf, + core_toString = Object.prototype.toString, + core_hasOwn = Object.prototype.hasOwnProperty, + core_trim = String.prototype.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, + + // Used for detecting and trimming whitespace + core_rnotwhite = /\S/, + core_rspace = /\s+/, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // The ready event handler and self cleanup method + DOMContentLoaded = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + } else if ( document.readyState === "complete" ) { + // we're here because readyState === "complete" in oldIE + // which is good enough for us to call the dom ready! + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context && context.nodeType ? context.ownerDocument || context : document ); + + // scripts is true for back-compat + selector = jQuery.parseHTML( match[1], doc, true ); + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + this.attr.call( selector, context, true ); + } + + return jQuery.merge( this, selector ); + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.8.1", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ), + "slice", core_slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ core_toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // scripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, scripts ) { + var parsed; + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + scripts = context; + context = 0; + } + context = context || document; + + // Single tag + if ( (parsed = rsingleTag.exec( data )) ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] ); + return jQuery.merge( [], + (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes ); + }, + + parseJSON: function( data ) { + if ( !data || typeof data !== "string") { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && core_rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var name, + i = 0, + length = obj.length, + isObj = length === undefined || jQuery.isFunction( obj ); + + if ( args ) { + if ( isObj ) { + for ( name in obj ) { + if ( callback.apply( obj[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( obj[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in obj ) { + if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var type, + ret = results || []; + + if ( arr != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + type = jQuery.type( arr ); + + if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) { + core_push.call( ret, arr ); + } else { + jQuery.merge( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, + ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready, 1 ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.split( core_rspace ), function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" && ( !options.unique || !self.has( arg ) ) ) { + list.push( arg ); + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + return jQuery.inArray( fn, list ) > -1; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ]( jQuery.isFunction( fn ) ? + function() { + var returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + } : + newDefer[ action ] + ); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return typeof obj === "object" ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] = list.fire + deferred[ tuple[0] ] = list.fire; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + eventName, + i, + isSupported, + clickFn, + div = document.createElement("div"); + + // Preliminary tests + div.setAttribute( "className", "t" ); + div.innerHTML = "
      a"; + + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + a.style.cssText = "top:1px;float:left;opacity:.5"; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: ( document.compatMode === "CSS1Compat" ), + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", clickFn = function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent("onclick"); + div.detachEvent( "onclick", clickFn ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + input.setAttribute( "checked", "checked" ); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: true, + change: true, + focusin: true + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + // Run tests that need a body at doc ready + jQuery(function() { + var container, div, tds, marginDiv, + divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
      t
      "; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // NOTE: To any future maintainer, we've window.getComputedStyle + // because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = document.createElement("div"); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
      "; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + container.style.zoom = 1; + } + + // Null elements to avoid leaks in IE + body.removeChild( container ); + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + fragment.removeChild( div ); + all = a = select = opt = input = fragment = div = null; + + return support; +})(); +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + deletedIds: [], + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = jQuery.deletedIds.pop() || ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery.removeData( elem, type + "queue", true ); + jQuery.removeData( elem, key, true ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, fixSpecified, + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea|)$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( core_rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var removes, className, elem, c, cl, i, l; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + if ( (value && typeof value === "string") || value === undefined ) { + removes = ( value || "" ).split( core_rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + if ( elem.nodeType === 1 && elem.className ) { + + className = (" " + elem.className + " ").replace( rclass, " " ); + + // loop over each item in the removal list + for ( c = 0, cl = removes.length; c < cl; c++ ) { + // Remove until there is nothing to remove, + while ( className.indexOf(" " + removes[ c ] + " ") > -1 ) { + className = className.replace( " " + removes[ c ] + " " , " " ); + } + } + elem.className = value ? jQuery.trim( className ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( core_rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val, + self = jQuery(this); + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9 + attrFn: {}, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + + attrNames = value.split( core_rspace ); + + for ( ; i < attrNames.length; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.value = value + "" ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, + rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var t, tns, type, origType, namespaces, origCount, + j, events, special, eventType, handleObj, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, "events", true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, + type = event.type || event, + namespaces = []; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + for ( old = elem; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old === (elem.ownerDocument || document) ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related, + handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = []; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + selMatch = {}; + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = jQuery( sel, this ).index( cur ) >= 0; + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8) + event.metaKey = !!event.metaKey; + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 – + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === "undefined" ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "_submit_attached" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "_submit_attached", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "_change_attached", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function( window, undefined ) { + +var dirruns, + cachedruns, + assertGetIdNotName, + Expr, + getText, + isXML, + contains, + compile, + sortOrder, + hasDuplicate, + + baseHasDuplicate = true, + strundefined = "undefined", + + expando = ( "sizcache" + Math.random() ).replace( ".", "" ), + + document = window.document, + docElem = document.documentElement, + done = 0, + slice = [].slice, + push = [].push, + + // Augment a function for special use by Sizzle + markFunction = function( fn, value ) { + fn[ expando ] = value || true; + return fn; + }, + + createCache = function() { + var cache = {}, + keys = []; + + return markFunction(function( key, value ) { + // Only keep the most recent entries + if ( keys.push( key ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + + return (cache[ key ] = value); + }, cache ); + }, + + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + + // Regex + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors) + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments not in parens/brackets, + // then attribute selectors and non-pseudos (denoted by :), + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)", + + // For matchExpr.POS and matchExpr.needsContext + pos = ":(nth|eq|gt|lt|first|last|even|odd)(?:\\(((?:-\\d)?\\d*)\\)|)(?=[^-]|$)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, + + rnot = /^:not/, + rsibling = /[\x20\t\r\n\f]*[+~]/, + rendsWithNot = /:not\($/, + + rheader = /h\d/i, + rinputs = /input|select|textarea|button/i, + + rbackslash = /\\(?!\\)/g, + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|nth|last|first)-child(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "POS": new RegExp( pos, "ig" ), + // For use in libraries implementing .is() + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" ) + }, + + // Support + + // Used for testing something on an element + assert = function( fn ) { + var div = document.createElement("div"); + + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } + }, + + // Check if getElementsByTagName("*") returns only elements + assertTagNameNoComments = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }), + + // Check if getAttribute returns normalized href attributes + assertHrefNotNormalized = assert(function( div ) { + div.innerHTML = ""; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }), + + // Check if attributes should be retrieved by attribute nodes + assertAttributes = assert(function( div ) { + div.innerHTML = ""; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }), + + // Check if getElementsByClassName can be trusted + assertUsableClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = ""; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }), + + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by ID + assertUsableName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "
      "; + docElem.insertBefore( div, docElem.firstChild ); + + // Test + var pass = document.getElementsByName && + // buggy browsers will return fewer than the correct 2 + document.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + document.getElementsByName( expando + 0 ).length; + assertGetIdNotName = !document.getElementById( expando ); + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + +// If slice is not available, provide a backup +try { + slice.call( docElem.childNodes, 0 )[0].nodeType; +} catch ( e ) { + slice = function( i ) { + var elem, results = []; + for ( ; (elem = this[i]); i++ ) { + results.push( elem ); + } + return results; + }; +} + +function Sizzle( selector, context, results, seed ) { + results = results || []; + context = context || document; + var match, elem, xml, m, + nodeType = context.nodeType; + + if ( nodeType !== 1 && nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + xml = isXML( context ); + + if ( !xml && !seed ) { + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + } + + // All others + return select( selector, context, results, seed, xml ); +} + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + return Sizzle( expr, null, null, [ elem ] ).length > 0; +}; + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + } else { + + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } + return ret; +}; + +isXML = Sizzle.isXML = function isXML( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +// Element contains another +contains = Sizzle.contains = docElem.contains ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) ); + } : + docElem.compareDocumentPosition ? + function( a, b ) { + return b && !!( a.compareDocumentPosition( b ) & 16 ); + } : + function( a, b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + return false; + }; + +Sizzle.attr = function( elem, name ) { + var attr, + xml = isXML( elem ); + + if ( !xml ) { + name = name.toLowerCase(); + } + if ( Expr.attrHandle[ name ] ) { + return Expr.attrHandle[ name ]( elem ); + } + if ( assertAttributes || xml ) { + return elem.getAttribute( name ); + } + attr = elem.getAttributeNode( name ); + return attr ? + typeof elem[ name ] === "boolean" ? + elem[ name ] ? name : null : + attr.specified ? attr.value : null : + null; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + order: new RegExp( "ID|TAG" + + (assertUsableName ? "|NAME" : "") + + (assertUsableClassName ? "|CLASS" : "") + ), + + // IE6/7 return a modified href + attrHandle: assertHrefNotNormalized ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }, + + find: { + "ID": assertGetIdNotName ? + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + } : + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }, + + "TAG": assertTagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + var elem, + tmp = [], + i = 0; + + for ( ; (elem = results[i]); i++ ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }, + + "NAME": function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }, + + "CLASS": function( className, context, xml ) { + if ( typeof context.getElementsByClassName !== strundefined && !xml ) { + return context.getElementsByClassName( className ); + } + } + }, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( rbackslash, "" ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr.CHILD + 1 type (only|nth|...) + 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 3 xn-component of xn+y argument ([+-]?\d*n|) + 4 sign of xn-component + 5 x of xn-component + 6 sign of y-component + 7 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1] === "nth" ) { + // nth-child requires argument + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) ); + match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" ); + + // other types prohibit arguments + } else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match, context, xml ) { + var unquoted, excess; + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] ) { + match[2] = match[3]; + } else if ( (unquoted = match[4]) ) { + // Only check arguments that contain a pseudo + if ( rpseudo.test(unquoted) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, context, xml, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + unquoted = unquoted.slice( 0, excess ); + match[0] = match[0].slice( 0, excess ); + } + match[2] = unquoted; + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + "ID": assertGetIdNotName ? + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + return elem.getAttribute("id") === id; + }; + } : + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === id; + }; + }, + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + nodeName = nodeName.replace( rbackslash, "" ).toLowerCase(); + + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ expando ][ className ]; + if ( !pattern ) { + pattern = classCache( className, new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)") ); + } + return function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }; + }, + + "ATTR": function( name, operator, check ) { + if ( !operator ) { + return function( elem ) { + return Sizzle.attr( elem, name ) != null; + }; + } + + return function( elem ) { + var result = Sizzle.attr( elem, name ), + value = result + ""; + + if ( result == null ) { + return operator === "!="; + } + + switch ( operator ) { + case "=": + return value === check; + case "!=": + return value !== check; + case "^=": + return check && value.indexOf( check ) === 0; + case "*=": + return check && value.indexOf( check ) > -1; + case "$=": + return check && value.substr( value.length - check.length ) === check; + case "~=": + return ( " " + value + " " ).indexOf( check ) > -1; + case "|=": + return value === check || value.substr( 0, check.length + 1 ) === check + "-"; + } + }; + }, + + "CHILD": function( type, argument, first, last ) { + + if ( type === "nth" ) { + var doneName = done++; + + return function( elem ) { + var parent, diff, + count = 0, + node = elem; + + if ( first === 1 && last === 0 ) { + return true; + } + + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.sizset) ) { + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.sizset = ++count; + if ( node === elem ) { + break; + } + } + } + + parent[ expando ] = doneName; + } + + diff = elem.sizset - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + }; + } + + return function( elem ) { + var node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + } + }; + }, + + "PSEUDO": function( pseudo, argument, context, xml ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + var args, + fn = Expr.pseudos[ pseudo ] || Expr.pseudos[ pseudo.toLowerCase() ]; + + if ( !fn ) { + Sizzle.error( "unsupported pseudo: " + pseudo ); + } + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( !fn[ expando ] ) { + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return function( elem ) { + return fn( elem, 0, args ); + }; + } + return fn; + } + + return fn( argument, context, xml ); + } + }, + + pseudos: { + "not": markFunction(function( selector, context, xml ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var matcher = compile( selector.replace( rtrim, "$1" ), context, xml ); + return function( elem ) { + return !matcher( elem ); + }; + }), + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + var nodeType; + elem = elem.firstChild; + while ( elem ) { + if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) { + return false; + } + elem = elem.nextSibling; + } + return true; + }, + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "text": function( elem ) { + var type, attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + (type = elem.type) === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type ); + }, + + // Input types + "radio": createInputPseudo("radio"), + "checkbox": createInputPseudo("checkbox"), + "file": createInputPseudo("file"), + "password": createInputPseudo("password"), + "image": createInputPseudo("image"), + + "submit": createButtonPseudo("submit"), + "reset": createButtonPseudo("reset"), + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "focus": function( elem ) { + var doc = elem.ownerDocument; + return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href); + }, + + "active": function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + + setFilters: { + "first": function( elements, argument, not ) { + return not ? elements.slice( 1 ) : [ elements[0] ]; + }, + + "last": function( elements, argument, not ) { + var elem = elements.pop(); + return not ? elements : [ elem ]; + }, + + "even": function( elements, argument, not ) { + var results = [], + i = not ? 1 : 0, + len = elements.length; + for ( ; i < len; i = i + 2 ) { + results.push( elements[i] ); + } + return results; + }, + + "odd": function( elements, argument, not ) { + var results = [], + i = not ? 0 : 1, + len = elements.length; + for ( ; i < len; i = i + 2 ) { + results.push( elements[i] ); + } + return results; + }, + + "lt": function( elements, argument, not ) { + return not ? elements.slice( +argument ) : elements.slice( 0, +argument ); + }, + + "gt": function( elements, argument, not ) { + return not ? elements.slice( 0, +argument + 1 ) : elements.slice( +argument + 1 ); + }, + + "eq": function( elements, argument, not ) { + var elem = elements.splice( +argument, 1 ); + return not ? elements : elem; + } + } +}; + +function siblingCheck( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; +} + +sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + return ( !a.compareDocumentPosition || !b.compareDocumentPosition ? + a.compareDocumentPosition : + a.compareDocumentPosition(b) & 4 + ) ? -1 : 1; + } : + function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + +// Always assume the presence of duplicates if sort doesn't +// pass them to our comparison function (as in Google Chrome). +[0, 0].sort( sortOrder ); +baseHasDuplicate = !hasDuplicate; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + i = 1; + + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + + return results; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +function tokenize( selector, context, xml, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, group, i, + preFilters, filters, + checkContext = !xml && context !== document, + // Token cache should maintain spaces + key = ( checkContext ? "" : "" ) + selector.replace( rtrim, "$1" ), + cached = tokenCache[ expando ][ key ]; + + if ( cached ) { + return parseOnly ? 0 : slice.call( cached, 0 ); + } + + soFar = selector; + groups = []; + i = 0; + preFilters = Expr.preFilter; + filters = Expr.filter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ); + tokens.selector = group; + } + groups.push( tokens = [] ); + group = ""; + + // Need to make sure we're within a narrower context if necessary + // Adding a descendant combinator will generate what is needed + if ( checkContext ) { + soFar = " " + soFar; + } + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + group += match[0]; + soFar = soFar.slice( match[0].length ); + + // Cast descendant combinators to space + matched = tokens.push({ + part: match.pop().replace( rtrim, " " ), + string: match[0], + captures: match + }); + } + + // Filters + for ( type in filters ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + ( match = preFilters[ type ](match, context, xml) )) ) { + + group += match[0]; + soFar = soFar.slice( match[0].length ); + matched = tokens.push({ + part: type, + string: match.shift(), + captures: match + }); + } + } + + if ( !matched ) { + break; + } + } + + // Attach the full group as a selector + if ( group ) { + tokens.selector = group; + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + slice.call( tokenCache(key, groups), 0 ); +} + +function addCombinator( matcher, combinator, context, xml ) { + var dir = combinator.dir, + doneName = done++; + + if ( !matcher ) { + // If there is no matcher to check, check against the context + matcher = function( elem ) { + return elem === context; + }; + } + return combinator.first ? + function( elem ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 ) { + return matcher( elem ) && elem; + } + } + } : + xml ? + function( elem ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 ) { + if ( matcher( elem ) ) { + return elem; + } + } + } + } : + function( elem ) { + var cache, + dirkey = doneName + "." + dirruns, + cachedkey = dirkey + "." + cachedruns; + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 ) { + if ( (cache = elem[ expando ]) === cachedkey ) { + return elem.sizset; + } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) { + if ( elem.sizset ) { + return elem; + } + } else { + elem[ expando ] = cachedkey; + if ( matcher( elem ) ) { + elem.sizset = true; + return elem; + } + elem.sizset = false; + } + } + } + }; +} + +function addMatcher( higher, deeper ) { + return higher ? + function( elem ) { + var result = deeper( elem ); + return result && higher( result === true ? elem : result ); + } : + deeper; +} + +// ["TAG", ">", "ID", " ", "CLASS"] +function matcherFromTokens( tokens, context, xml ) { + var token, matcher, + i = 0; + + for ( ; (token = tokens[i]); i++ ) { + if ( Expr.relative[ token.part ] ) { + matcher = addCombinator( matcher, Expr.relative[ token.part ], context, xml ); + } else { + matcher = addMatcher( matcher, Expr.filter[ token.part ].apply(null, token.captures.concat( context, xml )) ); + } + } + + return matcher; +} + +function matcherFromGroupMatchers( matchers ) { + return function( elem ) { + var matcher, + j = 0; + for ( ; (matcher = matchers[j]); j++ ) { + if ( matcher(elem) ) { + return true; + } + } + return false; + }; +} + +compile = Sizzle.compile = function( selector, context, xml ) { + var group, i, len, + cached = compilerCache[ expando ][ selector ]; + + // Return a cached group function if already generated (context dependent) + if ( cached && cached.context === context ) { + return cached; + } + + // Generate a function of recursive functions that can be used to check each element + group = tokenize( selector, context, xml ); + for ( i = 0, len = group.length; i < len; i++ ) { + group[i] = matcherFromTokens(group[i], context, xml); + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers(group) ); + cached.context = context; + cached.runs = cached.dirruns = 0; + return cached; +}; + +function multipleContexts( selector, contexts, results, seed ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results, seed ); + } +} + +function handlePOSGroup( selector, posfilter, argument, contexts, seed, not ) { + var results, + fn = Expr.setFilters[ posfilter.toLowerCase() ]; + + if ( !fn ) { + Sizzle.error( posfilter ); + } + + if ( selector || !(results = seed) ) { + multipleContexts( selector || "*", contexts, (results = []), seed ); + } + + return results.length > 0 ? fn( results, argument, not ) : []; +} + +function handlePOS( groups, context, results, seed ) { + var group, part, j, groupLen, token, selector, + anchor, elements, match, matched, + lastIndex, currentContexts, not, + i = 0, + len = groups.length, + rpos = matchExpr["POS"], + // This is generated here in case matchExpr["POS"] is extended + rposgroups = new RegExp( "^" + rpos.source + "(?!" + whitespace + ")", "i" ), + // This is for making sure non-participating + // matching groups are represented cross-browser (IE6-8) + setUndefined = function() { + var i = 1, + len = arguments.length - 2; + for ( ; i < len; i++ ) { + if ( arguments[i] === undefined ) { + match[i] = undefined; + } + } + }; + + for ( ; i < len; i++ ) { + group = groups[i]; + part = ""; + elements = seed; + for ( j = 0, groupLen = group.length; j < groupLen; j++ ) { + token = group[j]; + selector = token.string; + if ( token.part === "PSEUDO" ) { + // Reset regex index to 0 + rpos.exec(""); + anchor = 0; + while ( (match = rpos.exec( selector )) ) { + matched = true; + lastIndex = rpos.lastIndex = match.index + match[0].length; + if ( lastIndex > anchor ) { + part += selector.slice( anchor, match.index ); + anchor = lastIndex; + currentContexts = [ context ]; + + if ( rcombinators.test(part) ) { + if ( elements ) { + currentContexts = elements; + } + elements = seed; + } + + if ( (not = rendsWithNot.test( part )) ) { + part = part.slice( 0, -5 ).replace( rcombinators, "$&*" ); + anchor++; + } + + if ( match.length > 1 ) { + match[0].replace( rposgroups, setUndefined ); + } + elements = handlePOSGroup( part, match[1], match[2], currentContexts, elements, not ); + } + part = ""; + } + + } + + if ( !matched ) { + part += selector; + } + matched = false; + } + + if ( part ) { + if ( rcombinators.test(part) ) { + multipleContexts( part, elements || [ context ], results, seed ); + } else { + Sizzle( part, context, results, seed ? seed.concat(elements) : elements ); + } + } else { + push.apply( results, elements ); + } + } + + // Do not sort if this is a single filter + return len === 1 ? results : Sizzle.uniqueSort( results ); +} + +function select( selector, context, results, seed, xml ) { + // Remove excessive whitespace + selector = selector.replace( rtrim, "$1" ); + var elements, matcher, cached, elem, + i, tokens, token, lastToken, findContext, type, + match = tokenize( selector, context, xml ), + contextNodeType = context.nodeType; + + // POS handling + if ( matchExpr["POS"].test(selector) ) { + return handlePOS( match, context, results, seed ); + } + + if ( seed ) { + elements = slice.call( seed, 0 ); + + // To maintain document order, only narrow the + // set if there is one group + } else if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + if ( (tokens = slice.call( match[0], 0 )).length > 2 && + (token = tokens[0]).part === "ID" && + contextNodeType === 9 && !xml && + Expr.relative[ tokens[1].part ] ) { + + context = Expr.find["ID"]( token.captures[0].replace( rbackslash, "" ), context, xml )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().string.length ); + } + + findContext = ( (match = rsibling.exec( tokens[0].string )) && !match.index && context.parentNode ) || context; + + // Reduce the set if possible + lastToken = ""; + for ( i = tokens.length - 1; i >= 0; i-- ) { + token = tokens[i]; + type = token.part; + lastToken = token.string + lastToken; + if ( Expr.relative[ type ] ) { + break; + } + if ( Expr.order.test(type) ) { + elements = Expr.find[ type ]( token.captures[0].replace( rbackslash, "" ), findContext, xml ); + if ( elements == null ) { + continue; + } else { + selector = selector.slice( 0, selector.length - lastToken.length ) + + lastToken.replace( matchExpr[ type ], "" ); + + if ( !selector ) { + push.apply( results, slice.call(elements, 0) ); + } + + break; + } + } + } + } + + // Only loop over the given elements once + if ( selector ) { + matcher = compile( selector, context, xml ); + dirruns = matcher.dirruns++; + if ( elements == null ) { + elements = Expr.find["TAG"]( "*", (rsibling.test( selector ) && context.parentNode) || context ); + } + + for ( i = 0; (elem = elements[i]); i++ ) { + cachedruns = matcher.runs++; + if ( matcher(elem) ) { + results.push( elem ); + } + } + } + + return results; +} + +if ( document.querySelectorAll ) { + (function() { + var disconnectedMatch, + oldSelect = select, + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + rbuggyQSA = [], + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + // A support test would require too much code (would include document ready) + // just skip matchesSelector for :active + rbuggyMatches = [":active"], + matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector; + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here (do not put tests after this one) + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE9 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = "

      "; + if ( div.querySelectorAll("[test^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here (do not put tests after this one) + div.innerHTML = ""; + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push(":enabled", ":disabled"); + } + }); + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + + select = function( selector, context, results, seed, xml ) { + // Only use querySelectorAll when not filtering, + // when this is not xml, + // and when no QSA bugs apply + if ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + if ( context.nodeType === 9 ) { + try { + push.apply( results, slice.call(context.querySelectorAll( selector ), 0) ); + return results; + } catch(qsaError) {} + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var groups, i, len, + old = context.getAttribute("id"), + nid = old || expando, + newContext = rsibling.test( selector ) && context.parentNode || context; + + if ( old ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + + groups = tokenize(selector, context, xml); + // Trailing space is unnecessary + // There is always a context check + nid = "[id='" + nid + "']"; + for ( i = 0, len = groups.length; i < len; i++ ) { + groups[i] = nid + groups[i].selector; + } + try { + push.apply( results, slice.call( newContext.querySelectorAll( + groups.join(",") + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + + return oldSelect( selector, context, results, seed, xml ); + }; + + if ( matches ) { + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + try { + matches.call( div, "[test!='']:sizzle" ); + rbuggyMatches.push( matchExpr["PSEUDO"].source, matchExpr["POS"].source, "!=" ); + } catch ( e ) {} + }); + + // rbuggyMatches always contains :active, so no need for a length check + rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") ); + + Sizzle.matchesSelector = function( elem, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyMatches always contains :active, so no need for an existence check + if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && (!rbuggyQSA || !rbuggyQSA.test( expr )) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, null, null, [ elem ] ).length > 0; + }; + } + })(); +} + +// Deprecated +Expr.setFilters["nth"] = Expr.setFilters["eq"]; + +// Back-compat +Expr.filters = Expr.pseudos; + +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, l, length, n, r, ret, + self = this; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + ret = this.pushStack( "", "find", selector ); + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + cur = this[i]; + + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +jQuery.fn.andSelf = jQuery.fn.addBack; + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( this.length > 1 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, core_slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + rcheckableType = /^(?:checkbox|radio)$/, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*\s*$/g, + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
      ", "
      " ], + thead: [ 1, "", "
      " ], + tr: [ 2, "", "
      " ], + td: [ 3, "", "
      " ], + col: [ 2, "", "
      " ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, +// unless wrapped in a div with non-breaking characters in front of it. +if ( !jQuery.support.htmlSerialize ) { + wrapMap._default = [ 1, "X
      ", "
      " ]; +} + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, + + before: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this ); + }); + } + + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( set, this ), "before", this.selector ); + } + }, + + after: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + }); + } + + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( this, set ), "after", this.selector ); + } + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + jQuery.cleanData( [ elem ] ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName( "*" ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function( value ) { + if ( !isDisconnected( this[0] ) ) { + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this), old = self.html(); + self.replaceWith( value.call( this, i, old ) ); + }); + } + + if ( typeof value !== "string" ) { + value = jQuery( value ).detach(); + } + + return this.each(function() { + var next = this.nextSibling, + parent = this.parentNode; + + jQuery( this ).remove(); + + if ( next ) { + jQuery(next).before( value ); + } else { + jQuery(parent).append( value ); + } + }); + } + + return this.length ? + this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : + this; + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, table, callback ) { + + // Flatten any nested arrays + args = [].concat.apply( [], args ); + + var results, first, fragment, iNoClone, + i = 0, + value = args[0], + scripts = [], + l = this.length; + + // We can't cloneNode fragments that contain checked, in WebKit + if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) { + return this.each(function() { + jQuery(this).domManip( args, table, callback ); + }); + } + + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + args[0] = value.call( this, i, table ? self.html() : undefined ); + self.domManip( args, table, callback ); + }); + } + + if ( this[0] ) { + results = jQuery.buildFragment( args, this, scripts ); + fragment = results.fragment; + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + // Fragments from the fragment cache must always be cloned and never used in place. + for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) { + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + i === iNoClone ? + fragment : + jQuery.clone( fragment, true, true ) + ); + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + + if ( scripts.length ) { + jQuery.each( scripts, function( i, elem ) { + if ( elem.src ) { + if ( jQuery.ajax ) { + jQuery.ajax({ + url: elem.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.error("no ajax"); + } + } else { + jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + }); + } + } + + return this; + } +}); + +function findOrAppend( elem, tag ) { + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function cloneFixAttributes( src, dest ) { + var nodeName; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + // clearAttributes removes the attributes, which we don't want, + // but also removes the attachEvent events, which we *do* want + if ( dest.clearAttributes ) { + dest.clearAttributes(); + } + + // mergeAttributes, in contrast, only merges back on the + // original attributes, not the events + if ( dest.mergeAttributes ) { + dest.mergeAttributes( src ); + } + + nodeName = dest.nodeName.toLowerCase(); + + if ( nodeName === "object" ) { + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + + // IE blanks contents when cloning scripts + } else if ( nodeName === "script" && dest.text !== src.text ) { + dest.text = src.text; + } + + // Event data gets referenced instead of copied if the expando + // gets copied too + dest.removeAttribute( jQuery.expando ); +} + +jQuery.buildFragment = function( args, context, scripts ) { + var fragment, cacheable, cachehit, + first = args[ 0 ]; + + // Set context from what may come in as undefined or a jQuery collection or a node + // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 & + // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception + context = context || document; + context = !context.nodeType && context[0] || context; + context = context.ownerDocument || context; + + // Only cache "small" (1/2 KB) HTML strings that are associated with the main document + // Cloning options loses the selected state, so don't cache them + // IE 6 doesn't like it when you put or elements in a fragment + // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache + // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 + if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document && + first.charAt(0) === "<" && !rnocache.test( first ) && + (jQuery.support.checkClone || !rchecked.test( first )) && + (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { + + // Mark cacheable and look for a hit + cacheable = true; + fragment = jQuery.fragments[ first ]; + cachehit = fragment !== undefined; + } + + if ( !fragment ) { + fragment = context.createDocumentFragment(); + jQuery.clean( args, context, fragment, scripts ); + + // Update the cache, but only store false + // unless this is a second parsing of the same content + if ( cacheable ) { + jQuery.fragments[ first ] = cachehit && fragment; + } + } + + return { fragment: fragment, cacheable: cacheable }; +}; + +jQuery.fragments = {}; + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + l = insert.length, + parent = this.length === 1 && this[0].parentNode; + + if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) { + insert[ original ]( this[0] ); + return this; + } else { + for ( ; i < l; i++ ) { + elems = ( i > 0 ? this.clone(true) : this ).get(); + jQuery( insert[i] )[ original ]( elems ); + ret = ret.concat( elems ); + } + + return this.pushStack( ret, name, insert.selector ); + } + }; +}); + +function getAll( elem ) { + if ( typeof elem.getElementsByTagName !== "undefined" ) { + return elem.getElementsByTagName( "*" ); + + } else if ( typeof elem.querySelectorAll !== "undefined" ) { + return elem.querySelectorAll( "*" ); + + } else { + return []; + } +} + +// Used in clean, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var srcElements, + destElements, + i, + clone; + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + // IE copies events bound via attachEvent when using cloneNode. + // Calling detachEvent on the clone will also remove the events + // from the original. In order to get around this, we use some + // proprietary methods to clear the events. Thanks to MooTools + // guys for this hotness. + + cloneFixAttributes( elem, clone ); + + // Using Sizzle here is crazy slow, so we use getElementsByTagName instead + srcElements = getAll( elem ); + destElements = getAll( clone ); + + // Weird iteration because IE will replace the length property + // with an element if you are cloning the body and one of the + // elements on the page has a name or id of "length" + for ( i = 0; srcElements[i]; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + cloneFixAttributes( srcElements[i], destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + cloneCopyEvent( elem, clone ); + + if ( deepDataAndEvents ) { + srcElements = getAll( elem ); + destElements = getAll( clone ); + + for ( i = 0; srcElements[i]; ++i ) { + cloneCopyEvent( srcElements[i], destElements[i] ); + } + } + } + + srcElements = destElements = null; + + // Return the cloned set + return clone; + }, + + clean: function( elems, context, fragment, scripts ) { + var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags, + safe = context === document && safeFragment, + ret = []; + + // Ensure that context is a document + if ( !context || typeof context.createDocumentFragment === "undefined" ) { + context = document; + } + + // Use the already-created safe fragment if context permits + for ( i = 0; (elem = elems[i]) != null; i++ ) { + if ( typeof elem === "number" ) { + elem += ""; + } + + if ( !elem ) { + continue; + } + + // Convert html string into DOM nodes + if ( typeof elem === "string" ) { + if ( !rhtml.test( elem ) ) { + elem = context.createTextNode( elem ); + } else { + // Ensure a safe container in which to render the html + safe = safe || createSafeFragment( context ); + div = context.createElement("div"); + safe.appendChild( div ); + + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1>"); + + // Go to html and back, then peel off extra wrappers + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + depth = wrap[0]; + div.innerHTML = wrap[1] + elem + wrap[2]; + + // Move to the right depth + while ( depth-- ) { + div = div.lastChild; + } + + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + hasBody = rtbody.test(elem); + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : + + // String was a bare or + wrap[1] === "
      " && !hasBody ? + div.childNodes : + []; + + for ( j = tbody.length - 1; j >= 0 ; --j ) { + if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { + tbody[ j ].parentNode.removeChild( tbody[ j ] ); + } + } + } + + // IE completely kills leading whitespace when innerHTML is used + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); + } + + elem = div.childNodes; + + // Take out of fragment container (we need a fresh div each time) + div.parentNode.removeChild( div ); + } + } + + if ( elem.nodeType ) { + ret.push( elem ); + } else { + jQuery.merge( ret, elem ); + } + } + + // Fix #11356: Clear elements from safeFragment + if ( div ) { + elem = div = safe = null; + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + for ( i = 0; (elem = ret[i]) != null; i++ ) { + if ( jQuery.nodeName( elem, "input" ) ) { + fixDefaultChecked( elem ); + } else if ( typeof elem.getElementsByTagName !== "undefined" ) { + jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); + } + } + } + + // Append elements to a provided document fragment + if ( fragment ) { + // Special handling of each script element + handleScript = function( elem ) { + // Check if we consider it executable + if ( !elem.type || rscriptType.test( elem.type ) ) { + // Detach the script and store it in the scripts array (if provided) or the fragment + // Return truthy to indicate that it has been handled + return scripts ? + scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : + fragment.appendChild( elem ); + } + }; + + for ( i = 0; (elem = ret[i]) != null; i++ ) { + // Check if we're done after handling an executable script + if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { + // Append to fragment and handle embedded scripts + fragment.appendChild( elem ); + if ( typeof elem.getElementsByTagName !== "undefined" ) { + // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration + jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); + + // Splice the scripts into ret after their former ancestor and advance our index beyond them + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); + i += jsTags.length; + } + } + } + } + + return ret; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var data, id, elem, type, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + jQuery.deletedIds.push( id ); + } + } + } + } + } +}); +// Limit scope pollution from any deprecated API +(function() { + +var matched, browser; + +// Use of jQuery.browser is frowned upon. +// More details: http://api.jquery.com/jQuery.browser +// jQuery.uaMatch maintained for back-compat +jQuery.uaMatch = function( ua ) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; +}; + +matched = jQuery.uaMatch( navigator.userAgent ); +browser = {}; + +if ( matched.browser ) { + browser[ matched.browser ] = true; + browser.version = matched.version; +} + +// Chrome is Webkit, but Webkit is also Safari. +if ( browser.chrome ) { + browser.webkit = true; +} else if ( browser.webkit ) { + browser.safari = true; +} + +jQuery.browser = browser; + +jQuery.sub = function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; +}; + +})(); +var curCSS, iframe, iframeDoc, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity=([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ), + elemdisplay = {}, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + + eventsToggle = jQuery.fn.toggle; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var elem, display, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + values[ index ] = jQuery._data( elem, "olddisplay" ); + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && elem.style.display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + display = curCSS( elem, "display" ); + + if ( !values[ index ] && display !== "none" ) { + jQuery._data( elem, "olddisplay", display ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state, fn2 ) { + var bool = typeof state === "boolean"; + + if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) { + return eventsToggle.apply( this, arguments ); + } + + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + + } + } + } + }, + + // Exclude the following css properties to add px + cssNumber: { + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, numeric, extra ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( numeric || extra !== undefined ) { + num = parseFloat( val ); + return numeric || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// NOTE: To any future maintainer, we've window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + curCSS = function( elem, name ) { + var ret, width, minWidth, maxWidth, + computed = window.getComputedStyle( elem, null ), + style = elem.style; + + if ( computed ) { + + ret = computed[ name ]; + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + curCSS = function( elem, name ) { + var left, rsLeft, + ret = elem.currentStyle && elem.currentStyle[ name ], + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + elem.runtimeStyle.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + elem.runtimeStyle.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + // we use jQuery.css instead of curCSS here + // because of the reliableMarginRight CSS hook! + val += jQuery.css( elem, extra + cssExpand[ i ], true ); + } + + // From this point on we use curCSS for maximum performance (relevant in animations) + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } else { + // at this point, extra isn't content, so add padding + val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + valueIsBorderBox = true, + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox + ) + ) + "px"; +} + + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + if ( elemdisplay[ nodeName ] ) { + return elemdisplay[ nodeName ]; + } + + var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ), + display = elem.css("display"); + elem.remove(); + + // If the simple way fails, + // get element's real default display by attaching it to a temp iframe + if ( display === "none" || display === "" ) { + // Use the already-created iframe if possible + iframe = document.body.appendChild( + iframe || jQuery.extend( document.createElement("iframe"), { + frameBorder: 0, + width: 0, + height: 0 + }) + ); + + // Create a cacheable copy of the iframe document on first call. + // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML + // document to it; WebKit & Firefox won't allow reusing the iframe document. + if ( !iframeDoc || !iframe.createElement ) { + iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; + iframeDoc.write(""); + iframeDoc.close(); + } + + elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) ); + + display = curCSS( elem, "display" ); + document.body.removeChild( iframe ); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + + return display; +} + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + // certain elements can have dimension info if we invisibly show them + // however, it must have a current display style that would benefit from this + if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) { + return jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }); + } else { + return getWidthOrHeight( elem, name, extra ); + } + } + }, + + set: function( elem, value, extra ) { + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box" + ) : 0 + ); + } + }; +}); + +if ( !jQuery.support.opacity ) { + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : + computed ? "1" : ""; + }, + + set: function( elem, value ) { + var style = elem.style, + currentStyle = elem.currentStyle, + opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", + filter = currentStyle && currentStyle.filter || style.filter || ""; + + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; + + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" && + style.removeAttribute ) { + + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + + // if there there is no filter style applied in a css rule, we are done + if ( currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; + } + }; +} + +// These hooks cannot be added until DOM ready because the support test +// for it is not run until after DOM ready +jQuery(function() { + if ( !jQuery.support.reliableMarginRight ) { + jQuery.cssHooks.marginRight = { + get: function( elem, computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, function() { + if ( computed ) { + return curCSS( elem, "marginRight" ); + } + }); + } + }; + } + + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // getComputedStyle returns percent when specified for top/left/bottom/right + // rather than make the css module depend on the offset module, we just check for it here + if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = { + get: function( elem, computed ) { + if ( computed ) { + var ret = curCSS( elem, prop ); + // if curCSS returns percentage, fallback to offset + return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret; + } + } + }; + }); + } + +}); + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.hidden = function( elem ) { + return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none"); + }; + + jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); + }; +} + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i, + + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ], + expanded = {}; + + for ( i = 0; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +}); +var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + rselectTextarea = /^(?:select|textarea)/i; + +jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function(){ + return this.elements ? jQuery.makeArray( this.elements ) : this; + }) + .filter(function(){ + return this.name && !this.disabled && + ( this.checked || rselectTextarea.test( this.nodeName ) || + rinput.test( this.type ) ); + }) + .map(function( i, elem ){ + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val, i ){ + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + +//Serialize an array of form elements or a set of +//key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); +}; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // If array item is non-scalar (array or object), encode its + // numeric index to resolve deserialization ambiguity issues. + // Note that rack (as of 1.0.0) can't currently deserialize + // nested arrays properly, and attempting to do so may cause + // a server error. Possible fixes are to modify rack's + // deserialization algorithm or to provide an option or flag + // to force array serialization to be shallow. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} +var // Document location + ajaxLocation, + // Document location segments + ajaxLocParts, + + rhash = /#.*$/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rquery = /\?/, + rscript = /)<[^<]*)*<\/script>/gi, + rts = /([?&])_=[^&]*/, + rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, + + // Keep a copy of the old load method + _load = jQuery.fn.load, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = ["*/"] + ["*"]; + +// #8138, IE may throw an exception when accessing +// a field from window.location if document.domain has been set +try { + ajaxLocation = location.href; +} catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + ajaxLocation = document.createElement( "a" ); + ajaxLocation.href = ""; + ajaxLocation = ajaxLocation.href; +} + +// Segment location into parts +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, list, placeBefore, + dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ), + i = 0, + length = dataTypes.length; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + for ( ; i < length; i++ ) { + dataType = dataTypes[ i ]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test( dataType ); + if ( placeBefore ) { + dataType = dataType.substr( 1 ) || "*"; + } + list = structure[ dataType ] = structure[ dataType ] || []; + // then we add to the structure accordingly + list[ placeBefore ? "unshift" : "push" ]( func ); + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, + dataType /* internal */, inspected /* internal */ ) { + + dataType = dataType || options.dataTypes[ 0 ]; + inspected = inspected || {}; + + inspected[ dataType ] = true; + + var selection, + list = structure[ dataType ], + i = 0, + length = list ? list.length : 0, + executeOnly = ( structure === prefilters ); + + for ( ; i < length && ( executeOnly || !selection ); i++ ) { + selection = list[ i ]( options, originalOptions, jqXHR ); + // If we got redirected to another dataType + // we try there if executing only and not done already + if ( typeof selection === "string" ) { + if ( !executeOnly || inspected[ selection ] ) { + selection = undefined; + } else { + options.dataTypes.unshift( selection ); + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, selection, inspected ); + } + } + } + // If we're only executing or nothing was selected + // we try the catchall dataType if not done already + if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, "*", inspected ); + } + // unnecessary when only executing (prefilters) + // but it'll be ignored by the caller in that case + return selection; +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } +} + +jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + // Don't do a request if no elements are being requested + if ( !this.length ) { + return this; + } + + var selector, type, response, + self = this, + off = url.indexOf(" "); + + if ( off >= 0 ) { + selector = url.slice( off, url.length ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // Request the remote document + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params, + complete: function( jqXHR, status ) { + if ( callback ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + } + } + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + // See if a selector was specified + self.html( selector ? + + // Create a dummy div to hold the results + jQuery("
      ") + + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append( responseText.replace( rscript, "" ) ) + + // Locate the specified elements + .find( selector ) : + + // If not, just inject the full result + responseText ); + + }); + + return this; +}; + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){ + jQuery.fn[ o ] = function( f ){ + return this.on( o, f ); + }; +}); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; +}); + +jQuery.extend({ + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + if ( settings ) { + // Building a settings object + ajaxExtend( target, jQuery.ajaxSettings ); + } else { + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; + } + ajaxExtend( target, settings ); + return target; + }, + + ajaxSettings: { + url: ajaxLocation, + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + global: true, + type: "GET", + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + processData: true, + async: true, + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + xml: "application/xml, text/xml", + html: "text/html", + text: "text/plain", + json: "application/json, text/javascript", + "*": allTypes + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText" + }, + + // List of data converters + // 1) key format is "source_type destination_type" (a single space in-between) + // 2) the catchall symbol "*" can be used for source_type + converters: { + + // Convert anything to text + "* text": window.String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + context: true, + url: true + } + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // ifModified key + ifModifiedKey, + // Response headers + responseHeadersString, + responseHeaders, + // transport + transport, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events + // It's the callbackContext if one was provided in the options + // and if it's a DOM node or a jQuery collection + globalEventContext = callbackContext !== s && + ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? + jQuery( callbackContext ) : jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + + readyState: 0, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( !state ) { + var lname = name.toLowerCase(); + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match === undefined ? null : match; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + statusText = statusText || strAbort; + if ( transport ) { + transport.abort( statusText ); + } + done( 0, statusText ); + return this; + } + }; + + // Callback for when everything is done + // It is defined here because jslint complains if it is declared + // at the end of the function (which would be more logical and readable) + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // If successful, handle type chaining + if ( status >= 200 && status < 300 || status === 304 ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ ifModifiedKey ] = modified; + } + modified = jqXHR.getResponseHeader("Etag"); + if ( modified ) { + jQuery.etag[ ifModifiedKey ] = modified; + } + } + + // If not modified + if ( status === 304 ) { + + statusText = "notmodified"; + isSuccess = true; + + // If we have data + } else { + + isSuccess = ajaxConvert( s, response ); + statusText = isSuccess.state; + success = isSuccess.data; + error = isSuccess.error; + isSuccess = !error; + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if ( !statusText || status ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = "" + ( nativeStatusText || statusText ); + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + // Attach deferreds + deferred.promise( jqXHR ); + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + jqXHR.complete = completeDeferred.add; + + // Status-dependent callbacks + jqXHR.statusCode = function( map ) { + if ( map ) { + var tmp; + if ( state < 2 ) { + for ( tmp in map ) { + statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; + } + } else { + tmp = map[ jqXHR.status ]; + jqXHR.always( tmp ); + } + } + return this; + }; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // We also use the url parameter if available + s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace ); + + // Determine if a cross-domain request is in order + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) != + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ) + ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Get ifModifiedKey before adding the anti-cache parameter + ifModifiedKey = s.url; + + // Add anti-cache in url if needed + if ( s.cache === false ) { + + var ts = jQuery.now(), + // try replacing _= if it is there + ret = s.url.replace( rts, "$1_=" + ts ); + + // if nothing was replaced, add timestamp to the end + s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + ifModifiedKey = ifModifiedKey || s.url; + if ( jQuery.lastModified[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); + } + if ( jQuery.etag[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); + } + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + + } + + // aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout( function(){ + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch (e) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + return jqXHR; + }, + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {} + +}); + +/* Handles responses to an ajax request: + * - sets all responseXXX fields accordingly + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes, + responseFields = s.responseFields; + + // Fill responseXXX fields + for ( type in responseFields ) { + if ( type in responses ) { + jqXHR[ responseFields[type] ] = responses[ type ]; + } + } + + // Remove auto dataType and get content-type in the process + while( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +// Chain conversions given the request and the original response +function ajaxConvert( s, response ) { + + var conv, conv2, current, tmp, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(), + prev = dataTypes[ 0 ], + converters = {}, + i = 0; + + // Apply the dataFilter if provided + if ( s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + // Convert to each sequential dataType, tolerating list modification + for ( ; (current = dataTypes[++i]); ) { + + // There's only work to do if current dataType is non-auto + if ( current !== "*" ) { + + // Convert response if prev dataType is non-auto and differs from current + if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split(" "); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.splice( i--, 0, current ); + } + + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s["throws"] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; + } + } + } + } + + // Update prev for next iteration + prev = current; + } + } + + return { state: "success", data: response }; +} +var oldCallbacks = [], + rquestion = /\?/, + rjsonp = /(=)\?(?=&|$)|\?\?/, + nonce = jQuery.now(); + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + data = s.data, + url = s.url, + hasCallback = s.jsonp !== false, + replaceInUrl = hasCallback && rjsonp.test( url ), + replaceInData = hasCallback && !replaceInUrl && typeof data === "string" && + !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && + rjsonp.test( data ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + overwritten = window[ callbackName ]; + + // Insert callback into url or form data + if ( replaceInUrl ) { + s.url = url.replace( rjsonp, "$1" + callbackName ); + } else if ( replaceInData ) { + s.data = data.replace( rjsonp, "$1" + callbackName ); + } else if ( hasCallback ) { + s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /javascript|ecmascript/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +}); + +// Handle cache's special case and global +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + s.global = false; + } +}); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function(s) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + + var script, + head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; + + return { + + send: function( _, callback ) { + + script = document.createElement( "script" ); + + script.async = "async"; + + if ( s.scriptCharset ) { + script.charset = s.scriptCharset; + } + + script.src = s.url; + + // Attach handlers for all browsers + script.onload = script.onreadystatechange = function( _, isAbort ) { + + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + + // Remove the script + if ( head && script.parentNode ) { + head.removeChild( script ); + } + + // Dereference the script + script = undefined; + + // Callback if not abort + if ( !isAbort ) { + callback( 200, "success" ); + } + } + }; + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709 and #4378). + head.insertBefore( script, head.firstChild ); + }, + + abort: function() { + if ( script ) { + script.onload( 0, 1 ); + } + } + }; + } +}); +var xhrCallbacks, + // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject ? function() { + // Abort all pending requests + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ]( 0, 1 ); + } + } : false, + xhrId = 0; + +// Functions to create xhrs +function createStandardXHR() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} +} + +function createActiveXHR() { + try { + return new window.ActiveXObject( "Microsoft.XMLHTTP" ); + } catch( e ) {} +} + +// Create the request object +// (This is still attached to ajaxSettings for backward compatibility) +jQuery.ajaxSettings.xhr = window.ActiveXObject ? + /* Microsoft failed to properly + * implement the XMLHttpRequest in IE7 (can't request local files), + * so we use the ActiveXObject when it is available + * Additionally XMLHttpRequest can be disabled in IE7/IE8 so + * we need a fallback. + */ + function() { + return !this.isLocal && createStandardXHR() || createActiveXHR(); + } : + // For all other browsers, use the standard XMLHttpRequest object + createStandardXHR; + +// Determine support properties +(function( xhr ) { + jQuery.extend( jQuery.support, { + ajax: !!xhr, + cors: !!xhr && ( "withCredentials" in xhr ) + }); +})( jQuery.ajaxSettings.xhr() ); + +// Create transport if the browser can provide an xhr +if ( jQuery.support.ajax ) { + + jQuery.ajaxTransport(function( s ) { + // Cross domain only allowed if supported through XMLHttpRequest + if ( !s.crossDomain || jQuery.support.cors ) { + + var callback; + + return { + send: function( headers, complete ) { + + // Get a new xhr + var handle, i, + xhr = s.xhr(); + + // Open the socket + // Passing null username, generates a login popup on Opera (#2865) + if ( s.username ) { + xhr.open( s.type, s.url, s.async, s.username, s.password ); + } else { + xhr.open( s.type, s.url, s.async ); + } + + // Apply custom fields if provided + if ( s.xhrFields ) { + for ( i in s.xhrFields ) { + xhr[ i ] = s.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( s.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( s.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !s.crossDomain && !headers["X-Requested-With"] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Need an extra try/catch for cross domain requests in Firefox 3 + try { + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + } catch( _ ) {} + + // Do send the request + // This may raise an exception which is actually + // handled in jQuery.ajax (so no try/catch here) + xhr.send( ( s.hasContent && s.data ) || null ); + + // Listener + callback = function( _, isAbort ) { + + var status, + statusText, + responseHeaders, + responses, + xml; + + // Firefox throws exceptions when accessing properties + // of an xhr when a network error occurred + // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) + try { + + // Was never called and is aborted or complete + if ( callback && ( isAbort || xhr.readyState === 4 ) ) { + + // Only called once + callback = undefined; + + // Do not keep as active anymore + if ( handle ) { + xhr.onreadystatechange = jQuery.noop; + if ( xhrOnUnloadAbort ) { + delete xhrCallbacks[ handle ]; + } + } + + // If it's an abort + if ( isAbort ) { + // Abort it manually if needed + if ( xhr.readyState !== 4 ) { + xhr.abort(); + } + } else { + status = xhr.status; + responseHeaders = xhr.getAllResponseHeaders(); + responses = {}; + xml = xhr.responseXML; + + // Construct response list + if ( xml && xml.documentElement /* #4958 */ ) { + responses.xml = xml; + } + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + try { + responses.text = xhr.responseText; + } catch( _ ) { + } + + // Firefox throws an exception when accessing + // statusText for faulty cross-domain requests + try { + statusText = xhr.statusText; + } catch( e ) { + // We normalize with Webkit giving an empty statusText + statusText = ""; + } + + // Filter status for non standard behaviors + + // If the request is local and we have data: assume a success + // (success with no data won't get notified, that's the best we + // can do given current implementations) + if ( !status && s.isLocal && !s.crossDomain ) { + status = responses.text ? 200 : 404; + // IE - #1450: sometimes returns 1223 when it should be 204 + } else if ( status === 1223 ) { + status = 204; + } + } + } + } catch( firefoxAccessException ) { + if ( !isAbort ) { + complete( -1, firefoxAccessException ); + } + } + + // Call complete if needed + if ( responses ) { + complete( status, statusText, responses, responseHeaders ); + } + }; + + if ( !s.async ) { + // if we're in sync mode we fire the callback + callback(); + } else if ( xhr.readyState === 4 ) { + // (IE6 & IE7) if it's in cache and has been + // retrieved directly we need to fire the callback + setTimeout( callback, 0 ); + } else { + handle = ++xhrId; + if ( xhrOnUnloadAbort ) { + // Create the active xhrs callbacks list if needed + // and attach the unload handler + if ( !xhrCallbacks ) { + xhrCallbacks = {}; + jQuery( window ).unload( xhrOnUnloadAbort ); + } + // Add to list of active xhrs callbacks + xhrCallbacks[ handle ] = callback; + } + xhr.onreadystatechange = callback; + } + }, + + abort: function() { + if ( callback ) { + callback(0,1); + } + } + }; + } + }); +} +var fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [function( prop, value ) { + var end, unit, prevScale, + tween = this.createTween( prop, value ), + parts = rfxnum.exec( value ), + target = tween.cur(), + start = +target || 0, + scale = 1; + + if ( parts ) { + end = +parts[2]; + unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + + // We need to compute starting value + if ( unit !== "px" && start ) { + // Iteratively approximate from a nonzero starting point + // Prefer the current property, because this process will be trivial if it uses the same units + // Fallback to end or a simple constant + start = jQuery.css( tween.elem, prop, true ) || end || 1; + + do { + // If previous iteration zeroed out, double until we get *something* + // Use a string for doubling factor so we don't accidentally see scale as unchanged below + prevScale = scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zeroes from tween.cur() + scale = tween.cur() / target; + + // Stop looping if we've hit the mark or scale is unchanged + } while ( scale !== 1 && scale !== prevScale ); + } + + tween.unit = unit; + tween.start = start; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; + } + return tween; + }] + }; + +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }, 0 ); + return ( fxNow = jQuery.now() ); +} + +function createTweens( animation, props ) { + jQuery.each( props, function( prop, value ) { + var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( collection[ index ].call( animation, prop, value ) ) { + + // we're done with this property + return; + } + } + }); +} + +function Animation( elem, properties, options ) { + var result, + index = 0, + tweenerIndex = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + percent = 1 - ( remaining / animation.duration || 0 ), + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ]); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end, easing ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // if we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // resolve when we played the last frame + // otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } + + createTweens( animation, props ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + anim: animation, + queue: animation.opts.queue, + elem: elem + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'index' from above because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, + + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } +}); + +function defaultPrefilter( elem, props, opts ) { + var index, prop, value, length, dataShow, tween, hooks, oldfire, + anim = this, + style = elem.style, + orig = {}, + handled = [], + hidden = elem.nodeType && isHidden( elem ); + + // handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always(function() { + // doing this makes sure that the complete handler will be called + // before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if ( jQuery.css( elem, "display" ) === "inline" && + jQuery.css( elem, "float" ) === "none" ) { + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { + style.display = "inline-block"; + + } else { + style.zoom = 1; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + if ( !jQuery.support.shrinkWrapBlocks ) { + anim.done(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + } + + + // show/hide pass + for ( index in props ) { + value = props[ index ]; + if ( rfxtypes.exec( value ) ) { + delete props[ index ]; + if ( value === ( hidden ? "hide" : "show" ) ) { + continue; + } + handled.push( index ); + } + } + + length = handled.length; + if ( length ) { + dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + jQuery.removeData( elem, "fxshow", true ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( index = 0 ; index < length ; index++ ) { + prop = handled[ index ]; + tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 ); + orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + } +} + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { + return tween.elem[ tween.prop ]; + } + + // passing any value as a 4th parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails + // so, simple values such as "10px" are parsed to Float. + // complex values such as "rotate(1rad)" are returned as is. + result = jQuery.css( tween.elem, tween.prop, false, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // use step hook for back compat - use cssHook if its there - use .style if its + // available and use plain properties where available + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Remove in 2.0 - this supports IE8's panic based approach +// to setting things on disconnected nodes + +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" || + // special check for .toggle( handler, handler, ... ) + ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +}); + +jQuery.fn.extend({ + fadeTo: function( speed, to, easing, callback ) { + + // show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations resolve immediately + if ( empty ) { + anim.stop( true ); + } + }; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = jQuery._data( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + } +}); + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + attrs = { height: type }, + i = 0; + + // if we include width, step value is 1 to do all cssExpand values, + // if we don't include width, step value is 2 to skip over Left and Right + includeWidth = includeWidth? 1 : 0; + for( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +// Generate shortcuts for custom animations +jQuery.each({ + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +}); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p*Math.PI ) / 2; + } +}; + +jQuery.timers = []; +jQuery.fx = Tween.prototype.init; +jQuery.fx.tick = function() { + var timer, + timers = jQuery.timers, + i = 0; + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } +}; + +jQuery.fx.timer = function( timer ) { + if ( timer() && jQuery.timers.push( timer ) && !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.interval = 13; + +jQuery.fx.stop = function() { + clearInterval( timerId ); + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 +}; + +// Back Compat <1.8 extension point +jQuery.fx.step = {}; + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; + }; +} +var rroot = /^(?:body|html)$/i; + +jQuery.fn.offset = function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var box, docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, top, left, + elem = this[ 0 ], + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + if ( (body = doc.body) === elem ) { + return jQuery.offset.bodyOffset( elem ); + } + + docElem = doc.documentElement; + + // Make sure we're not dealing with a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return { top: 0, left: 0 }; + } + + box = elem.getBoundingClientRect(); + win = getWindow( doc ); + clientTop = docElem.clientTop || body.clientTop || 0; + clientLeft = docElem.clientLeft || body.clientLeft || 0; + scrollTop = win.pageYOffset || docElem.scrollTop; + scrollLeft = win.pageXOffset || docElem.scrollLeft; + top = box.top + scrollTop - clientTop; + left = box.left + scrollLeft - clientLeft; + + return { top: top, left: left }; +}; + +jQuery.offset = { + + bodyOffset: function( body ) { + var top = body.offsetTop, + left = body.offsetLeft; + + if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { + top += parseFloat( jQuery.css(body, "marginTop") ) || 0; + left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; + } + + return { top: top, left: left }; + }, + + setOffset: function( elem, options, i ) { + var position = jQuery.css( elem, "position" ); + + // set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + var curElem = jQuery( elem ), + curOffset = curElem.offset(), + curCSSTop = jQuery.css( elem, "top" ), + curCSSLeft = jQuery.css( elem, "left" ), + calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, + props = {}, curPosition = {}, curTop, curLeft; + + // need to be able to calculate position if either top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + } +}; + + +jQuery.fn.extend({ + + position: function() { + if ( !this[0] ) { + return; + } + + var elem = this[0], + + // Get *real* offsetParent + offsetParent = this.offsetParent(), + + // Get correct offsets + offset = this.offset(), + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + + // Subtract element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; + offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; + + // Add offsetParent borders + parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; + parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; + + // Subtract the two offsets + return { + top: offset.top - parentOffset.top, + left: offset.left - parentOffset.left + }; + }, + + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || document.body; + while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || document.body; + }); + } +}); + + +// Create scrollLeft and scrollTop methods +jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { + var top = /Y/.test( prop ); + + jQuery.fn[ method ] = function( val ) { + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + win.document.documentElement[ method ] : + elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? + elem : + elem.nodeType === 9 ? + elem.defaultView || elem.parentWindow : + false; +} +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return jQuery.access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, value, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); +// Expose jQuery to the global object +window.jQuery = window.$ = jQuery; + +// Expose jQuery as an AMD module, but only for AMD loaders that +// understand the issues with loading multiple versions of jQuery +// in a page that all might call define(). The loader will indicate +// they have special allowances for multiple jQuery versions by +// specifying define.amd.jQuery = true. Register as a named module, +// since jQuery can be concatenated with other files that may use define, +// but not use a proper concatenation script that understands anonymous +// AMD modules. A named AMD is safest and most robust way to register. +// Lowercase jquery is used because AMD module names are derived from +// file names, and jQuery is normally delivered in a lowercase file name. +// Do this after creating the global so that if an AMD module wants to call +// noConflict to hide this version of jQuery, it will work. +if ( typeof define === "function" && define.amd && define.amd.jQuery ) { + define( "jquery", [], function () { return jQuery; } ); +} + +})( window ); diff --git a/php/pic_switch_demo/static/js/jquery-1.9.0.min.js b/php/pic_switch_demo/static/js/jquery-1.9.0.min.js new file mode 100644 index 0000000..d94aba1 --- /dev/null +++ b/php/pic_switch_demo/static/js/jquery-1.9.0.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("'; + }, + + // 删除元素 + removeNode : isIE ? (function(){ + var div; + // 防止IE内存泄露 + return function(elem){ + div = div || doc.createElement('div'); + div.appendChild(elem); + div.innerHTML = ''; + } + })() : function(elem){ + elem.parentNode.removeChild(elem); + }, + + // 获取元素在页面中的位置 + getOffset : function(elem){ + var top = isIE ? elem.getBoundingClientRect().top + docElem.scrollTop : elem.offsetTop, + left = isIE ? elem.getBoundingClientRect().left + docElem.scrollLeft : elem.offsetLeft; + + return { top: top, left: left }; + }, + + // 遮罩层 + overlay : function(){ + var overlay; + return (function(){ + overlay = overlay || doc.createElement('div'); + overlay.style.cssText = 'margin:0;padding:0;border:none;width:100%;height:100%;background:#333;opacity:0.6;filter:alpha(opacity=60);z-index:1000;position:fixed;top:0;left:0;'; + + // IE6模拟fixed + if(isIE6){ + body.style.height = '100%'; + overlay.style.position = 'absolute'; + overlay.style.setExpression('top','fuckIE6=document.documentElement.scrollTop+"px"'); + } + + overlay.id = 'overlay'; + return overlay; + })(); + }, + + // 弹出层 + dialogBox : function(){ + var dialogBox, + self = this; + return (function(){ + dialogBox = dialogBox || doc.createElement('div'); + dialogBox.style.cssText = 'margin:0;padding:0;border:none;z-index:1001;'; + // 设置弹出层跟随某元素进行定位 + var setFollow = function(elem){ + dialogBox.style.top = (self.getOffset(elem).top + options.followY) + 'px'; + dialogBox.style.left = (self.getOffset(elem).left + options.followX) + 'px'; + options.fixed = false; + options.isOverlay = false; + }; + + if(typeof options.follow === 'string'){ + setFollow(doc.getElementById(options.follow)); + } + else if(options.follow && typeof options.follow === 'object'){ + setFollow(options.follow); + } + else{ + dialogBox.style.top = dialogBox.style.left = '50%'; + } + + if(options.fixed){ + if(isIE6){ + dialogBox.style.position = 'absolute'; + dialogBox.style.setExpression('top','fuckIE6=document.documentElement.scrollTop+document.documentElement.clientHeight/2+"px"'); + }else{ + dialogBox.style.position = 'fixed'; + } + }else{ + dialogBox.style.position = 'absolute'; + if(options.follow === null){ + dialogBox.style.top = (docElem.clientHeight/2 + Math.max(docElem.scrollTop,body.scrollTop)) + 'px'; + dialogBox.style.left = (docElem.clientWidth/2 + Math.max(docElem.scrollLeft,body.scrollLeft)) + 'px'; + window.onresize = function(){ + dialogBox.style.top = (docElem.clientHeight/2 + Math.max(docElem.scrollTop,body.scrollTop)) + 'px'; + dialogBox.style.left = (docElem.clientWidth/2 + Math.max(docElem.scrollLeft,body.scrollLeft)) + 'px'; + }; + } + } + + dialogBox.id = 'dialog_box'; + return dialogBox; + })(); + } + +}; + +var $ = new Dialog(); + +var base = { + open : function(){ + var self = this; + // 防止重复弹出 + if(doc.getElementById('dialog_box')){ + self.close(); + } + + if(timer){ + clearTimeout(timer); + } + + // 将自定义的参数与默认参数进行合并 + options = $.getOptions(arguments[0]); + + var box = $.dialogBox(); + + if(options.isOverlay){ + var layer = $.overlay(); + body.appendChild(layer); + if(isIE6){ + $.appendIframe(layer); + } + } + + if(isIE6){ + $.setBodyBg(); + } + + body.appendChild(box); + + if(typeof options.container === 'string'){ + elem = doc.getElementById(options.container); + + if(isIE6 && !options.isOverlay){ + $.appendIframe(box); + } + + box.appendChild(elem); + elem.style.display = 'block'; + var eWidth = elem.offsetWidth, + eHeight = elem.offsetHeight; + + // 强制去掉弹出层内容的margin + elem.style.marginTop = elem.style.marginRight = elem.style.marginBottom = elem.style.marginLeft = '0px'; + + // 居中定位 + if(!options.follow){ + box.style.marginLeft = '-' + eWidth/2 + 'px'; + box.style.marginTop = '-' + eHeight/2 + 'px'; + } + + // 防止select穿透固定宽度和高度 + if(isIE6 && !options.isOverlay){ + box.style.width = eWidth + 'px'; + box.style.height = eHeight + 'px'; + } + } + + // 自动关闭弹出层 + if(options.autoClose && typeof options.autoClose === 'number'){ + timer = setTimeout(function(){ + self.close(); + },options.autoClose); + } + + // ESC键关闭弹出层 + doc.onkeyup = function(e){ + e = e || window.event; + if(e.keyCode === 27) self.close(); + }; + }, + + close : function(){ + if(timer){ + clearTimeout(timer); + } + doc.onkeyup = null; + if(document.getElementById('overlay')){ + $.removeNode(doc.getElementById('overlay')); + } + elem.style.display = 'none'; + body.appendChild(elem); + $.removeNode(doc.getElementById('dialog_box')); + + // 执行callback + if(typeof options.callback === 'function'){ + options.callback(); + } + } +}; + +return base; + +}; + +var loaded = function(){ + window.easyDialog = easyDialog(); + }, + + doScrollCheck = function(){ + if ( doc.body ) { + return; + } + + try { + docElem.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + loaded(); + }; + +(function(){ + if( doc.body ){ + loaded(); + } + else{ + if( doc.addEventListener ){ + doc.addEventListener( 'DOMContentLoaded', function(){ + doc.removeEventListener( 'DOMContentLoaded', arguments.callee, false ); + loaded(); + }, false ); + window.addEventListener( 'load', loaded, false ); + } + else if( doc.attachEvent ){ + doc.attachEvent( 'onreadystatechange', function(){ + if( doc.readyState === 'complete' ){ + doc.detachEvent( 'onreadystatechange', arguments.callee ); + loaded(); + } + }); + window.attachEvent( 'onload', loaded ); + + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( docElem.doScroll && toplevel ) { + doScrollCheck(); + } + } + } +})(); + +})(); \ No newline at end of file diff --git a/php/pic_switch_demo/static/js/lj_funself.js b/php/pic_switch_demo/static/js/lj_funself.js new file mode 100644 index 0000000..28f9d5a --- /dev/null +++ b/php/pic_switch_demo/static/js/lj_funself.js @@ -0,0 +1,55 @@ +//添加上传域 +function addimg() +{ + //文件域 + var updiv =''; + $('#ztdemo_omar').append(updiv); + bindListener(); +} +//删除上传域 +function bindListener() +{ + $("a[name=rmlink]").unbind().click(function(){ + $(this).parent().parent().remove(); + }) +} + + +function back_ifa() +{ + $("#mainFrame")[0].contentWindow.close_dialog(); +} +function popup(html_div,div_name,url) +{ + var strlg = url.length; + var str = url.substring(strlg-1,strlg); + if(str=='1') + { + var rid=$('#radio_img').val(); + url=url+'&id='+$('#radio_img').val(); + } + // document.getElementById(html_div).innerHTML="

      选择资料库图片

      ');return b.join("")})}},fileButton:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this;a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),e=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d= -a["for"];if(!e||e.call(this,c)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(f,c,e){if(!(3>arguments.length)){var k=[],g=c.html;"<"!=g.charAt(0)&&(g=""+g+"");var i=c.focus;if(i){var j=this.focus;this.focus=function(){("function"== -typeof i?i:j).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,f,c,k,"span",null,null,"");k=k.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);e.push([g[1]," ",k[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,f,c){var e=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,f,"fieldset",null,null,function(){var a=[];e&&a.push(""+e+"");for(var b=0;ba.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b= -CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()}, -isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)}, -focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype= -CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var f=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;f.$.text=b;f.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(f.$):c.add(f.$,null):c.add(f.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0< -b.length;)b.remove(0);return this},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8','
      - - - -

      - CKFinder - Sample - CKEditor Integration -

      -
      - CKFinder can be easily integrated with CKEditor. Try it now, by clicking - the "Image" or "Link" icons and then the "Browse Server" button.
      -

      - - - -

      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/fckeditor.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/fckeditor.html deleted file mode 100644 index a3714c1..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/fckeditor.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - CKFinder - Sample - FCKeditor Integration - - - - - - - -

      - CKFinder - Sample - FCKeditor Integration -

      -
      - CKFinder can be easily integrated with FCKeditor. Try it now, by clicking - the "Image" or "Link" icons and then the "Browse Server" button.
      -

      - -

      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/index.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/index.html deleted file mode 100644 index e37bc42..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - CKFinder - Samples - - - - - -

      - CKFinder Samples Site -

      -

      - Basic Samples (JavaScript) -

      - -

      - Basic Samples (PHP) -

      -
        -
      • Standalone
        The basic integration sample.
      • -
      • Popup
        CKFinder running in a popup.
      • -
      • Popups
        CKFinder running in a popup, each instance having it's own configuration.
      • -
      • CKEditor integration
        CKEditor with CKFinder being used as a file browser.
      • -
      • FCKeditor integration
        FCKeditor with CKFinder being used as a file browser.
      • -
      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/ckeditor.php b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/ckeditor.php deleted file mode 100644 index 8b55a1e..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/ckeditor.php +++ /dev/null @@ -1,90 +0,0 @@ - - - - - CKFinder - Sample - CKEditor - - - - - -

      - CKFinder - Sample - CKEditor Integration -

      -
      - CKFinder can be easily integrated with CKEditor. Try it now, by clicking - the "Image" or "Link" icons and then the "Browse Server" button.
      -
      Error: '.$ver.' not found. ' . - 'This sample assumes that '.$ver.' (not included with CKFinder) is installed in ' . - 'the "ckeditor" sibling folder of the CKFinder installation folder. If you have it installed in ' . - 'a different place, just edit this file, changing the wrong paths in the include ' . - '(line 57) and the "basePath" values (line 70).

      ' ; - $warned = true; -} - -// This is a check for the CKEditor PHP integration file. If not found, the paths must be checked. -// Usually you'll not include it in your site and use correct path in line 57 and basePath in line 70 instead. -// Remove this code after correcting the include_once statement. -if ( !@file_exists( '../../../ckeditor/ckeditor.php' ) ) -{ - if ( @file_exists('../../../ckeditor/ckeditor.js') || @file_exists('../../../ckeditor/ckeditor_source.js') ) - printNotFound('CKEditor 3.1+'); - else - printNotFound('CKEditor'); -} - -include_once '../../../ckeditor/ckeditor.php' ; -require_once '../../ckfinder.php' ; - -// This is a check for the CKEditor class. If not defined, the paths in lines 57 and 70 must be checked. -if (!class_exists('CKEditor')) -{ - printNotFound('CKEditor'); -} -else -{ - $initialValue = '

      Just click the Image or Link button, and then "Browse Server".

      ' ; - - $ckeditor = new CKEditor( ) ; - $ckeditor->basePath = '../../../ckeditor/' ; - - // Just call CKFinder::SetupCKEditor before calling editor(), replace() or replaceAll() - // in CKEditor. The second parameter (optional), is the path for the - // CKFinder installation (default = "/ckfinder/"). - CKFinder::SetupCKEditor( $ckeditor, '../../' ) ; - - $ckeditor->editor('CKEditor1', $initialValue); -} - -?> - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/fckeditor.php b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/fckeditor.php deleted file mode 100644 index cf1ac37..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/fckeditor.php +++ /dev/null @@ -1,69 +0,0 @@ - - - - - CKFinder - Sample - FCKeditor Integration - - - - - -

      - CKFinder - Sample - FCKeditor Integration -

      -
      - CKFinder can be easily integrated with FCKeditor. Try it now, by clicking - the "Image" or "Link" icons and then the "Browse Server" button.
      -

      -Error: FCKeditor not found. ' . - 'This sample assumes that FCKeditor (not included with CKFinder) is installed in ' . - 'the "fckeditor" sibling folder of the CKFinder installation folder. If you have it installed in ' . - 'a different place, just edit this file, changing the wrong paths in the include ' . - '(line 31) and the "BasePath" values (line 47).' ; -} -else -{ - $fckeditor = new FCKeditor( 'FCKeditor1' ) ; - $fckeditor->BasePath = '../../../fckeditor/' ; - $fckeditor->Value = '

      Just click the Image or Link button, and then "Browse Server".

      ' ; - - // Just call CKFinder::SetupFCKeditor before calling Create() or CreateHtml() - // in FCKeditor. The second parameter (optional), is the path for the - // CKFinder installation (default = "/ckfinder/"). - CKFinder::SetupFCKeditor( $fckeditor, '../../' ) ; - - $fckeditor->Create() ; -} - -?> -

      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popup.php b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popup.php deleted file mode 100644 index 4545cc5..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popup.php +++ /dev/null @@ -1,37 +0,0 @@ - - - - - CKFinder - Sample - Popup - - - - - -

      - CKFinder - Sample - Popup
      -

      -
      - The example of opening CKFinder in a popup window is available in the "_samples" directory. Click here to open it. -
      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popups.php b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popups.php deleted file mode 100644 index a9400d8..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/popups.php +++ /dev/null @@ -1,37 +0,0 @@ - - - - - CKFinder - Sample - Popups - - - - - -

      - CKFinder - Sample - Popups
      -

      -
      - The example of opening multiple CKFinder instances in popup windows is available in the "_samples" directory. Click here to open it. -
      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/standalone.php b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/standalone.php deleted file mode 100644 index 10be823..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/php/standalone.php +++ /dev/null @@ -1,84 +0,0 @@ - - - - - CKFinder - Sample - Standalone - - - - - - - -

      - CKFinder - Sample - Standalone -

      -
      - CKFinder may be used in standalone mode inside any page, to create a repository - manager with ease. You may define a custom JavaScript function to be called when - an image is selected (double-clicked).
      -

      -BasePath = '../../' ; // The path for the installation of CKFinder (default = "/ckfinder/"). -$finder->SelectFunction = 'ShowFileInfo' ; -// The default height is 400. -$finder->Height = 600; -$finder->Create() ; - -// It can also be done in a single line, calling the "static" -// Create( basePath, width, height, selectFunction ) function: -// CKFinder::CreateStatic( '../../', null, null, 'ShowFileInfo' ) ; - -?> -

      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popup.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popup.html deleted file mode 100644 index 1aa30e2..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popup.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - CKFinder - Sample - Popup - - - - - - - -

      - CKFinder - Sample - Popup
      -

      -
      - CKFinder may be used in a popup. You may define a custom JavaScript function to be called when - an image is selected (double-clicked).
      -

      - Selected File URL
      - - -

      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popups.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popups.html deleted file mode 100644 index a943227..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/popups.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - CKFinder - Sample - Popups - - - - - - - - -

      - CKFinder - Sample - Popups
      -

      -
      - CKFinder may be opened in a popup. You may define a custom JavaScript function to be called when - an image is selected (double-clicked).
      -

      - Selected File URL
      - - -

      -

      - Selected Image URL
      - - -

      - - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/public_api.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/public_api.html deleted file mode 100644 index 1441b63..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/public_api.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - CKFinder - Sample - Public API - - - - - - -

      - CKFinder - Sample - API examples -

      -
      -

      - CKFinder contains simple yet powerful API which allows you to extend it with your own features. -

      -

      - In this example, please check the file and folder context menu and toolbar in the Basket folder. -

      -
      -

      - -

      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/sample.css b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/sample.css deleted file mode 100644 index 0919b76..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/sample.css +++ /dev/null @@ -1,171 +0,0 @@ -/* - * CKFinder - * ======== - * http://cksource.com/ckfinder - * Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. - * - * The software, this file and its contents are subject to the CKFinder - * License. Please read the license.txt file before using, installing, copying, - * modifying or distribute this file or part of its contents. The contents of - * this file is part of the Source Code of CKFinder. - * - * Styles used in the samples pages. - */ - -html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre { - line-height: 1.5em; -} - -body { - padding:10px 30px; -} - -input, textarea, select, option, optgroup, button, td, th { - font-size: 100%; -} - -pre, -code, -kbd, -samp, -tt{ - font-family: monospace,monospace; - font-size: 1em; -} - -h1.samples { - color:#92B901; - font-size:200%; - font-weight:normal; - margin: 0; - padding: 0; -} - -h2.samples { - color:#000000; - font-size:130%; - margin: 0; - padding: 0; -} - -p, blockquote, address, form, pre, dl, h1.samples, h2.samples { - margin-bottom:15px; -} - -ul.samples { - margin-bottom:15px; -} - -.clear { - clear:both; -} - -fieldset -{ - margin: 0; - padding: 10px; -} - -body, input, textarea { - color: #333333; - font-family: Arial, Helvetica, sans-serif; -} - -body { - font-size: 75%; -} - -a.samples { - color: #92B901; - text-decoration:none; -} - -a.samples:hover { - text-decoration:underline; - color: #BED567; -} - -form -{ - margin: 0; - padding: 0; -} - -pre.samples -{ - background-color: #F7F7F7; - border: 1px solid #D7D7D7; - overflow: auto; - padding: 0.25em; -} - -#alerts -{ - color: Red; -} - -#footer { - clear: both; - padding-top: 10px; -} -#footer hr -{ - margin: 10px 0 15px 0; - height: 1px; - border: solid 1px gray; - border-bottom: none; -} - -#footer p -{ - margin: 0 10px 10px 10px; - float: left; -} - -#footer #copy -{ - float: right; -} - -#outputSample -{ - width: 100%; - table-layout: fixed; -} - -#outputSample thead th -{ - color: #dddddd; - background-color: #999999; - padding: 4px; - white-space: nowrap; -} - -#outputSample tbody th -{ - vertical-align: top; - text-align: left; -} - -#outputSample pre -{ - margin: 0; - padding: 0; - white-space: pre; /* CSS2 */ - white-space: -moz-pre-wrap; /* Mozilla*/ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS 2.1 */ - white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */ - word-wrap: break-word; /* IE */ -} - -.description { - border: 1px dotted #B7B7B7; - margin-bottom: 10px; - padding: 20px 10px 20px; -} - -label { - display: block; - margin-bottom:6px; -} diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone.html deleted file mode 100644 index ae8f967..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - CKFinder - Sample - Standalone - - - - - - -

      - CKFinder - Sample - Standalone -

      -
      - CKFinder may be used in standalone mode inside any page, to create a repository - manager with ease. You may define a custom JavaScript function to be called when - an image is selected (double-clicked).
      -

      - -

      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone_v1.html b/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone_v1.html deleted file mode 100644 index 23ad77e..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/_samples/standalone_v1.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - CKFinder - Sample - Standalone (V1) - - - - - - - - -

      - CKFinder - Sample - Standalone (V1) -

      -

      - CKFinder may be used in standalone mode inside any page, to create a repository - manager with ease. You may define a custom JavaScript function to be called when - an image is selected (double-clicked).

      -
      - This sample is using the old "V1" integration method. -
      -
      - -
      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/changelog.txt b/php/pic_switch_demo/static/ckeditor/ckfinder/changelog.txt deleted file mode 100644 index 6b74bf8..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/changelog.txt +++ /dev/null @@ -1,210 +0,0 @@ -CKFinder Changelog -================== -http://cksource.com/ckfinder -Copyright (C) 2007-2014, CKSource - Frederico Knabben. All rights reserved. - -### Version 2.4.2 -- Updated syntax highlighting component used in the fileeditor plugin. Added languages support: markdown, restructured text, java, less, sass, scss, perl, python, ruby and sql. -- Changed default thumbnail delay to 100ms. -- Fixed: Loading thumbnails is terribly slow when there are many files in a folder. -- Fixed: Using "Search" while the folder was loading could result in a JavaScript error. -- Fixed: External script loading in popup does not work in Internet Explorer. -- Fixed: Editing of text files broken in Chrome 31 and higher. -- Fixed: Too early thumb render on uploading multiple files. -- Fixed: Issues with HTML5 upload in IE11 "tile mode" when in popup. -- Fixed: Issues when calling CKFinder popup twice. -- Fixed: CKFinder with thumbs disabled - icons are not shown. -- Fixed: IE9: SCRIPT1002: Syntax error. -- Updated translations: Italian, Turkish. - -### Version 2.4.1 -Updated copyrights, fixed URLs inside source code, other minor fixes. -[PHP] - Fixed: Empty filename when non-UTF-8 character is found on nginx with PHP 5.4 - -### Version 2.4 -- Added Search box in the toolbar that performs search of those files matching the searched string in the current folder. -- Fixed: Images can be overwritten on resizing. -- Fixed: File extension is now hidden when "Create new image" checkbox is unselected in Image Resize dialog. -- Fixed: When the file name was too long it overlapped the image in Lightbox preview. -- Fixed: Display issues in Internet Explorer 10 and Internet Explorer 11. -- Fixed: It was impossible to upload files in IE10/IE11 when CKFinder was running in a popup. -- Fixed: Classic upload for popup sample did not work in IE9. -- Fixed: Dialog windows could not be opened after opening CKFinder twice in a popup. -- Fixed: Various "access denied" errors appeared from time to time in IE when CKFinder was running in a popup. -- Fixed: CKFinderAPI.disableFolderContextMenuOption() did not work for "createSubFolder"/"renameFolder" items. -- Fixed: In some cases, and empty (undefined) error message was shown to the user when an error occured. -- Updated colorbox library used by the gallery plugin to the latest version, compatible with latest versions of jQuery. -[PHP] - Fixed paths resolving by resolveUrl() function. - -### Version 2.3.1.1 - -### Version 2.3.1 -Security Release: -It was possible to perform DOS attack by users authorized to use the sever connector and with permissions to upload files (ASP, PHP, ColdFusion). -It was possible to cause Denial of Service to files and folders on certain servers (like Apache) by users authorized to use the sever connector and with permissions to create folders. The attack was possible only inside a folder to which user had create folder permissions. -- Added new translation: Serbian. -- Updated translations: Catalan, Chinese, Japanese. -- Folders that start with a dot character are now disallowed by default. -- Fixed auto-renaming of files with multiple extensions: foo.tar.gz will be renamed to foo(1).tar.gz on second upload. -- Maximize did not work when CKFinder was added with appendTo() - -### Version 2.3 -- Added the new Maximize plugin. -- Multiple file selection: copying / moving / deleting / selecting multiple files is now possible. -- When no other selection function defined, double clicking a file will now execute the View command. -- File editor plugin was upgraded to use CodeMirror 2. C# support was added. -- It is now possible to select a file on startup by using the config.startupPath configuration. -- Added a new configuration option, config.sidebarWidth, to change the initial width of the sidebar (where the folders pane is located) with ease. -- The name of the file is now displayed when hovering over a file. -- Added a new API method, api.addFolderDropMenuOption, to add new options to the menu that opens once files are dropped into a folder. -- Added an option for plugins to specify if a toolbar button should be disabled when basket is empty. -- Added new translation: Catalan. -- Updated translations: Hebrew. -- Fixed: Thumbnails of custom sizes are now displayed correctly at the files list. -- Fixed: Files from the right resource type will be shown at the second opening of CKFinder via CKEditor. -- Fixed: Impossible to set height of CKFinder when using SetupCKEditor(). -- Fixed: Extension is now uneditable in the ImageResize dialog window. -- Fixed: Hitting F5 and CTRL+R inside a CKFinder popup will not close the window. -- Fixed: IE will not show an error on the console when opening Developer Tools when inside the popup. -- Fixed: The "onbeforeunload" event of the host document will now be preserved. -- Fixed: The "Resize" dialog window looks better on Webkit. -- Fixed: The thumbnail inside the "Resize" dialog window is now limited in size. -- Fixed: An hidden CKFinder instance will now have correct height when shown. -- Fixed: The rememberLastFolder configuration now works when opening CKFinder as a popup. -- Fixed: In forced IE7 compatibility mode, IE8 did not display dialogs correctly. -- Fixed: It is now possible to use a callback for the Basket's context menu and toolbar labels, as well as custom language strings. -- Fixed: Layout may appear broken after upload. -- Fixed: IE 10: Compatibility with latest beta version. -- Fixed: Thumbnails were left in the old location when files were moved. -[PHP] - Added a new Zip plugin, that can create and extract zip archives and allows to download a folder or multiple files as a zip package. -[PHP] - Dropped support for PHP 4.x. - -### Version 2.2.2 -- Fixed: The new Chrome 20 is again causing issues with finder.popup(). The new fix should work for all future versions of Chrome. - -### Version 2.2.1 -- Fixed: finder.popup() does not work in Chrome 18. - -### Version 2.2 -Security Release: fixed filtering of unsafe characters for IIS6 web server. -- HTML5 multiple file uploads introduced. -- Files can now be uploaded by using the drag&drop in Firefox and Chrome. -- Added a read-only mode (config.readOnly), which if enabled, lets the user browse the files but not upload or modify them. -- CKFinder now supports common lightbox plugins by default when viewing files, and will use Colorbox to show images if no other lightbox plugin is loaded. -- "Upload" button in the toolbar now remains active after a file has been uploaded if the Upload Pane is still open. -- Improved formatting of file sizes. -- Dialog window definition now contains a new connectorResponse property which can use raw data sent from the server inside plugins. -- Added support for full URLs in the SetupCKEditor() method. -- Configuration objects passed to the SetupCKEditor() method are now in fact being used. -- Improved support for Android and iOS tablets. -- Updated translations: Slovak; minor updates in all other localizations. -- Fixed: Permission denied to set property Window.onbeforeunload. -- Fixed: ckfinder_v1.js: SetupCKEditor() and SetupFCKeditor() methods are causing a JavaScript error. -- Fixed: IE, Opera: Double clicking a file causes CKFinder to try to close the browser tab. -- Fixed: IE, Opera: CKFinder closes the browser tab after the tab which linked to it was closed. -- Fixed: IE, Opera: CKFinder tries to close the browser tab after pressing the F5 key (Refresh). -- Fixed: When CKFinder is integrated with CKEditor, the URL that is sent back from the Upload tab after a successful file upload is not being encoded properly. -- Fixed: It is impossible to view a file with a special character in its name. -- Fixed: IE8: Selecting a file requires a double click instead of a single one. -- Fixed High Contrast mode detection. -- Fixed: Flash uploader is unable to deal with unexpected errors. -[PHP] - Fixed: Incorrect encoding of file names returned after the file upload. -[PHP] - Added: Support full URLs in resolveUrl() to resolve to correct $baseDir. - -### Version 2.1.1 -- Sorting by file extension is now available. -- Clear Basket button is now only active when applicable. -- Added support for skins in custom paths (config.skin). -- Added a new API method to destroy an instance (api.destroy()). -- Added an option to specify additional parameters for server requests (config.connectorInfo). -- Added new translations: Bulgarian, Croatian, Esperanto, Gujarati, Hindi, Romanian, Vietnamese, Welsh. -- Updated translations: Brazilian Portuguese, Chinese Simplified, Czech, Dutch, Estonian, Finnish, French, German, Greek, Hebrew, Italian, Lithuanian, Norwegian Bokmål, Norwegian Nynorsk, Persian, Polish, Russian, Slovenian, Spanish, Swedish, Turkish. -- Added Czech version of CKFinder User's Guide ("Help"). -- A callback function (config.callback) can now also be defined in the configuration file. -- Added RTL support for skins. -- Improved RTL support in the Flash upload component. -- Fixed: The Flash uploader used wrong URL to send files when CKFinder had an ID attribute assigned (as a result, the upload was never marked as completed). -- Fixed: Added protection against thumbnail caching. CKFinder was displaying an old thumbnail when a user deleted a file and then a file with the same name was uploaded. -- Fixed: [Opera] Double clicking on a folder opens the browser's context menu. -- Fixed: It was impossible to re-enable a disabled context menu command. -- Fixed: config.id is now available for reading within custom configuration. -- Fixed: [Firefox] JavaScript error when reloading the page where CKFinder is used as a popup. -- Fixed: [IE, Chrome] Focus is lost after closing a dialog window. -- Fixed: The startupPath option did not work. -- Fixed: Unable to use CKFinder inside modal dialogs due to inability to properly destroy the previous instance. -[PHP] - Fixed: When cookie contains an array, clicking the Upload button resulted in an error. -[PHP] - Fixed: The Watermark plugin (and the AfterFileUpload hook) did not work. -[PHP] - Fixed: Uploading files did not work when memory_limit was set to -1. - -### Version 2.1 -- Added support for multiple uploads using the Flash component. -- Improved rendering of thumbnails. Thumbnails are now loaded dynamically, only when the file is visible. - A configurable delay between requesting each thumbnail is available: config.thumbnailDelay. -- Added support for file upload using HTML5 FormData. -- Added an option to set the base user interface color: config.uiColor. -- File upload requires less clicks. -- Improved keyboard navigation and actions. -- Compatibility with mobile devices (Android and iOS). -- Added an option to show an arrow icon that will launch the context menu: config.showContextMenuArrow. -- Updated translations: Brazilian Portuguese, Chinese Simplified, Dutch, Finnish, Hebrew, Italian, Polish, Spanish. -- Added new translations: Estonian, Lithuanian, Persian, Turkish. -- CKFinder User's Guide ("Help") rewritten and fully updated for English and Polish. -- Improved error handling when receiving an invalid XML response from the server connector. -- Added an option to show the OS icons in Firefox: config.useNativeIcons. -- Added an option to specify the path to the custom server connector: config.connectorPath. -- Fixed: The "Download" option returns an improperly encoded filename. -- Fixed: The dialog window used during the copying/pasting operations was broken in IE7. -- Fixed: The Folders Pane was too small in Internet Explorer 9 in compatibility mode. -- Fixed: English text in dialog window titles was flipped when using an RTL language. -- Fixed: View image command opens the file in the same window in Internet Explorer. -- Fixed: Opening context menu triggers folder reload. -- Fixed: Invalid paths in popup(s) samples. -- Fixed: CKFinder was sometimes throwing an "Object doesn't support this property or method" error in Internet Explorer. -- Fixed: Thumbnails were not created if a folder or file name contains a single quote character. -- Fixed: Disable upload button for iOS. -[PHP] - Modified the default settings in the configuration file for the Images resource type. -[PHP] - Fixed: CKFinder did not work in Internet Explorer when there was a file with a name that contained some strange characters. - -### Version 2.0.2 -- Added a way to programmatically close a popup window: closePopup(). -- Added new translation: Finnish. -- Updated syntax highlighting component used in the fileeditor plugin. -- Fixed compatibility issues with IE9 RC. -- Fixed: CKFinder does not scroll correctly to the uploaded file. -- Fixed: Invalid height of the editing window in the File Editor dialog window. -- Fixed: CKFinder.dom.element.getWindows method is not available. -- Fixed: [Opera] Context menu does not work in the files pane. -- Fixed: When CKFinder is opened in a popup window, after pressing the Cancel button CKFinder asks for confirmation in a wrong window. -- Fixed: Download does not work in IE8 in a popup window. -- Fixed: It is impossible to upload a file when CKFinder is running in a popup window. -- Fixed: File editor does not work in a popup window. -[PHP] - Fixed: CKFinder loses PNG image transparency on thumbnails. -[PHP] - Fixed: thumbnails are corrupted when files calling ob_start() are included in config.php. - -### Version 2.0.1 -- Default view settings are now configurable. -- Minimum height for CKFinder has been set to 200px. -- CKFINDER.version and CKFINDER.revision variables are now available. -- Updated and added new translations: French, Hebrew, Japanese, Russian. -- Callback function can now be defined also in the configuration file. -- CKFinder will now remember client settings in a cookie. -- Files are now selected automatically after upload. -- Fixed: Permission denied error in IE 8 when using CKFinder in a popup. -- Fixed: Upload progress bar was broken in FF 3.5+. -- Fixed: CKFinder does not work in a frameset. -- Fixed: RTL support in the files pane. -- Fixed: SSL support in IE6 and Firefox 3.0. -- Fixed: application ID was not passed to the server connector. -- Fixed: CKFinder.setupCKEditor was not working when null was passed as the first argument. -- Fixed: dialogs in an iframe in IE8 quirks mode are rendered incorrectly. -- Fixed: dialogs in IE in quirks mode looked bad. -- Fixed: right click triggered drag&drop in Safari. -- Fixed: content was selected during resizing in Safari. -- Fixed: dialog borders in V1 skin in IE6. -- Fixed: "Empty folder" message disappeared after changing files view mode. -- Fixed: context menu in Firefox on a Mac does not work. -- Fixed: changing file extension caused issues with renaming file for the second time. -- Fixed issue with caching thumbnails. - -### Version 2.0 -- First public release of 2.x version of CKFinder. diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.html b/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.html deleted file mode 100644 index 94c003e..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - CKFinder - - - - - - -
      - - - diff --git a/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.js b/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.js deleted file mode 100644 index fcd288c..0000000 --- a/php/pic_switch_demo/static/ckeditor/ckfinder/ckfinder.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. -For licensing, see license.txt or http://cksource.com/ckfinder/license -*/ - -(function(){var a=(function(){var h={jY:'E7F823V',_:{},status:'unloaded',basePath:(function(){var k=window.CKFINDER_BASEPATH||'';if(!k){var l=document.getElementsByTagName('script');for(var m=0;m=0?'&':'?')+'t='+this.jY;return k;}},i=window.CKFINDER_GETURL;if(i){var j=h.getUrl;h.getUrl=function(k){return i.call(h,k)||j.call(h,k);};}return h;})();function b(h){return a.instances[h];};var c={callback:1,selectThumbnailActionFunction:1,selectActionFunction:1};a.jd=function(){var j=this;var h={};for(var i in j){if(!j.hasOwnProperty(i))continue;if(typeof j[i]=='function'&& !c[i]||typeof j[i]=='undefined')continue;h[i]=j[i];}if(j.callback)h.callback=j.callback;return h;};a.lj=function(h){var k=this;h=h||k.basePath;var i='';if(!h||h.length===0)h=CKFinder.DEFAULT_basePath;if(h.substr(h.length-1,1)!='/')h+='/';h+='ckfinder.html';var j;if(k.hh){j=k.hh;if(typeof j=='function')j=j.toString().match(/function ([^(]+)/)[1];i+='?action=js&func='+j;}if(k.jx){i+=i?'&':'?';i+='data='+encodeURIComponent(k.jx);}if(k.disableThumbnailSelection){i+=i?'&':'?';i+='dts=1';}else if(k.lH||k.hh){j=k.lH||k.hh;if(typeof j=='function')j=j.toString().match(/function ([^(]+)/)[1];i+=i?'&':'?';i+='thumbFunc='+j;if(k.nm)i+='&tdata='+encodeURIComponent(k.nm);else if(!k.lH&&k.jx)i+='&tdata='+encodeURIComponent(k.jx);}if(k.startupPath){i+=i?'&':'?';i+='start='+encodeURIComponent(k.startupPath+(k.startupFolderExpanded?':1':':0'));}if(k.rememberLastFolder!==undefined&& !k.rememberLastFolder){i+=i?'&':'?';i+='rlf=0';}if(k.id){i+=i?'&':'?';i+='id='+encodeURIComponent(k.id);}if(k.skin){i+=i?'&':'?';i+='skin='+encodeURIComponent(k.skin);}return h+i;};function d(h){var k=this;k.id=h.name;var i=h.element.getDocument().getWindow().$,j=a.oC.getWindow().$;k.inPopup= ! !(i&&i.opener);k.inIframe= !k.inPopup&&i!=j.top&&i.frameElement.nodeName.toLowerCase()=='iframe';k.inFrame= !k.inPopup&&i!=j.top&&i.frameElement.nodeName.toLowerCase()=='frame';k.inUrlPopup= ! !(k.inPopup&&j.opener);};function e(h,i,j){i.on('appReady',function(k){k.removeListener();h.document=i.document.$;h.folders=i.folders;h.files=i.ld['filesview.filesview'].data().files;h.basketFiles=i.basketFiles;h.resourceTypes=i.resourceTypes;h.connector=i.connector;h.lang=i.lang;h.langCode=i.langCode;h.config=i.config;i.ld['foldertree.foldertree'].on('afterAddFolder',function(l){l.removeListener();if(j)j(h);},h);},h,null,999);};d.prototype={_:{},addFileContextMenuOption:function(h,i,j){var k=b(this.id),l='FileContextMenu_'+h.command;k.bD(l,{exec:function(m){var n=m.ld['filesview.filesview'].tools.dH();i(m.cg,n);}});h.command=l;if(!h.group)h.group='file1';k.gp(l,h);k.ld['filesview.filesview'].on('beforeContextMenu',function o(m){if(j){var n=j(this.tools.dH());if(n)m.data.bj[l]=n== -1?a.aY:a.aS;}else m.data.bj[l]=a.aS;});},disableFileContextMenuOption:function(h,i){var j=b(this.id),k=i?'FileContextMenu_'+h:h,l=function n(m){delete m.data.bj[k];};j.ld['filesview.filesview'].on('beforeContextMenu',l);return function(){j.ld['filesview.filesview'].removeListener('beforeContextMenu',l);};},addFolderContextMenuOption:function(h,i,j){var k=b(this.id),l='FolderContextMenu_'+h.command;k.bD(l,{exec:function(m){i(m.cg,m.aV);}});h.command=l;if(!h.group)h.group='folder1';k.gp(l,h);k.ld['foldertree.foldertree'].on('beforeContextMenu',function o(m){if(j){var n=j(this.app.aV);if(n)m.data.bj[l]=n== -1?a.aY:a.aS;}else m.data.bj[l]=a.aS;});},disableFolderContextMenuOption:function(h,i){var j=b(this.id),k=i?'FolderContextMenu_'+h:h,l=function n(m){delete m.data.bj[k];};j.ld['foldertree.foldertree'].on('beforeContextMenu',l);return function(){j.ld['foldertree.foldertree'].removeListener('beforeContextMenu',l);};},addFolderDropMenuOption:function(h,i,j){var k=b(this.id),l='FolderDropMenu_'+h.command;k.bD(l,{exec:function(n){i(n.cg,n.cK.oa());}});h.command=l;var m=new a.iD(k,l,h);k.ld['foldertree.foldertree'].on('beforeDropMenu',function o(n){if(j?j.call(k.cg,n.data.folder):1)n.data.iG[l]=m;});},disableFolderDropMenuOption:function(h,i){var j=b(this.id),k=i?'FolderDropMenu_'+h:h,l=function n(m){delete m.data.iG[k];};j.ld['foldertree.foldertree'].on('beforeDropMenu',l);return function(){j.ld['foldertree.foldertree'].removeListener('beforeDropMenu',l);};},getSelectedFile:function(){return b(this.id).ld['filesview.filesview'].tools.dH();},getSelectedFiles:function(){return b(this.id).ld['filesview.filesview'].tools.oO();},getSelectedFolder:function(){return b(this.id).aV;},filterFiles:function(h){b(this.id).ld['filesview.filesview'].oW('requestRenderFiles',{lookup:h});},setUiColor:function(h){return b(this.id).setUiColor(h);},destroy:function(h){b(this.id).destroy();h&&h();},openDialog:function(h,i){var l=this;var j=new a.dom.document(window.document).getHead(),k=b(l.id).document.getWindow();if(l.inFrame||l.inPopup||l.inIframe)a.document=b(l.id).document;return b(l.id).openDialog(h,i,j);},openMsgDialog:function(h,i){b(this.id).msgDialog(h,i);},openConfirmDialog:function(h,i,j){b(this.id).fe(h,i,j);},openInputDialog:function(h,i,j,k){b(this.id).hs(h,i,j,k);},openSkippedFilesDialog:function(h,i,j,k){b(this.id).skippedFilesDialog(h,i,j,k);},addTool:function(h){return b(this.id).plugins.tools.addTool(h);},addToolPanel:function(h){return b(this.id).plugins.tools.addToolPanel(h);},removeTool:function(h){b(this.id).plugins.tools.removeTool(h);},showTool:function(h){b(this.id).plugins.tools.showTool(h);},hideTool:function(h){b(this.id).plugins.tools.hideTool(h);},getResourceType:function(h){return b(this.id).getResourceType(h);},log:function(h){a.log.apply(a.log,arguments);},getLog:function(){return a.mZ();},emptyBasket:function(){b(this.id).execCommand('TruncateBasket');},replaceUploadForm:function(h,i,j,k){var l=b(this.id);if(!k)k=10;if(k>=(l.dC||20))return;l.dC=k;l.ld['formpanel.formpanel'].on('beforeUploadFileForm',function(m){if(m.data.step!=2)return;if(k>l.dC)return;m.cancel(true);var n=this.data(),o=m.data.folder;try{if(n.dc=='upload')this.oW('requestUnloadForm',function(){this.app.cS('upload').bR(a.aS);});else{if(this.data().dc)this.oW('requestUnloadForm');if(!j)this.eh.removeClass('show_border');this.oW('requestLoadForm',{html:h,command:'upload'});i&&i();}}catch(p){this.oW('failedUploadFileForm',m.data);this.oW('afterUploadFileForm',m.data);throw a.ba(p);}});return{hide:function(){l.oW('requestUnloadForm',function(){l.cS('upload').bR(a.aS);});}};},resizeFormPanel:function(h){var i=b(this.id);if(typeof h=='undefined'){i.document.getById('panel_view').setStyle('height','');i.document.getById('panel_widget').setStyle('height','');}else{var j=Math.min(h,Math.max(90,i.document.getById('main_container').$.offsetHeight-300));i.document.getById('panel_view').setStyle('height',j+'px');i.document.getById('panel_widget').setStyle('height',j-3+'px');}i.layout.ea(true);},refreshOpenedFolder:function(){var h=b(this.id),i=h.ld['filesview.filesview'].tools.currentFolder();h.oW('requestSelectFolder',{folder:i});},selectFile:function(h){var i=b(this.id);i.oW('requestSelectFile',{file:h,scrollTo:1});},closePopup:function(){if(!this.inPopup)return;b(this.id).element.getDocument().getWindow().$.close();},openFolder:function(h,i){var j=b(this.id);i=i.replace(/\/$/,'');h=h.toLowerCase();for(var k=0;k');i=a.tools.extend(a.jd.call(this),i,true);var k=a.replace(j,i,CKFinder);this.api=k.cg;return k.cg;},appendTo:function(i,j){j=a.tools.extend(a.jd.call(this),j,true);var k=a.appendTo(i,j,CKFinder);this.api=k.cg;return k.cg;},replace:function(i,j){j=a.tools.extend(a.jd.call(this),j,true);var k=a.replace(i,j,CKFinder);this.api=k.cg;return k.cg;},popup:function(i,j){var s=this;i=i||'80%';j=j||'70%';if(typeof i=='string'&&i.length>1&&i.substr(i.length-1,1)=='%')i=parseInt(window.screen.width*parseInt(i,10)/100,10);if(typeof j=='string'&&j.length>1&&j.substr(j.length-1,1)=='%')j=parseInt(window.screen.height*parseInt(j,10)/100,10);if(i<200)i=200;if(j<200)j=200;var k=parseInt((window.screen.height-j)/2,10),l=parseInt((window.screen.width-i)/2,10),m='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,width='+i+',height='+j+',top='+k+',left='+l,n=a.env.webkit?'about:blank':'',o=window.open(n,'CKFinderpopup',m,true);if(!o)return false;s.width=s.height='100%';var p='CKFinder 2',q=new a.dom.document(o.document);q.$.open();if(a.env.isCustomDomain())q.$.domain=window.document.domain;q.$.write(p);q.$.close();try{var r=navigator.userAgent.toLowerCase();if(r.indexOf(' chrome/')== -1){o.moveTo(l,k);o.resizeTo(i,j);}o.focus();return s.appendTo(q.bH());}catch(t){return s.appendTo(q.bH());}return false;}};CKFinder._={};CKFinder._.instanceConfig=[];CKFinder.lang={};CKFinder.version='2.4.2';CKFinder.revision='2731';CKFinder.addPlugin=function(i,j,k){var l={bM:k||[]};if(typeof j=='function')j={appReady:j};for(var m in j){if(!j.hasOwnProperty(m))continue;if(m!='connectorInitialized'&&m!='uiReady')l[m]=j[m];}l.bz=function(n){if(n.config.readOnly&&l.readOnly===false)return null;if(j.connectorInitialized)n.on('connectorInitialized',function(o){var p=j.connectorInitialized;if(p)p.call(p,n.cg,o.data.xml);},null,null,1000);if(j.connectorResponse)n.on('connectorResponse',function(o){var p=j.connectorResponse;if(p)p.call(p,n.cg,o.data.xml);});if(j.galleryCallback)n.on('launchGallery',function(o){var p=j.galleryCallback;if(p)o.data.bx=p.call(p,n.cg,o.data.selected,o.data.files);});if(j.uiReady)n.on('uiReady',function(){var o=j.uiReady;o.call(o,n.cg);},null,null,1000);if(j.appReady)n.on('appReady',function(){var o=j.appReady;o.call(o,n.cg);},null,null,1000);};a.plugins.add(i,l);};CKFinder.getPluginPath=function(i){return a.plugins.getPath(i);};CKFinder.addExternalPlugin=function(i,j,k){a.plugins.tR(i,j,k);};CKFinder.setPluginLang=function(i,j,k){a.plugins.rX(i,j,k);};CKFinder.dialog={add:function(i,j){if(typeof j=='function')j=a.tools.override(j,function(k){return function(l){return k(l.cg);};});a.dialog.add(i,j);}};CKFinder.tools={};CKFinder.env={};CKFinder.dom={};CKFinder.create=function(i,j,k,l,m){var n;if(i!==null&&typeof i==='object'){n=new CKFinder();for(var o in i)n[o]=i[o];}else{n=new CKFinder();n.basePath=i;if(j)n.width=j;if(k)n.height=j;if(l)n.selectActionFunction=l;if(m)n.callback=m;}return n.create();};CKFinder.popup=function(i,j,k,l,m){var n;if(i!==null&&typeof i==='object'){n=new CKFinder();for(var o in i)n[o]=i[o];}else{n=new CKFinder();n.basePath=i;if(l)n.selectActionFunction=l;if(m)n.callback=m;}return n.popup(j,k);};CKFinder.setupFCKeditor=function(i,j,k,l){var m,n;if(j!==null&&typeof j==='object'){n=h(j);m=new CKFinder();for(var o in j){m[o]=j[o];if(o=='width'){var p=m[o]||800;if(typeof p=='string'&&p.length>1&&p.substr(p.length-1,1)=='%')p=parseInt(window.screen.width*parseInt(p,10)/100,10);i.Config.LinkBrowserWindowWidth=p;i.Config.ImageBrowserWindowWidth=p;i.Config.FlashBrowserWindowWidth=p;}else if(o=='height'){var q=m[o]||600;if(typeof q=='string'&&q.length>1&&q.substr(q.length-1,1)=='%')q=parseInt(window.screen.height*parseInt(q,10)/100,10);i.Config.LinkBrowserWindowHeight=q;i.Config.ImageBrowserWindowHeight=q;i.Config.FlashBrowserWindowHeight=q;}}}else{m=new CKFinder();m.basePath=j;}var r=m.basePath;if(r.substr(0,1)!='/'&&r.indexOf('://')== -1)r=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1)+r;r=a.lj.call(m,r);var s=r.indexOf('?')!== -1?'&':'?';if(n){r+=s+'configId='+n;s='&';}i.Config.LinkBrowserURL=r;i.Config.ImageBrowserURL=r+s+'type='+(k||'Images');i.Config.FlashBrowserURL=r+s+'type='+(l||'Flash');var t=r.substring(0,1+r.lastIndexOf('/'));i.Config.LinkUploadURL=t+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type=Files';i.Config.ImageUploadURL=t+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type='+(k||'Images');i.Config.FlashUploadURL=t+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type='+(l||'Flash');};CKFinder.setupCKEditor=function(i,j,k,l){if(i===null){for(var m in CKEDITOR.instances)CKFinder.setupCKEditor(CKEDITOR.instances[m],j,k,l);CKEDITOR.on('instanceCreated',function(v){CKFinder.setupCKEditor(v.editor,j,k,l);});return;}var n,o;if(j!==null&&typeof j==='object'){o=h(j);n=new CKFinder();for(var p in j){n[p]=j[p];if(p=='width'){var q=n[p]||800;if(typeof q=='string'&&q.length>1&&q.substr(q.length-1,1)=='%')q=parseInt(window.screen.width*parseInt(q,10)/100,10);i.config.filebrowserWindowWidth=q;}else if(p=='height'){var r=n[p]||600;if(typeof r=='string'&&r.length>1&&r.substr(r.length-1,1)=='%')r=parseInt(window.screen.height*parseInt(r,10)/100,10);i.config.filebrowserWindowHeight=r;}}}else{n=new CKFinder();n.basePath=j;}var s=n.basePath;if(s.substr(0,1)!='/'&&s.indexOf('://')== -1)s=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1)+s;s=a.lj.call(n,s);var t=s.indexOf('?')!== -1?'&':'?';if(o){s+=t+'configId='+o;t='&';}i.config.filebrowserBrowseUrl=s;i.config.filebrowserImageBrowseUrl=s+t+'type='+(k||'Images');i.config.filebrowserFlashBrowseUrl=s+t+'type='+(l||'Flash');var u=s.substring(0,1+s.lastIndexOf('/'));i.config.filebrowserUploadUrl=u+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type=Files';i.config.filebrowserImageUploadUrl=u+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type='+(k||'Images');i.config.filebrowserFlashUploadUrl=u+'core/connector/'+CKFinder.config.connectorLanguage+'/connector.'+CKFinder.config.connectorLanguage+'?command=QuickUpload&type='+(l||'Flash');};})();if(!a.event){a.event=function(){};a.event.du=function(h,i){var j=a.event.prototype;for(var k in j){if(h[k]==undefined)h[k]=j[k];}};a.event.prototype=(function(){var h=function(j){var k=j.kk&&j.kk()||j._||(j._={});return k.cC||(k.cC={});},i=function(j){this.name=j;this.dF=[];};i.prototype={mi:function(j){for(var k=0,l=this.dF;k=0;t--){if(q[t].nT<=n){q.splice(t+1,0,s);return;}}q.unshift(s);}},oW:(function(){var j=false,k=function(){j=true;},l=false,m=function(n){l=n?2:true;};return function y(n,o,p,q){if(typeof o=='function'){q=o;o=null;}else if(typeof p=='function'){q=p;p=null;}if(n!='mousemove')a.log('[EVENT] '+n,o,q);var r=h(this)[n],s=j,t=l;j=l=false;if(r){var u=r.dF;if(u.length){u=u.slice(0);for(var v=0;v=0)l.dF.splice(m,1);}},mF:function(){var j=h(this);for(var k=0;k0;}};})();}if(!a.application){a.kZ=0;a.fc=1;a.qE=2;a.application=function(h,i,j,k){var l=this;l._={instanceConfig:h,element:i};l.ff=j||a.kZ;a.event.call(l);l.iI(k);};a.application.replace=function(h,i,j){var k=h;if(typeof k!='object'){k=document.getElementById(h);if(!k){var l=0,m=document.getElementsByName(h);while((k=m[l++])&&k.tagName.toLowerCase()!='textarea'){}}if(!k)throw '[CKFINDER.application.replace] The element with id or name "'+h+'" was not found.';}return new a.application(i,k,a.fc,j);};a.application.appendTo=function(h,i,j){if(typeof h!='object'){h=document.getElementById(h);if(!h)throw '[CKFINDER.application.appendTo] The element with id "'+h+'" was not found.';}return new a.application(i,h,a.qE,j);};a.application.prototype={iI:function(){var h=a.application.eb||(a.application.eb=[]);h.push(this);},oW:function(h,i,j){return a.event.prototype.oW.call(this,h,i,this,j);},cr:function(h,i,j){return a.event.prototype.cr.call(this,h,i,this,j);}};a.event.du(a.application.prototype,true);}if(!a.env){var f=/rv:([\d\.]+)/,g=/trident\/([\d]+)/;a.env=(function(){var h=navigator.userAgent.toLowerCase(),i=window.opera,j={ie: -/*@cc_on!@*/false,iemodern:false,opera: ! !i&&i.version,webkit:h.indexOf(' applewebkit/')> -1,air:h.indexOf(' adobeair/')> -1,mac:h.indexOf('macintosh')> -1,quirks:document.compatMode=='BackCompat',isCustomDomain:function(){return this.ie&&document.domain!=window.location.hostname;}};j.gecko=navigator.product=='Gecko'&& !j.webkit&& !j.opera;j.chrome=false;j.safari=false;if(j.webkit)if(h.indexOf(' chrome/')> -1)j.chrome=true;else j.safari=true;var k=0;if(j.ie){k=parseFloat(h.match(/msie (\d+)/)[1]);j.ie8= ! !document.documentMode;j.ie8Compat=document.documentMode==8;j.ie7Compat=k==7&& !document.documentMode||document.documentMode==7;j.ie6Compat=k<7||j.quirks;}if(j.gecko){var l=h.match(f);if(l){l=l[1].split('.');k=l[0]*10000+(l[1]||0)*100+ +(l[2]||0);}if(g.test(h)){j.gecko=false;j.iemodern=true;}else j.isMobile=h.indexOf('fennec')> -1;}if(j.opera){k=parseFloat(i.version());j.isMobile=h.indexOf('opera mobi')> -1;}if(j.air)k=parseFloat(h.match(/ adobeair\/(\d+)/)[1]);if(j.webkit){k=parseFloat(h.match(/ applewebkit\/(\d+)/)[1]);j.isMobile=h.indexOf('mobile')> -1;}j.version=k;j.isCompatible=j.ie&&k>=6||j.iemodern&&k>=11||j.gecko&&k>=10801||j.opera&&k>=9.5||j.air&&k>=1||j.webkit&&k>=522||false;j.cssClass='browser_'+(j.ie?'ie':j.iemodern?'iemodern':j.gecko?'gecko':j.opera?'opera':j.air?'air':j.webkit?'webkit':'unknown');if(j.quirks)j.cssClass+=' browser_quirks';if(j.ie){j.cssClass+=' browser_ie'+(j.version<7?'6':j.version>=8?'8':'7');if(j.quirks)j.cssClass+=' browser_iequirks';if(j.ie7Compat)j.cssClass+=' browser_ie7Compat';}if(j.gecko&&k<10900)j.cssClass+=' browser_gecko18';return j;})();CKFinder.env=a.env;}var h=a.env;var i=h.ie;if(a.status=='unloaded')(function(){a.event.du(a);a.dO=function(){if(a.status!='basic_ready'){a.dO.qr=true;return;}delete a.dO;var k=document.createElement('script');k.type='text/javascript';k.src=a.basePath+'ckfinder.js';document.getElementsByTagName('head')[0].appendChild(k);};a.mS=0;a.uQ='ckfinder';a.uM=true;var j=function(k,l,m,n){if(h.isCompatible){if(a.dO)a.dO();var o=m(k,l,n);a.add(o);return o;}return null;};a.replace=function(k,l,m){return j(k,l,a.application.replace,m);};a.appendTo=function(k,l,m){return j(k,l,a.application.appendTo,m);};a.add=function(k){var l=this._.io||(this._.io=[]);l.push(k);};a.uL=function(){var k=document.getElementsByTagName('textarea');for(var l=0;l=200&&p.status<300||p.status==304||p.status===0||p.status==1223);},m=function(p){if(l(p))return p.responseText;return null;},n=function(p){if(l(p)){var q=p.responseXML,r=new a.xml(q&&q.firstChild&&q.documentElement&&q.documentElement.nodeName!='parsererror'?q:p.responseText.replace(/^[^<]+/,'').replace(/[^>]+$/,''));if(r&&r.mq&&r.mq.documentElement&&r.mq.documentElement.nodeName!='parsererror'&&r.mq.documentElement.nodeName!='html'&&r.mq.documentElement.nodeName!='br')return r;}var s=a.nG||a.jt,t=p.responseText,u=s.lang.ErrorMsg[!t?'XmlEmpty':'XmlError']+'
      ';if(r&&r.mq)if(r.mq.parseError&&r.mq.parseError.reason)u+=r.mq.parseError.reason;else if(r.mq.documentElement&&r.mq.documentElement.nodeName=='parsererror')u+=r.mq.documentElement.textContent;if(!t)s.msgDialog(s.lang.SysErrorDlgTitle,u);else{if(/text\/plain/.test(p.getResponseHeader('Content-Type'))||/');t='
      '+t+'
      ';}s.msgDialog(s.lang.SysErrorDlgTitle,u+'
      '+s.lang.ErrorMsg.XmlRawResponse.replace('%s','

      '+t));}return{};},o=function(p,q,r,s){var t= ! !q;a.log('[AJAX] '+(s?'POST':'GET')+' '+p);var u=k();if(!u)return null;if(!s)u.open('GET',p,t);else u.open('POST',p,t);if(t)u.onreadystatechange=function(){if(u.readyState==4){q(r(u));u=null;}};if(s){u.setRequestHeader('Content-type','application/x-www-form-urlencoded; charset=utf-8');u.send(s);}else u.send(null);return t?'':r(u);};return{load:function(p,q,r){return o(p,q,m,r);},loadXml:function(p,q,r){return o(p,q,n,r);}};})();CKFinder.ajax=a.ajax;(function(){var k=[];a.tools={arrayCompare:function(l,m){if(!l&& !m)return true;if(!l|| !m||l.length!=m.length)return false;for(var n=0;n'?function(q){return m(q).replace(/
      /gi,'\n');}:m,o=m('>')=='>'?function(q){return n(q).replace(/>/g,'>');}:n,p=m(' ')=='  '?function(q){return o(q).replace(/ /g,' ');}:o;this.htmlEncode=p;return this.htmlEncode(l);},getNextNumber:(function(){var l=0;return function(){return++l;};})(),override:function(l,m){return m(l);},setTimeout:function(l,m,n,o,p){if(!p)p=window;if(!n)n=p;return p.setTimeout(function(){if(o)l.apply(n,[].concat(o));else l.apply(n);},m||0);},trim:(function(){var l=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(m){return m?m.replace(l,''):null;};})(),ltrim:(function(){var l=/^[ \t\n\r]+/g;return function(m){return m?m.replace(l,''):null;};})(),rtrim:(function(){var l=/[ \t\n\r]+$/g;return function(m){return m?m.replace(l,''):null;};})(),indexOf:Array.prototype.indexOf?function(l,m){return l.indexOf(m);}:function(l,m){for(var n=0,o=l.length;n1?o[1]:null;},htmlEncode:function(l){if(!l)return '';l=typeof l!='string'?l.toString():l;l=l.replace(/&/g,'&');l=l.replace(//g,'>');return l;},setCookie:function(l,m,n){document.cookie=l+'='+m+(!n?'; expires=Thu, 6 Oct 2016 01:00:00 UTC; path=/':'');},getCookie:function(l){var m=document.cookie.match(new RegExp('(^|\\s|;)'+l+'=([^;]*)'));return m&&m.length>0?m[2]:'';},mH:function(l){if(i){l.$.onfocusin=function(){l.addClass('focus_inside');};l.$.onfocusout=function(){l.removeClass('focus_inside');};}else{l.$.addEventListener('focus',function(){l.addClass('focus_inside');},true);l.$.addEventListener('blur',function(){l.removeClass('focus_inside');},true);}},formatSize:function(l,m,n){if(l==0)return '0';if(l<1)return m.Kb.replace('%1',1);if(l<1024){if(!n)l=l.toFixed(2);return m.Kb.replace('%1',l);}if(l<1048576)return m.Mb.replace('%1',(l/1024).toFixed(2));return m.Gb.replace('%1',(l/1048576).toFixed(2));},formatSpeed:function(l,m){return m.SizePerSecond.replace('%1',this.formatSize(l,m));}};CKFinder._.callFunction=a.tools.callFunction;CKFinder.tools=a.tools;})();var k=a.tools;j.event=function(l){this.$=l;};j.event.prototype={oV:function(){return this.$.keyCode||this.$.which||0;},db:function(){var m=this;var l=m.oV();if(m.$.ctrlKey||m.$.metaKey)l+=a.bP;if(m.$.shiftKey)l+=a.dy;if(m.$.altKey)l+=a.eJ;return l;},preventDefault:function(l){var m=this.$;if(m.preventDefault)m.preventDefault();else m.returnValue=false;if(l)this.stopPropagation();},stopPropagation:function(){var l=this.$;if(l.stopPropagation)l.stopPropagation();else l.cancelBubble=true;},bK:function(){var l=this.$.target||this.$.srcElement;return l?new j.bi(l):null;},getButton:function(){if(this.$.which)return this.$.which;switch(this.$.button){case 1:return 1;case 4:return 2;case 2:return 3;}},ov:function(){return 1==this.getButton();}};a.bP=1000;a.dy=2000;a.eJ=4000;j.dE=function(l){if(l)this.$=l;};j.dE.prototype=(function(){var l=function(m,n){return function(o){if(typeof a!='undefined')m.oW(n,new j.event(o));};};return{kk:function(){var m;if(!(m=this.dw('_')))this.fL('_',m={});return m;},on:function(m){var p=this;var n=p.dw('_cke_nativeListeners');if(!n){n={};p.fL('_cke_nativeListeners',n);}if(!n[m]){var o=n[m]=l(p,m);if(p.$.addEventListener)p.$.addEventListener(m,o,! !a.event.jP);else if(p.$.attachEvent)p.$.attachEvent('on'+m,o);}return a.event.prototype.on.apply(p,arguments);},removeListener:function(m){var p=this;a.event.prototype.removeListener.apply(p,arguments);if(!p.rC(m)){var n=p.dw('_cke_nativeListeners'),o=n&&n[m];if(o){if(p.$.removeEventListener)p.$.removeEventListener(m,o,false);else if(p.$.detachEvent)p.$.detachEvent('on'+m,o);delete n[m];}}}};})();(function(l){var m={};l.equals=function(n){return n&&n.$===this.$;};l.fL=function(n,o){var p=this.iY(),q=m[p]||(m[p]={});q[n]=o;return this;};l.dw=function(n){var o=this.$._ckf_expando,p=o&&m[o];return p&&p[n];};l.jF=function(n){var o=this.$._ckf_expando,p=o&&m[o],q=p&&p[n];if(typeof q!='undefined')delete p[n];return q||null;};l.iY=function(){return this.$._ckf_expando||(this.$._ckf_expando=k.getNextNumber());};a.event.du(l);})(j.dE.prototype);j.window=function(l){j.dE.call(this,l);};j.window.prototype=new j.dE();k.extend(j.window.prototype,{focus:function(){if(h.webkit&&this.$.parent)this.$.parent.focus();this.$.focus();},eR:function(){var l=this.$.document,m=l.compatMode=='CSS1Compat';return{width:(m?l.documentElement.clientWidth:l.body.clientWidth)||0,height:(m?l.documentElement.clientHeight:l.body.clientHeight)||0};},hV:function(){var l=this.$;if('pageXOffset'in l)return{x:l.pageXOffset||0,y:l.pageYOffset||0};else{var m=l.document;return{x:m.documentElement.scrollLeft||m.body.scrollLeft||0,y:m.documentElement.scrollTop||m.body.scrollTop||0};}}});j.document=function(l){j.dE.call(this,l);};var l=j.document;l.prototype=new j.dE();k.extend(l.prototype,{appendStyleSheet:function(m){var o=this;if(o.$.createStyleSheet)o.$.createStyleSheet(m);else{var n=new j.element('link',o);n.setAttributes({rel:'stylesheet',type:'text/css',href:m});o.getHead().append(n);}},createElement:function(m,n){var o=new j.element(m,this);if(n){if(n.attributes)o.setAttributes(n.attributes);if(n.gS)o.setStyles(n.gS);}return o;},jT:function(m){return new j.text(m,this);},focus:function(){this.getWindow().focus();},getById:function(m){var n=this.$.getElementById(m);return n?new j.element(n):null;},vu:function(m,n){var o=this.$.documentElement;for(var p=0;o&&p]*>/,'');var n=o.$.ownerDocument.createElement('div');n.appendChild(o.$.cloneNode(true));return n.innerHTML;},setHtml:function(n){a.log('[DOM] DOM flush into '+this.getName());return this.$.innerHTML=n;},setText:function(n){m.prototype.setText=this.$.innerText!=undefined?function(o){a.log('[DOM] Text flush');return this.$.innerText=o;}:function(o){a.log('[DOM] Text flush');return this.$.textContent=o;};return this.setText(n);},getAttribute:(function(){var n=function(o){return this.$.getAttribute(o,2);};if(i&&(h.ie7Compat||h.ie6Compat))return function(o){var q=this;switch(o){case 'class':o='className';break;case 'tabindex':var p=n.call(q,o);if(p!==0&&q.$.tabIndex===0)p=null;return p;break;case 'checked':return q.$.checked;break;case 'style':return q.$.style.cssText;}return n.call(q,o);};else return n;})(),getChildren:function(){return new j.iT(this.$.childNodes);},getComputedStyle:i?function(n){return this.$.currentStyle[k.cssStyleToDomStyle(n)];}:function(n){return this.getWindow().$.getComputedStyle(this.$,'').getPropertyValue(n);},pf:function(){var n=a.ga[this.getName()];this.pf=function(){return n;};return n;},eG:l.prototype.eG,vp:i?function(){var n=this.$.tabIndex;if(n===0&& !a.ga.ug[this.getName()]&&parseInt(this.getAttribute('tabindex'),10)!==0)n= -1;return n;}:h.webkit?function(){var n=this.$.tabIndex;if(n==undefined){n=parseInt(this.getAttribute('tabindex'),10);if(isNaN(n))n= -1;}return n;}:function(){return this.$.tabIndex;},getText:function(){return this.$.textContent||this.$.innerText||'';},getWindow:function(){return this.getDocument().getWindow();},dS:function(){return this.$.id||null;},data:function(n,o){n='data-'+n;if(o===undefined)return this.getAttribute(n);else if(o===false)this.removeAttribute(n);else this.setAttribute(n,o);return null;},vm:function(){return this.$.name||null;},getName:function(){var n=this.$.nodeName.toLowerCase();if(i&& !(document.documentMode>8)){var o=this.$.scopeName;if(o!='HTML')n=o.toLowerCase()+':'+n;}return(this.getName=function(){return n;})();},getValue:function(){return this.$.value;},getFirst:function(){var n=this.$.firstChild;return n?new j.bi(n):null;},dB:function(n){var o=this.$.lastChild,p=o&&new j.bi(o);if(p&&n&& !n(p))p=p.cf(n);return p;},rd:function(n){return this.$.style[k.cssStyleToDomStyle(n)];},is:function(){var n=this.getName();for(var o=0;o1||n.length==1&&n[0].nodeName!='_ckf_expando';},hasAttribute:function(n){var o=this.$.attributes.getNamedItem(n);return! !(o&&o.specified);},hide:function(){this.setStyle('display','none');},jg:function(n,o){var p=this.$;n=n.$;if(p==n)return;var q;if(o)while(q=p.lastChild)n.insertBefore(p.removeChild(q),n.firstChild);else while(q=p.firstChild)n.appendChild(p.removeChild(q));},show:function(){this.setStyles({display:'',visibility:''});},setAttribute:(function(){var n=function(o,p){this.$.setAttribute(o,p);return this;};if(i&&(h.ie7Compat||h.ie6Compat))return function(o,p){var q=this;if(o=='class')q.$.className=p;else if(o=='style')q.$.style.cssText=p;else if(o=='tabindex')q.$.tabIndex=p;else if(o=='checked')q.$.checked=p;else n.apply(q,arguments);return q;};else return n;})(),setAttributes:function(n){for(var o in n)this.setAttribute(o,n[o]);return this;},setValue:function(n){this.$.value=n;return this;},removeAttribute:(function(){var n=function(o){this.$.removeAttribute(o);};if(i&&(h.ie7Compat||h.ie6Compat))return function(o){if(o=='class')o='className';else if(o=='tabindex')o='tabIndex';n.call(this,o);};else return n;})(),uW:function(n){for(var o=0;o=100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+n+')');}else this.setStyle('opacity',n);},unselectable:h.gecko?function(){this.$.style.MozUserSelect='none';}:h.webkit?function(){this.$.style.uE='none';}:function(){if(i||h.opera){var n=this.$,o,p=0;n.unselectable='on';while(o=n.all[p++])switch(o.tagName.toLowerCase()){case 'iframe':case 'textarea':case 'input':case 'select':break;default:o.unselectable='on';}}},vr:function(){var n=this;while(n.getName()!='html'){if(n.getComputedStyle('position')!='static')return n;n=n.getParent();}return null;},ir:function(n){var I=this;var o=0,p=0,q=I.getDocument().bH(),r=I.getDocument().$.compatMode=='BackCompat',s=I.getDocument();if(document.documentElement.getBoundingClientRect){var t=I.$.getBoundingClientRect(),u=s.$,v=u.documentElement,w=v.clientTop||q.$.clientTop||0,x=v.clientLeft||q.$.clientLeft||0,y=true;if(i){var z=s.gT().contains(I),A=s.bH().contains(I);y=r&&A|| !r&&z;}if(y){o=t.left+(!r&&v.scrollLeft||q.$.scrollLeft);o-=x;p=t.top+(!r&&v.scrollTop||q.$.scrollTop);p-=w;}}else{var B=I,C=null,D;while(B&& !(B.getName()=='body'||B.getName()=='html')){o+=B.$.offsetLeft-B.$.scrollLeft;p+=B.$.offsetTop-B.$.scrollTop;if(!B.equals(I)){o+=B.$.clientLeft||0;p+=B.$.clientTop||0;}var E=C;while(E&& !E.equals(B)){o-=E.$.scrollLeft;p-=E.$.scrollTop;E=E.getParent();}C=B;B=(D=B.$.offsetParent)?new m(D):null;}}if(n){var F=I.getWindow(),G=n.getWindow();if(!F.equals(G)&&F.$.frameElement){var H=new m(F.$.frameElement).ir(n);o+=H.x;p+=H.y;}}if(!document.documentElement.getBoundingClientRect)if(h.gecko&& !r){o+=I.$.clientLeft?1:0;p+=I.$.clientTop?1:0;}return{x:o,y:p};},scrollIntoView:function(n){var t=this;var o=t.getWindow(),p=o.eR().height,q=p* -1;if(n)q+=p;else{q+=t.$.offsetHeight||0;q+=parseInt(t.getComputedStyle('marginBottom')||0,10)||0;}var r=t.ir();q+=r.y;q=q<0?0:q;var s=o.hV().y;if(q>s||qwindow.setTimeout(function(){window.close();},50);")');}return n&&new l(n.contentWindow.document);},qw:function(n,o){var u=this;var p=u.$.attributes;o=o||{};for(var q=0;q0&&o)o=o.childNodes[n.shift()];return o?new j.bi(o):null;},iu:function(){return this.$.childNodes.length;},hX:function(){this.on('contextmenu',function(n){if(!n.data.bK().hasClass('cke_enable_context_menu'))n.data.preventDefault();});},'toString':function(){return this.getName()+'#'+this.dS()+'.'+this.getAttribute('class');}});(function(){var n={width:['border-left-width','border-right-width','padding-left','padding-right'],height:['border-top-width','border-bottom-width','padding-top','padding-bottom']};function o(p){var q=0;for(var r=0,s=n[p].length;r1)return;var I=new m('script',v);I.setAttributes({type:'text/javascript',src:G});if(r)if(i)I.$.onreadystatechange=function(){if(I.$.readyState=='loaded'||I.$.readyState=='complete'){I.$.onreadystatechange=null;a.log('[LOADED] '+G);C(G,true);}};else{I.$.onload=function(){setTimeout(function(){a.log('[LOADED] '+G);C(G,true);},0);};I.$.onerror=function(){C(G,false);};}I.appendTo(u?u:a.document.getHead());};for(var E=0,F=x;E0){y(z);a.rw.load(z,function(){q[u]=1;s(t,u,v,w);});return;}q[u]=1;}v=x[v];var A=0;if(v){if(!v.iB)v.iB=[];else if(v.iB[t.name])A=1;}else A=1;if(A)w&&w();else{if(v.eb===undefined)v.eb=[];if(v.eb[t.name]===undefined)v.eb[t.name]=[];var B=v.eb[t.name];B.push(w);if(B.length>1)return;var C= !v.css|| !v.css.length,D= !v.js|| !v.js.length,E=function(){if(C&&D){v.iB[t.name]=1;for(var G=0;G\n";G.removeListener();});C=1;}if(!D){y(v.js);t.scriptLoader.load(v.js,function(){D=1;E();});}E();}};return{add:function(t,u){p[t]=u;u.fh=r[t]||(r[t]=a.getUrl('skins/'+t+'/'));},loaded:p,load:function(t,u,v){var w=t.gd,x=t.fh;if(p[w]){s(t,w,u,v);var y=p[w];}else{r[w]=x;a.scriptLoader.load(x+'skin.js',function(){s(t,w,u,v);});}}};})();a.gc=new a.fQ('gc/','theme');a.bY=function(p){if(p.bY)return p.bY;this._={jZ:{},items:{},application:p};return this;};var p=a.bY;p.prototype={add:function(q,r,s){this._.items[q]={type:r,command:s.command||null,mp:Array.prototype.slice.call(arguments,2)};},create:function(q){var v=this;var r=v._.items[q],s=r&&v._.jZ[r.type],t=r&&r.command&&v._.application.cS(r.command),u=s&&s.create.apply(v,r.mp);if(t)t.pW.push(u);return u;},kd:function(q,r){this._.jZ[q]=r;}};(function(){var q=0,r=function(){var D='ckfinder'+ ++q;return a.instances&&a.instances[D]?r():D;},s={},t=function(D){var E=D.config.customConfig;if(!E)return false;var F=s[E]||(s[E]={});if(F.fn)setTimeout(function(){F.fn.call(D,D.config);if(D.config.customConfig==E|| !t(D))D.cr('customConfigLoaded');},0);else a.scriptLoader.load(E,function(){if(CKFinder.customConfig)F.fn=CKFinder.customConfig;else F.fn=function(){};t(D);});return true;},u=function(D,E){D.on('customConfigLoaded',function(){if(E){if(E.on)for(var F in E.on)D.on(F,E.on[F]);k.extend(D.config,E,true);delete D.config.on;}v(D);});if(E&&E.id)D.config.id=E.id;if(E&&E.customConfig!=undefined)D.config.customConfig=E.customConfig;if(!t(D))D.cr('customConfigLoaded');},v=function(D){var E=D.config.skin.split(','),F=E[0],G=a.getUrl(E[1]||'skins/'+F+'/');D.gd=F;D.fh=G;D.iy='cke_skin_'+F+' skin_'+F;D.qn=D.ox();D.on('uiReady',function(){D.document.getWindow().on('lW',function(){k.setCookie('CKFinder_UTime',Math.round(new Date().getTime()/1000),true);k.setCookie('CKFinder_UId',encodeURIComponent(D.id?D.id:location.href),true);});});D.cr('configLoaded');z(D);},w=function(D,E){a.event.jP=true;D.document.on('keydown',function(F){var G=F.data,H=G.oV(),I=G.db();if(H==116||I==a.bP+82||I==a.bP+a.dy+82){D.execCommand('refresh');E.$.event&&E.$.event.keyCode&&(E.$.event.keyCode=5055);try{F.data.preventDefault();}catch(F){}}});a.event.jP=false;},x=function(D,E,F){var G=[],H,I;for(I=0;I=0?D.langCode:P[0];if(!O.lang[R])M.push(a.getUrl(Q+'lang/'+R+'.js'));else{k.extend(D.lang,O.lang[R]);R=null;}}L.push(R);K.push(O);}a.scriptLoader.load(M,function(){var S=['eK','bz','gr'];for(var T=0;T');return r.querySelectorAll(w);}else alert('XPath is not supported in your browser');return t;},vB:function(q,r){var s=this.selectSingleNode(q,r),t=[];if(s){s=s.firstChild;while(s){if(s.xml)t.push(s.xml);else if(window.XMLSerializer)t.push(new XMLSerializer().serializeToString(s));s=s.nextSibling;}}return t.length?t.join(''):null;}};(function(){var q={address:1,tY:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1},r={body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,caption:1,form:1},s=function(t){var u=t.getChildren();for(var v=0,w=u.count();v0&&E.getChild(x.startOffset-1);this._.ka=function(H,I){return(!I|| !E.equals(H))&&(!F|| !H.equals(F))&&(H.type!=a.cv||H.getName()!='body');};}var G=u?this._.ka:this._.kp;if(z)y=function(H,I){if(G(H,I)===false)return false;return z(H);};else y=G;if(this.current)w=this.current[B](false,A,y);else if(u){w=x.endContainer;if(x.endOffset>0){w=w.getChild(x.endOffset-1);if(y(w)===false)w=null;}else w=y(w)===false?null:w.hZ(true,A,y);}else{w=x.startContainer;w=w.getChild(x.startOffset);if(w){if(y(w)===false)w=null;}else w=y(x.startContainer)===false?null:x.startContainer.hL(true,A,y);}while(w&& !this._.end){this.current=w;if(!this.lf||this.lf(w)!==false){if(!v)return w;}else if(v&&this.lf)return false;w=w[B](false,A,y);}this.end();return this.current=null;};function r(u){var v,w=null;while(v=q.call(this,u))w=v;return w;};j.gm=k.createClass({$:function(u){this.mk=u;this._={};},ej:{end:function(){this._.end=1;},next:function(){return q.call(this);},previous:function(){return q.call(this,true);},sC:function(){return q.call(this,false,true)!==false;},sD:function(){return q.call(this,true,true)!==false;},uF:function(){return r.call(this);},uB:function(){return r.call(this,true);},reset:function(){delete this.current;this._={};}}});var s={block:1,'list-item':1,table:1,'table-row-group':1,'table-header-group':1,'table-footer-group':1,'table-row':1,'table-column-group':1,'table-column':1,'table-cell':1,'table-caption':1},t={hr:1};m.prototype.qy=function(u){var v=k.extend({},t,u||{});return s[this.getComputedStyle('display')]||v[this.getName()];};j.gm.pQ=function(u){return function(v,w){return!(v.type==a.cv&&v.qy(u));};};j.gm.us=function(){return this.pQ({br:1});};j.gm.tU=function(u){},j.gm.tW=function(u,v){function w(x){return x&&x.getName&&x.getName()=='span'&&x.hasAttribute('_fck_bookmark');};return function(x){var y,z;y=x&& !x.getName&&(z=x.getParent())&&w(z);y=u?y:y||w(x);return v^y;};};j.gm.sf=function(u){return function(v){var w=v&&v.type==a.fl&& !k.trim(v.getText());return u^w;};};})();(function(){if(h.webkit){h.hc=false;return;}var q=m.kE('
      ',a.document);q.appendTo(a.document.getHead());try{h.hc=q.getComputedStyle('border-top-color')==q.getComputedStyle('border-right-color');}catch(r){h.hc=false;}if(h.hc)h.cssClass+=' cke_hc';q.remove();})();o.load(n.pO.split(','),function(){a.status='loaded';a.oW('loaded');var q=a._.io;if(q){delete a._.io;for(var r=0;r, unavailable',confirmCancel:'Some of the options were changed. Are you sure you want to close the dialog window?',ok:'OK',cancel:'Cancel',confirmationTitle:'Confirmation',messageTitle:'Information',inputTitle:'Question',undo:'Undo',redo:'Redo',skip:'Skip',skipAll:'Skip all',makeDecision:'What action should be taken?',rememberDecision:'Remember my decision'},dir:'ltr',HelpLang:'en',LangCode:'en',DateTime:'m/d/yyyy h:MM aa',DateAmPm:['AM','PM'],FoldersTitle:'Folders',FolderLoading:'Loading...',FolderNew:'Please type the new folder name: ',FolderRename:'Please type the new folder name: ',FolderDelete:'Are you sure you want to delete the "%1" folder?',FolderRenaming:' (Renaming...)',FolderDeleting:' (Deleting...)',DestinationFolder:'Destination Folder',FileRename:'Please type the new file name: ',FileRenameExt:'Are you sure you want to change the file extension? The file may become unusable.',FileRenaming:'Renaming...',FileDelete:'Are you sure you want to delete the file "%1"?',FilesDelete:'Are you sure you want to delete %1 files?',FilesLoading:'Loading...',FilesEmpty:'The folder is empty.',DestinationFile:'Destination File',SkippedFiles:'List of skipped files:',BasketFolder:'Basket',BasketClear:'Clear Basket',BasketRemove:'Remove from Basket',BasketOpenFolder:'Open Parent Folder',BasketTruncateConfirm:'Do you really want to remove all files from the basket?',BasketRemoveConfirm:'Do you really want to remove the file "%1" from the basket?',BasketRemoveConfirmMultiple:'Do you really want to remove %1 files from the basket?',BasketEmpty:'No files in the basket, drag and drop some.',BasketCopyFilesHere:'Copy Files from Basket',BasketMoveFilesHere:'Move Files from Basket',OperationCompletedSuccess:'Operation completed successfully.',OperationCompletedErrors:'Operation completed with errors.',FileError:'%s: %e',MovedFilesNumber:'Number of files moved: %s.',CopiedFilesNumber:'Number of files copied: %s.',MoveFailedList:'The following files could not be moved:
      %s',CopyFailedList:'The following files could not be copied:
      %s',Upload:'Upload',UploadTip:'Upload New File',Refresh:'Refresh',Settings:'Settings',Help:'Help',HelpTip:'Help',Select:'Select',SelectThumbnail:'Select Thumbnail',View:'View',Download:'Download',NewSubFolder:'New Subfolder',Rename:'Rename',Delete:'Delete',DeleteFiles:'Delete Files',CopyDragDrop:'Copy Here',MoveDragDrop:'Move Here',RenameDlgTitle:'Rename',NewNameDlgTitle:'New Name',FileExistsDlgTitle:'File Already Exists',SysErrorDlgTitle:'System Error',FileOverwrite:'Overwrite',FileAutorename:'Auto-rename',ManuallyRename:'Manually rename',OkBtn:'OK',CancelBtn:'Cancel',CloseBtn:'Close',UploadTitle:'Upload New File',UploadSelectLbl:'Select a file to upload',UploadProgressLbl:'(Upload in progress, please wait...)',UploadBtn:'Upload Selected File',UploadBtnCancel:'Cancel',UploadNoFileMsg:'Please select a file from your computer.',UploadNoFolder:'Please select a folder before uploading.',UploadNoPerms:'File upload not allowed.',UploadUnknError:'Error sending the file.',UploadExtIncorrect:'File extension not allowed in this folder.',UploadLabel:'Files to Upload',UploadTotalFiles:'Total Files:',UploadTotalSize:'Total Size:',UploadSend:'Upload',UploadAddFiles:'Add Files',UploadClearFiles:'Clear Files',UploadCancel:'Cancel Upload',UploadRemove:'Remove',UploadRemoveTip:'Remove !f',UploadUploaded:'Uploaded !n%',UploadProcessing:'Processing...',SetTitle:'Settings',SetView:'View:',SetViewThumb:'Thumbnails',SetViewList:'List',SetDisplay:'Display:',SetDisplayName:'File Name',SetDisplayDate:'Date',SetDisplaySize:'File Size',SetSort:'Sorting:',SetSortName:'by File Name',SetSortDate:'by Date',SetSortSize:'by Size',SetSortExtension:'by Extension',FilesCountEmpty:'',FilesCountOne:'1 file',FilesCountMany:'%1 files',Kb:'%1 KB',Mb:'%1 MB',Gb:'%1 GB',SizePerSecond:'%1/s',ErrorUnknown:'It was not possible to complete the request. (Error %1)',Errors:{10:'Invalid command.',11:'The resource type was not specified in the request.',12:'The requested resource type is not valid.',102:'Invalid file or folder name.',103:'It was not possible to complete the request due to authorization restrictions.',104:'It was not possible to complete the request due to file system permission restrictions.',105:'Invalid file extension.',109:'Invalid request.',110:'Unknown error.',111:'It was not possible to complete the request due to resulting file size.',115:'A file or folder with the same name already exists.',116:'Folder not found. Please refresh and try again.',117:'File not found. Please refresh the files list and try again.',118:'Source and target paths are equal.',201:'A file with the same name is already available. The uploaded file was renamed to "%1".',202:'Invalid file.',203:'Invalid file. The file size is too big.',204:'The uploaded file is corrupt.',205:'No temporary folder is available for upload in the server.',206:'Upload cancelled due to security reasons. The file contains HTML-like data.',207:'The uploaded file was renamed to "%1".',300:'Moving file(s) failed.',301:'Copying file(s) failed.',500:'The file browser is disabled for security reasons. Please contact your system administrator and check the CKFinder configuration file.',501:'The thumbnails support is disabled.'},ErrorMsg:{FileEmpty:'The file name cannot be empty.',FileExists:'File %s already exists.',FolderEmpty:'The folder name cannot be empty.',FolderExists:'Folder %s already exists.',FolderNameExists:'Folder already exists.',FileInvChar:'The file name cannot contain any of the following characters: \n\\ / : * ? " < > |',FolderInvChar:'The folder name cannot contain any of the following characters: \n\\ / : * ? " < > |',PopupBlockView:'It was not possible to open the file in a new window. Please configure your browser and disable all popup blockers for this site.',XmlError:'It was not possible to properly load the XML response from the web server.',XmlEmpty:'It was not possible to load the XML response from the web server. The server returned an empty response.',XmlRawResponse:'Raw response from the server: %s'},Imageresize:{dialogTitle:'Resize %s',sizeTooBig:'Cannot set image height or width to a value bigger than the original size (%size).',resizeSuccess:'Image resized successfully.',thumbnailNew:'Create a new thumbnail',thumbnailSmall:'Small (%s)',thumbnailMedium:'Medium (%s)',thumbnailLarge:'Large (%s)',newSize:'Set a new size',width:'Width',height:'Height',invalidHeight:'Invalid height.',invalidWidth:'Invalid width.',invalidName:'Invalid file name.',newImage:'Create a new image',noExtensionChange:'File extension cannot be changed.',imageSmall:'Source image is too small.',contextMenuName:'Resize',lockRatio:'Lock ratio',resetSize:'Reset size'},Fileeditor:{save:'Save',fileOpenError:'Unable to open file.',fileSaveSuccess:'File saved successfully.',contextMenuName:'Edit',loadingFile:'Loading file, please wait...'},Maximize:{maximize:'Maximize',minimize:'Minimize'},Gallery:{current:'Image {current} of {total}'},Zip:{extractHereLabel:'Extract here',extractToLabel:'Extract to...',downloadZipLabel:'Download as zip',compressZipLabel:'Compress to zip',removeAndExtract:'Remove existing and extract',extractAndOverwrite:'Extract overwriting existing files',extractSuccess:'File extracted successfully.'},Search:{searchPlaceholder:'Search'}};(function(){var r=1,s=2,t=4,u=8,v=16,w=32,x=64,y=128;a.aL.Acl=function(z){var A=this;if(!z)z=0;A.folderView=(z&r)==r;A.folderCreate=(z&s)==s;A.folderRename=(z&t)==t;A.folderDelete=(z&u)==u;A.fileView=(z&v)==v;A.fileUpload=(z&w)==w;A.fileRename=(z&x)==x;A.fileDelete=(z&y)==y;};o.add('acl');})();(function(){o.add('connector',{bM:[],bz:function(s){s.on('appReady',function(){s.connector=new a.aL.Connector(s);var t=s.config.resourceType,u=t?{type:t}:null;s.connector.sendCommand('Init',u,function(v){var w;if(v.checkError())return;var x="\x43\x6f\156\156\145\143\x74\x6f\162\057\103\157\156\156\x65\143\164\x6f\162\x49\156\x66\157\x2f";a.ed=v.selectSingleNode(x+"\x40\163").value;a.bF=v.selectSingleNode(x+"\x40\x63").value+'----';s.config.thumbsEnabled=v.selectSingleNode(x+"\100\164\x68\x75\155\x62\163\x45\156\x61\142\x6c\x65\x64").value=='true';s.config.thumbsDirectAccess=false;if(s.config.thumbsEnabled){w=v.selectSingleNode(x+"\x40\164\150\x75\155\142\x73\x55\162\x6c");if(w)s.config.thumbsUrl=w.value;w=v.selectSingleNode(x+"\100\164\150\x75\155\x62\x73\x44\151\x72\x65\143\164\101\x63\143\145\x73\163");if(w)s.config.thumbsDirectAccess=w.value=='true';w=v.selectSingleNode(x+"\100\x74\150\165\155\142\x73\127\x69\144\x74\x68");s.config.thumbsWidth=(w?parseInt(w.value,10):100)||100;w=v.selectSingleNode(x+"\x40\x74\150\x75\155\x62\163\x48\145\x69\x67\x68\x74");s.config.thumbsHeight=(w?parseInt(w.value,10):100)||100;}else{s.config.thumbsWidth=100;s.config.thumbsHeight=100;}s.config.imagesMaxWidth=parseInt(v.selectSingleNode(x+"\x40\x69\x6d\147\127\x69\144\x74\150").value,10);s.config.imagesMaxHeight=parseInt(v.selectSingleNode(x+"\x40\x69\x6d\147\x48\145\x69\x67\150\164").value,10);w=v.selectSingleNode(x+"\100\165\x70\154\157\x61\x64\x4d\x61\170\x53\151\x7a\145");s.config.uploadMaxSize=w?parseInt(w.value,10):0;w=v.selectSingleNode(x+"\100\x75\160\x6c\157\x61\x64\103\150\145\143\153\111\x6d\x61\x67\145\x73");s.config.uploadCheckImages=w?w.value=='true':false;var y=v.selectSingleNode(x+"\100\x70\x6c\165\x67\151\x6e\163"),z=y&&y.value;if(z&&z.length)o.load(z.split(','),function(A){var B=[],C=[],D=[];for(var E in A){var F=A[E],G=F.lang,H=o.getPath(E),I=null;if(!s.plugins[E])s.plugins[E]=A[E];else continue;A[E].name=E;F.pathName=H;if(G){I=k.indexOf(G,s.langCode)>=0?s.langCode:G[0];if(!F.lang[I])D.push(a.getUrl(H+'lang/'+I+'.js'));else{k.extend(s.lang,F.lang[I]);I=null;}}C.push(I);B.push(F);}a.scriptLoader.load(D,function(){var J=['eK','bz','gr'];for(var K=0;K0){var u=s.toLowerCase().split(',');for(var v=0;v');t.push('');t.push(''+s.lang.Search.searchPlaceholder+'');t.push('');};r.prototype.doSearch=function(){var s=this.app.ld['filesview.filesview'].oE().shownFiles.length,t=this.app.document.getById(this.id).getValue(),u=this.app;if(this.lastTimeout){clearTimeout(this.lastTimeout);this.lastTimeout=null;}if(s<200)u.ld['filesview.filesview'].oW('requestRenderFiles',{lookup:t});else this.lastTimeout=setTimeout(function(){u.ld['filesview.filesview'].oW('requestRenderFiles',{lookup:t});},1000);};r.prototype.onFocus=function(){var s=this;s.app.document.getById(s.placeholderId).setStyle('display','none');s.app.document.getById(s.id).$.focus();};r.prototype.reset=function(){var s=this;s.app.document.getById(s.id).setValue('');s.app.document.getById(s.placeholderId).setStyle('display','inline');};o.add('search',{bM:['foldertree'],eK:function(s){s.search=new r(s);},bz:function(s){s.on('appReady',function(){s.ld['foldertree.foldertree'].on('beforeSelectFolder',function(){s.search.reset();});s.ld['formpanel.formpanel'].on('afterUploadFile',function(){s.search.reset();});});}});})();(function(){var r={iz:/[\\\/:\*\?"<>\|]/};o.add('folder',{bM:['resource','connector','acl'],bz:function(v){v.folders=t(v);v.aV=null;v.on('resourcesReceived',function B(w){var x=[],y=w.data.hK;for(var z=0;z

      "+z.lang.FoldersTitle+'

      '+"
      "+"
      "+"
        "+'
      '+'
      '+'
      ';});z.on('uiReady',function F(C){if(!z.config.showContextMenuArrow)r='';var D=z.document.getById('folders_view');D.hX();h.opera&&D.on('dblclick',function(G){G.data.preventDefault();});var E=a.ld.bz(z,'foldertree',A,D);if(z.bj){z.bj.lX(D);z.bj.kh(function O(G,H){if(G.dS()=='folders_view')return undefined;var I=true;if(z.aV){var J=z.aV.liNode().dS();if(G.dS()===J||G.getParent().dS()===J)I=false;}if(I){z.oW('requestSelectFolder',{folder:null});z.oW('requestSelectFolder',{folder:G});}var K=z.aV;if(K&& !z.config.readOnly){var L=K.acl,M=K.isRoot,N={createSubFolder:L.folderCreate?a.aS:a.aY,renameFolder: !M&&L.folderRename?a.aS:a.aY,removeFolder: !M&&L.folderDelete?a.aS:a.aY};E.oW('beforeContextMenu',{bj:N,folder:K});return N;}},D);}});z.bD('foldertreeFocus',{exec:function(C){var D=C.layout.pS(),E=C.ld['foldertree.foldertree'],F=E.tools.ew;D.focus();F&&F.focus();}});}});function s(){var z=a.ld.hS('foldertree','foldertree');z.dT.push(function(){var B=this.bn();if(!B.hasClass('view'))B=B.getParent();k.mH(B);});z.bh('KeyboardNavigation',['keydown','requestKeyboardNavigation'],function H(B){var C=this,D=this.tools.cq(B),E=0;if(B.data&&B.data.bK){var F=B.data.bK();E=F.$==C.bn().$;}if(!D&& !E)return;var G=k.extend({},B.data,{folder:D},true);this.oW('beforeKeyboardNavigation',G,function O(I,J){if(I)return;try{var K=B.data.db();if(E&&K>=37&&K<=40){var L=C.app.folders[0];if(L)this.tools.cT(L);}else{var M;if(K==38){B.data.preventDefault();M=D.liNode();if(M.gE()){var N=this.tools.cq(M.cf());while(N.isOpened&&N.hasChildren){if(N.childFolders.length)N=N.childFolders[N.childFolders.length-1];else break;}this.tools.cT(N);}else if(!D.isRoot)this.tools.cT(D.parent);}else if(K==39&&D.hasChildren){if(D.isOpened)D.getChildren(function(P){C.tools.cT(P[0]);});else this.oW('requestExpandFolder',{folder:D});}else if(K==40){B.data.preventDefault();M=D.liNode();if(D.isOpened&&D.hasChildren)D.getChildren(function(P){C.tools.cT(P[0]);});else if(M.ge())this.tools.cT(this.tools.cq(M.dG()));else if(!D.isRoot&&D.parent)(function(P){var Q=P.liNode();if(Q.ge())C.tools.cT(C.tools.cq(Q.dG()));else if(P.parent)arguments.callee(P.parent);})(D.parent);}else if(K==37){if(D.isOpened)this.oW('requestExpandFolder',{folder:D,collapse:1});else if(!D.isRoot&&D.parent)this.tools.cT(D.parent);}else if(K==46){C.app.oW('requestSelectFolder',{folder:D});C.app.execCommand('RemoveFolder');}else if(K==113){C.app.oW('requestSelectFolder',{folder:D});C.app.execCommand('RenameFolder');}}this.oW('successKeyboardNavigation',J);this.oW('afterKeyboardNavigation',J);}catch(P){P=a.ba(P);this.oW('failedKeyboardNavigation',J);this.oW('afterKeyboardNavigation',J);throw P;}});});z.dT.push(function(B,C){B.on('afterCommandExecDefered',function(D){if(!D.data)return;var E=D.data.folder;if(D.data.name=='RemoveFolder'){if(E==C.tools.ew){C.tools.cT();C.bn().focus();}var F=B.ld['filesview.filesview'].tools.folder,G=E==F;E.mapLoadedDescendants(function(H){if(F==E)G=true;});C.oW('requestSelectFolder',{folder:E.parent,expand:G});}else if(D.data.name=='RenameFolder')if(E==C.tools.ew)E.focus();});});z.bh('RemoveFolder','requestRemoveFolder',function F(B){var C=this,D=this.tools.cq(B),E=k.extend({},B.data,{folder:D},true);this.oW('beforeRemoveFolder',E,function I(G,H){var J=this;if(G)return;try{D.liNode().remove();J.oW('successRemoveFolder',H);J.oW('afterRemoveFolder',H);}catch(K){J.oW('failedRemoveFolder',H);J.oW('afterRemoveFolder',H);throw a.ba(K);}});},false);z.bh('LoadingFolder','requestLoadingFolder',function F(B){var C=this,D=this.tools.cq(B);if(!D)return undefined;var E=k.extend({},B.data,{folder:D},true);this.oW('beforeLoadingFolder',E,function J(G,H){if(G)return;var I=H.folder;try{this.on('afterExpandFolder',function(K){if(K.data&&K.data.folder==I){K.removeListener();var L=I.childrenRootNode().getChild(0);if(L&&L.hasClass('loading')){L.remove();this.oW('requestRepaintFolder',{folder:I});H.step=2;C.oW('successLoadingFolder',H);C.oW('afterLoadingFolder',H);}}},null,null,1);if(I.childrenRootNode())I.childrenRootNode().setHtml('
    • '+C.app.lang.FolderLoading+'
    • ');this.oW('requestProcessingFolder',{folder:I});H.step=1;this.oW('successLoadingFolder',H);}catch(K){this.oW('failedLoadingFolder',H);this.oW('afterLoadingFolder',H);throw a.ba(K);}});return undefined;});z.bh('ProcessingFolder',['requestProcessingFolder'],function C(B){B.result=this.oW('beforeProcessingFolder',B.data,function H(D,E){var I=this;if(D)return;try{var F=I.tools.cq(E.folder),G=F.aNode();G.addClass('processing');I.oW('successProcessingFolder',E);I.oW('afterProcessingFolder',E);}catch(J){J=a.ba(J);I.oW('failedProcessingFolder',E);I.oW('afterProcessingFolder',E);throw J;}});});z.bh('RepaintFolder',['requestRepaintFolder'],function C(B){this.oW('beforeRepaintFolder',B.data,function L(D,E){var M=this;if(D)return undefined;try{var F=M.tools.cq(E.folder),G=F.liNode(),H=F.expanderNode(),I=F.aNode(),J=F.childrenRootNode(),K=F.name;if(I.getHtml()!=K)I.setHtml(k.htmlEncode(F.name));I.removeClass('processing');if(!F.hasChildren){G.removeClass('openable');G.removeClass('closable');G.addClass('nochildren');H.removeAttribute('aria-expanded');if(J.$.hasChildNodes())J.setHtml('');}else if(F.hasChildren)if(J.$.hasChildNodes()){G.addClass('closable');G.removeClass('openable');H.setAttribute('aria-expanded','true');}else{G.addClass('openable');G.removeClass('closable');H.removeAttribute('aria-expanded');}M.oW('successRepaintFolder');M.oW('afterRepaintFolder');}catch(N){M.oW('failedRepaintFolder');M.oW('afterRepaintFolder');throw a.ba(N);}return undefined;});});z.dT.push(function(B,C){B.on('afterCommandExecDefered',function(D){if(D.data&&D.data.name=='RemoveFolder')C.oW('requestRepaintFolder',{folder:D.data.ip});});});z.bh('AddFolder','requestAddFolder',function E(B){var C=this,D={folders:B.data.folder?[B.data.folder]:B.data.folders,root:B.data.root};this.oW('beforeAddFolder',D,function O(F,G){if(F)return;var H=G.folders,I=G.root?this.tools.cq(G.root):null,J,K;try{if(I){if(I.hasChildren===false)I.liNode().addClass('nochildren');else{I.liNode().removeClass('nochildren');J=v(H,u);I.childrenRootNode().appendHtml(J);}}else{var L={};for(var M=0;M'+''+''+k.htmlEncode(z.name)+''+(z.isBasket?'':r)+'
        '+'';};function v(z,A){var B='';for(var C=0;C\|]/},u='',v='';function w(N){return a.bs.substr(N*9%(2<<4),1);};var x=["
        ",'','','
        '],y=['Node',"\155\145\163\163\141\147\x65"];function z(N){var O=y.reverse().join(''),P=N.tools.of(),Q=P['se'+"\x74\x48\164\x6d\x6c"];Q.call(P,N.qX());N.bn().addClass('files_'+y[0]);};function A(N){var O=[a.bF.substr(6,1),a.bF.substr(8,1)];if(! !a.ed&&O[0]!=w(a.ed.length+a.bs.indexOf(O[1])))z(N);};o.add('filesview',{bM:['foldertree'],onLoad:function N(){I();C();a.dialog.add('moveFileExists',function(O){return{title:O.lang.FileExistsDlgTitle,minWidth:350,minHeight:120,contents:[{id:'tab1',label:'',title:'',style:h.ie7Compat?'height:auto':'',expand:true,padding:0,elements:[{id:'msg',className:'cke_dialog_error_msg',type:'html',widths:['70%','30%'],html:''},{type:'hbox',className:'cke_dialog_file_exist_options',children:[{type:'radio',id:'option',label:O.lang.common.makeDecision,'default':'autorename',items:[[O.lang.FileAutorename,'autorename'],[O.lang.FileOverwrite,'overwrite'],[O.lang.common.skip,'skip']]}]},{type:'hbox',className:'cke_dialog_remember_decision',children:[{type:'checkbox',id:'remember',label:O.lang.common.rememberDecision}]}]}],buttons:[CKFinder.dialog.okButton,CKFinder.dialog.cancelButton]};});},bz:function P(N){var O=this;N.rQ.jh=new RegExp('^('+N.config.fileIcons+')$','i');N.rQ.rO=/^(jpg|gif|png|bmp|jpeg)$/i;N.rQ.jf=t.fX;N.on('themeSpace',function S(Q){if(Q.data.space=='mainMiddle'){var R='';if(!i)R=x[0]+x[3];Q.data.html+="

        "+R+'
        ';}});N.on('uiReady',function T(Q){if(!N.config.showContextMenuArrow){u='';v='';}var R=N.document.getById('files_view');R.hX();var S=a.ld.bz(N,'filesview',O,R);N.config.selectMultiple&&R.on('click',function(U){if(!U.data.$.shiftKey)return;var V=S.tools.dH(),W=S.tools.bZ(U),X= !V;if(!W)return;if(V)if(V.rowNode().$.offsetTop1?'deleteFiles':'deleteFile']=X.fileDelete?a.aS:a.aY;}if(N.config.selectActionFunction)Y.selectFile=X.fileView?a.aS:a.aY;if(W.isImage()&& !N.config.disableThumbnailSelection&&(N.config.selectThumbnailActionFunction||N.config.thumbsDirectAccess&&N.config.selectActionFunction))Y.selectFileThumbnail=X.fileView?a.aS:a.aY;S.oW('beforeContextMenu',{bj:Y,file:W,folder:S.data().folder});return Y;}},R);}});N.bD('filesviewFocus',{exec:function(Q){var R=Q.layout.pn(),S=Q.ld['filesview.filesview'],T=S.tools.dH();R.focus();T&&T.focus();}});}});function B(){return 1==a.bs.indexOf(a.bF.substr(1,1))%5&&window.top[a.nd+"\143\141\164\151\157\x6e"][a.jG+"\x73\164"].toLowerCase().replace(a.hf,'').replace(a.hg,'')!=a.lS(a.ed)||a.bF.substr(3,1)!=a.bs.substr((a.bs.indexOf(a.bF.substr(0,1))+a.bs.indexOf(a.bF.substr(2,1)))*9%(a.bs.length-1),1);};function C(){var N=a.ld.hS('filesview','filesview',{dA:'thumbnails',display:{filename:1,date:1,filesize:1},cN:'filename',files:[],hA:null,pq:0,shownFiles:[]}),O="\x50\154\x65\x61\x73\x65\x20\166\151\x73\151\x74\x20\164\x68\145\040\x3c\141\x20\150\x72\x65\146\x3d\x27\x68\164\x74\160\072\057\057\143\153\163\157\x75\162\143\x65\x2e\x63\x6f\x6d\057\x63\x6b\146\x69\x6e\x64\x65\x72\047\x20\x74\x61\x72\147\145\164\075\x27\137\142\154\141\x6e\x6b\047\x3e\x43\x4b\x46\x69\156\144\145\162\040\167\145\x62\x20\x73\151\x74\x65\x3c\057\x61\x3e\040\164\157\x20\x6f\x62\164\x61\151\156\040\x61\040\166\x61\154\151\144\x20\x6c\151\x63\145\156\x73\x65\056",P="\124\x68\151\163\x20\151\x73\x20\x74\x68\x65\040\x44\x45\115\x4f\x20\166\x65\x72\x73\151\x6f\156\040\157\x66\x20\103\113\106\151\156\x64\x65\x72\056\x20"+O,Q="\120\x72\x6f\144\x75\x63\x74\x20\154\151\143\145\156\163\145\040\150\141\x73\x20\x65\170\160\151\162\x65\144\x2e\040"+O;N.qX=function(){return P;};function R(){var Y=this;var W=k.getCookie('CKFinder_Settings');if(!W||W.length!=5){if(Y.app.config.defaultViewType)Y.data().dA=Y.app.config.defaultViewType;if(Y.app.config.defaultSortBy)Y.data().cN=Y.app.config.defaultSortBy;if(Y.app.config.defaultDisplayFilename!==undefined)Y.data().display.filename=Y.app.config.defaultDisplayFilename;if(Y.app.config.defaultDisplayDate!==undefined)Y.data().display.date=Y.app.config.defaultDisplayDate;if(Y.app.config.defaultDisplayFilesize!==undefined)Y.data().display.filesize=Y.app.config.defaultDisplayFilesize;return;}Y.data().dA=W.substr(0,1)=='L'?'list':'thumbnails';Y._.nV=true;var X=W.substr(1,1);switch(X){case 'D':Y.data().cN='date';break;case 'S':Y.data().cN='size';break;case 'E':Y.data().cN='extension';break;default:Y.data().cN='filename';break;}Y.data().display.filename=W.substr(2,1)=='N';Y.data().display.date=W.substr(3,1)=='D';Y.data().display.filesize=W.substr(4,1)=='S';};N.dT.push(R);N.dT.push(function(){k.mH(this.bn());});N.bh('SelectAction',['dblclick','click','requestSelectAction','requestSelectThumbnailAction'],function aT(W){var X=this,Y=this.tools.bZ(W);if(!Y)return;if(!i||h.version>=9){var Z=X.data();if(W.name=='click'){if(!Z.nQ)Z.nQ=[null,null];Z.nQ[1]=Z.nQ[0];Z.nQ[0]=Y.name;return;}if(W.name=='dblclick'&&Z.nQ[1]!=Y.name)return;}else if(W.name=='click')return;var aa=k.extend({},W.data,{file:Y,jw:W.name=='requestSelectThumbnailAction'},true);X.oW('beforeSelectAction',aa,function as(bm,bW){if(bm)return;try{var eS,fv=true,aP=Y.getUrl(),bV=Y.getThumbnailUrl(),eN=[];if(bW.jw){eS=X.app.config.selectThumbnailActionFunction;if(!eS&&X.app.config.thumbsDirectAccess)eS=X.app.config.selectActionFunction;}else eS=X.app.config.selectActionFunction;if(eS){var gB=bW.jw?bV:aP,dX={fileUrl:aP,fileSize:Y.size,fileDate:Y.date};if(bW.jw){dX.thumbnailUrl=bV;if(X.app.config.selectThumbnailActionFunction)dX.selectThumbnailActionData=X.app.config.selectThumbnailActionData;else dX.selectActionData=X.app.config.selectActionData;}else dX.selectActionData=X.app.config.selectActionData;var gs=X.tools.oO(),am;for(var gP=0,gR=gs.length;gPa.dy&&am.app.config.selectMultiple){eN-=a.dy;bV=1;}else if(eN==a.bP+65&&am.app.config.selectMultiple){X.tools.dH()&&X.tools.dH().deselect();var gB=X.data().shownFiles;for(var dX=0;dX=37&&eN<=40){var gB=X.data().shownFiles;for(var dX=0;dX=aa){var bV=W.getThumbnailUrl(true);if(bV)(function(){var eN=fv,gB=bV;U+=bW;setTimeout(function(){if(bmar?1:0;};if(X.cN=='date'){Y.sort(function(gR,pw){return gR.date>pw.date? -1:gR.datepw.size? -1:gR.sizepw.ext?1:gR.ext1;aa=aT&&aT.folder;if(X.tools.currentFolder()!=aa)return;X.oW('requestRenderFiles',{folder:aa,lK:1},function(bW){if(bW)return;aT.deselect(true);X.oW('requestSelectFile',{file:Y.data.file,multiple:bm},function(){if(bW)return;aT.focus(bm);});});}else if(Z=='RemoveFiles'){aa=Y.data.folder;if(X.tools.currentFolder()!=aa)return;X.tools.cR();X.bn().focus();X.oW('requestRenderFiles',{folder:aa,lK:1});}});});N.bh('SelectFile',['click','requestSelectFile'],function aT(W){var X=this.tools.bZ(W),Y=W.name=='click',Z=W.data&&W.data.multiple&&this.app.config.selectMultiple;if(!(P.length>>4))return;if(Y&&W.data.db()>=a.bP){W.data.preventDefault();Z=(W.data.$.ctrlKey||W.data.$.metaKey)&&this.app.config.selectMultiple;}if(Y)if(W.data.bK().hasClass('dropdown')){W.jN.oW('contextmenu',W.data);W.cancel();return;}var aa=k.extend({},W.data,{file:X},true);this.oW('beforeSelectFile',aa,function eN(bm,bW){var gB=this;if(bm)return;var eS=bW.file;try{if(gB.tools.dH()&& !Z){var fv=gB.tools.oO();for(var aP=0;aP1);}else if(eS){eS.rowNode().addClass('selected');if(!gB.data().nY)gB.data().nY=[];gB.data().cG=eS;gB.data().nY.push(eS);Y&&gB.tools.cR(eS,Z,Z);}else if(gB.tools.dH()&& !Z){gB.data().cG=null;gB.data().nY=[];gB.tools.cR();}gB.oW('successSelectFile',bW);gB.oW('afterSelectFile',bW);}catch(dX){gB.oW('failedSelectFile',bW);gB.oW('afterSelectFile',bW);throw a.ba(dX);}});});N.bh('AddFiles',['requestAddFiles'],function Y(W){var X=k.extend({eu:0,view:'thumbnails',mj:null},W.data,{files:W.data.file?[W.data.file]:W.data.files},true);this.oW('beforeAddFiles',X,function gR(Z,aa){if(Z)return;try{var aT=this,bm=aT.bn(),bW=aT.data().hA,eS=0,fv,aP;bm.removeClass('files_message');if(B()){if(aa.files.length)aa.mj=P;eS=1;}var bV=a.bs.indexOf(s),eN=a.bs.indexOf(a.bF.substr(0,1)),gB=bV-eN;if(aa.dA=='list'){if(!this.data().kQ)this.data().kQ=k.bind(this.tools.qc,this.tools);bm.removeClass('files_thumbnails');bm.addClass('files_details');fv=J(aa.files,this.data().kQ);aP=this.tools.fF();var dX=this.tools.kj();if(bW&&bW!='list')this.tools.lP().setHtml('');if(i){if(dX&&bW&&bW=='list'&& !aa.eu)fv=dX.getHtml()+fv;if(aP)aP.remove();if(fv){var gs=x[0]+this.tools.lz()+x[1]+fv+x[2]+x[3];bm.appendHtml(gs);}this.tools.releaseDomNodes(['kj','fF']);}else if(fv){if(aa.eu)this.tools.fF().setHtml(this.tools.lz()+x[1]+fv+x[2]);else dX.appendHtml(fv);}else aP.setHtml('');}else{bm.removeClass('files_details');bm.addClass('files_thumbnails');var am=this.data().display;fv=J(aa.files,function(pw){var aq='r'+pw.index,ar=[];ar.push('');ar.push(u,'
        ');if(am.filename)ar.push('
        ',k.htmlEncode(pw.name),'
        ');ar.push('');if(am.date)ar.push('',pw.dateF,'');if(am.filesize)ar.push('',k.formatSize(pw.size,aT.app.lang,true),'');ar.push('
        ');return ar.join('');});aP=this.tools.lP();if(bW&&bW=='list'){var gP=this.tools.fF();if(gP&&i)gP.remove();else if(gP)gP.setHtml('');}if(aa.eu)aP.setHtml(fv);else aP.appendHtml(fv);}0>gB&&(gB=bV-eN+33);if(!eS&&(!r||a.bs.indexOf(r)%(!gB?33:8)<7)){aa.mj=Q;eS=1;}if((aa.eu&& !fv||eS)&&aa.mj){bm.addClass('files_message');this.tools.of().setHtml(aa.mj);}if(!r&& !eS)aP.setHtml('');this.oW('successAddFiles');this.oW('afterAddFiles');}catch(pw){this.oW('failedAddFiles');this.oW('afterAddFiles');throw a.ba(pw);}});});N.bh('ShowFolderFiles',['requestShowFolderFiles'],function aa(W){var X=this,Y=a.ld.bX['foldertree.foldertree'].tools.cq(W),Z=k.extend({},W.data,{folder:Y},true);this.oW('beforeShowFolderFiles',Z,function aP(aT,bm){if(aT)return;if(this.tools.dH())this.oW('requestSelectFile');this.app.cS('refresh').bR(a.aY);try{var bW=bm.folder,eS;if(!bW.acl.folderView){X.app.msgDialog('',X.app.lang.Errors[103]);throw '[CKFINDER] No permissions to view folder.';}W.data.ib=this;this.data().folder=bW;X.tools.kR();var fv=W.data.lookup?W.data.lookup:null;this.oW('requestRenderFiles',{eu:1,mj:X.app.lang.FilesLoading});this.app.connector.sendCommand('GetFiles',eS,function(bV){X.app.cS('refresh').bR(a.aS);if(X.app.aV!=bW){X.oW('failedShowFolderFiles',bm);X.oW('afterShowFolderFiles',bm);return;}if(bV.checkError()||B.toString().length<200)return;X.tools.kR();var eN,gB=bV.selectNodes('Connector/Files/File');for(var dX=0;dX'+Z.ib.app.lang.SetDisplayName+'');if(W.filesize)X.push(''+Z.ib.app.lang.SetDisplaySize+'');if(W.date)X.push(''+Z.ib.app.lang.SetDisplayDate+'');var Y=X.length-1;if(Y)X[Y]=''+X[Y].substr(4);else X[Y]=''+v+''+(Z.filename?k.htmlEncode(W.name):'')+''+'');if(Z.filesize)aa.push(''+k.formatSize(W.size,this.ib.app.lang,true)+'');if(Z.date)aa.push(''+W.dateF+'');var aT=aa.length-1;if(aT)aa[aT]=''+aa[aT].substr(4);else aa[aT]=''+''+'img alt'+''+aa.join('')+'';};N.tools.dH=function(){var W=this.ib.data();if(W.cG)if(!W.cG.isDeleted)return W.cG;else return W.cG=null;};N.tools.oO=function(W){var X=this.ib.data(),Y=[];if(X.nY){for(var Z=0;Z
        '+F(am),S||null);else if(am.length==fv.length-dX){eN=N.lang.OperationCompletedErrors+' '+N.lang[P?'MovedFilesNumber':'CopiedFilesNumber'].replace('%s',dX)+'

        ';eN+=N.lang[P?'MoveFailedList':'CopyFailedList'].replace('%s',F(am));N.msgDialog('',eN,S||null);}var ar=E(N,fv,O.fileCallback);gs&&N.cg.openDialog('moveFileExists',function(at){var au=arguments.callee;eN='';if(am.length)eN+=N.lang.OperationCompletedErrors+' ';eN+=dX?N.lang[P?'MovedFilesNumber':'CopiedFilesNumber'].replace('%s',dX):'';if(am.length)eN+=(eN?'

        ':'')+N.lang[P?'MoveFailedList':'CopyFailedList'].replace('%s',F(am));eN&&(eN+='

        ');var av=N.lang.ErrorMsg.FileExists;av=av.replace('%s',eS[0]);eN+=''+av+'';at.show();at.getContentElement('tab1','msg').getElement().setHtml(eN);at.on('ok',function aC(aw){aw.removeListener();var ax=at.getContentElement('tab1','option').getValue(),ay=at.getContentElement('tab1','remember').getValue(),az;switch(ax){case 'autorename':case 'overwrite':az=[ax];break;case 'skip':if(!ay){eS.shift();eS.length&&setTimeout(function(){N.cg.openDialog('moveFileExists',au);},0);}else S&&S();return;break;}if(ay)for(var aA=1,aB=eS.length;aA'+N.lang[P?'MovedFilesNumber':'CopiedFilesNumber'].replace('%s',ar);N.msgDialog('',eN,S||null);}else S&&S();},O.destination.type,O.destination);};function E(N,O,P){var Q=0,R;for(var S=0,T=O.length;S
      • '+N.join('
      • ')+'
      • ';};a.aL.File=function(N,O,P,Q,R,S){var T=this;T.index=null;T.app=null;T.name=N;T.ext=N.match(t.fX)[0];T.nameL=N.toLowerCase();T.size=O;T.thumb=P;T.date=Q;T.dateF=R;T.folder=S;T.isDeleted=false;};a.aL.File.prototype={rename:function(N){G(N,this.app);var O=this;if(O.name==N){O.app.oW('afterCommandExecDefered',{name:'RenameFile',file:O});return;}O.app.oW('requestProcessingFile',{file:O});O.app.connector.sendCommandPost('RenameFile',{fileName:O.name,newFileName:N},null,function(P){if(P.checkError()){O.app.oW('requestRepaintFile',{file:O});return;}O.name=P.selectSingleNode('Connector/RenamedFile/@newName').value;O.nameL=O.name.toLowerCase();O.ext=O.name.match(t.fX)[0];O.thumb=0;O.app.oW('afterCommandExecDefered',{name:'RenameFile',file:O});},O.folder.type,O.folder);},remove:function(){H(this.app,[this]);},select:function(N){this.app.oW('requestSelectFile',{file:this,multiple:N});},deselect:function(N){N?this.select(true):this.app.oW('requestSelectFile');},'toString':function(){return this.name;},isImage:function(){return this.app.rQ.rO.test(this.ext);},isSameFile:function(N){var O=this;return(O.name==N.name||O.index==N.index)&&O.folder.getPath()==N.folder.getPath()&&O.folder.type==N.folder.type;},getUrl:function(){return this.folder.getUrl()+encodeURIComponent(this.name);},rowNode:function(){var N=this;if(!N.je)N.je=N.app.document.getById('r'+N.index);return N.je;},getThumbnailUrl:function(N){var U=this;var O=U.thumb,P=U.name,Q=U.app,R=P.match(Q.rQ.jf);if(R&&(R=R[0])){if(Q.config.thumbsEnabled&&Q.rQ.rO.test(R)){var S=encodeURIComponent(U.date+'-'+U.size);if(O&&Q.config.thumbsDirectAccess)return Q.config.thumbsUrl+U.folder.type+U.folder.getPath()+encodeURIComponent(P)+(!N?'':'?hash='+Q.getResourceType(U.folder.type).hash+'&fileHash='+S);var T={FileName:P};if(N)T.fileHash=S;return Q.connector.composeUrl('Thumbnail',T,U.folder.type,U.folder);}if(Q.config.useNativeIcons&&h.gecko)return 'moz-icon://.'+R.toLowerCase()+'?size=32';if(Q.rQ.jh.test(R))return Q.fh+'images/icons/32/'+R.toLowerCase()+'.gif';}return Q.fh+'images/icons/32/default.icon.gif';},filenameNode:function(){var O=this;if(O.ht===undefined){var N=O.rowNode();if(N)if(N.is('a'))O.ht=M(L(N.$.childNodes,'h5'));else O.ht=M(L(O.aNode().$.childNodes,'h5'));}return O.ht;},aNode:function(){var P=this;if(P.dM===undefined){var N=P.rowNode();if(N)if(N.is('a'))P.dM=N;else{var O=L(N.$.childNodes,'td',1);P.dM=M(L(O.childNodes,'a'));}}return P.dM;},focusNode:function(){return this.aNode();},releaseDomNodes:function(){this.je=undefined;this.dM=undefined;this.ht=undefined;},focus:function(N,O){!O&&this.select(N);var P=this.focusNode();P.setAttribute('tabindex',0);P.focus();},blur:function(){this.aNode().setAttribute('tabindex',-1);}};function G(N,O){if(!N||N.length===0)throw new a.dU('name_empty',O.lang.ErrorMsg.FileEmpty);if(t.iz.test(N))throw new a.dU('name_invalid_chars',O.lang.ErrorMsg.FileInvChar);return true;};function H(N,O){var P={},Q=O[0].folder,R=Q.getPath();for(var S=0,T=O.length;S','');if(this.icon!==false)s.push('');s.push('',this.label,'');if(this.vZ)s.push('');s.push('','');if(this.onRender)this.onRender();return v;},bR:function(r){var w=this;if(w._.bu==r)return false;w._.bu=r;var s=w._.app.document.getById(w._.id);if(s){s.bR(r);r==a.aY?s.setAttribute('aria-disabled',true):s.removeAttribute('aria-disabled');r==a.eV?s.setAttribute('aria-pressed',true):s.removeAttribute('aria-pressed');var t=w.title,u=w._.app.lang.common.unavailable,v=s.getChild(1);if(r==a.aY)t=u.replace('%1',w.title);v.setHtml(t);return true;}else return false;}};p.button._={instances:[],keydown:function(r,s){var t=p.button._.instances[r];if(t.onkey){s=new j.event(s);return t.onkey(t,s.db())!==false;}},focus:function(r,s){var t=p.button._.instances[r],u;if(t.onfocus)u=t.onfocus(t,new j.event(s))!==false;if(h.gecko&&h.version<10900)s.preventBubble();return u;}};CKFinder._.uiButtonKeydown=p.button._.keydown;CKFinder._.uiButtonFocus=p.button._.focus;p.prototype.qW=function(r,s){this.add(r,a.UI_BUTTON,s);};(function(){o.add('container',{bM:[],bz:function(r){var s=this;r.on('themeAvailable',function(){s.pV(r);});},pV:function(r){var s=r.config.height,t=r.config.tabIndex||r.element.getAttribute('tabindex')||0;if(!isNaN(s)){s=Math.max(s,200);s+='px';}var u='',v=r.config.width;if(v){if(!isNaN(v))v+='px';u+='width: '+v+';';}var w=r.config.className?'class="'+r.config.className+'"':'',x=h.isCustomDomain(),y='document.open();'+(x?'document.domain="'+window.document.domain+'";':'')+'document.close();',z=m.kE('',r.element.getDocument());function A(C){C&&C.removeListener();var D=z.getFrameDocument().$;D.open();if(x)D.domain=document.domain;r.document=new l(D);r.theme.dQ(r);D.close();(D.defaultView||D.parentWindow).CKFinder=CKFinder;a.skins.load(r,'application',function(){var F=r.dJ;if(F)F.oA(r.document);});if(!z.isVisible()&&i&&h.version>=8)var E=setInterval(function(){if(z.isVisible()){r.layout.ea(true);E=clearInterval(E);}},500);};if(i&&h.version>=9&&r.cg.inPopup)r.element.getDocument().getWindow().$.ckfinder=function(){r.element.getDocument().getWindow().$.ckfinder=undefined;A();};z.on('load',A);var B=r.lang.appTitle.replace('%1',r.name);if(h.gecko){z.on('load',function(C){C.removeListener();});r.element.setAttributes({role:'region',title:B});z.setAttributes({role:'region',title:' '});}else if(h.webkit){z.setAttribute('title',B);z.setAttribute('name',B);}else if(i)z.appendTo(r.element);if(!i)r.element.append(z);r.container=z;}});a.application.prototype.focus=function(){var t=this;if(t._.oO&&t._.oO.length>1){t.oW('requestSelectFile');for(var r=0,s=t._.oO.length;r